0 info it worked if it ends with ok 1 verbose cli [ 'C:\\Program Files\\nodejs\\\\node.exe', 1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js', 1 verbose cli 'install', 1 verbose cli 'sharp', 1 verbose cli '--loglevel', 1 verbose cli 'verbose' ] 2 info using npm@2.7.4 3 info using node@v0.12.2 4 verbose node symlink C:\Program Files\nodejs\\node.exe 5 silly cache add args [ 'sharp', null ] 6 verbose cache add spec sharp 7 silly cache add parsed spec { raw: 'sharp', 7 silly cache add scope: null, 7 silly cache add name: 'sharp', 7 silly cache add rawSpec: '', 7 silly cache add spec: '*', 7 silly cache add type: 'range' } 8 verbose addNamed sharp@* 9 silly addNamed semver.valid null 10 silly addNamed semver.validRange * 11 silly addNameRange { name: 'sharp', range: '*', hasData: false } 12 silly mapToRegistry name sharp 13 silly mapToRegistry using default registry 14 silly mapToRegistry registry https://registry.npmjs.org/ 15 silly mapToRegistry uri https://registry.npmjs.org/sharp 16 verbose addNameRange registry:https://registry.npmjs.org/sharp not in flight; fetching 17 verbose request uri https://registry.npmjs.org/sharp 18 verbose request no auth needed 19 info attempt registry request try #1 at 10:35:07 AM 20 verbose request id 87958dfedb08ccf6 21 verbose etag "195AMIL917CPM6NQD9FQZP40V" 22 http request GET https://registry.npmjs.org/sharp 23 http 304 https://registry.npmjs.org/sharp 24 silly get cb [ 304, 24 silly get { date: 'Thu, 28 Apr 2016 09:35:07 GMT', 24 silly get via: '1.1 varnish', 24 silly get 'cache-control': 'max-age=300', 24 silly get etag: '"195AMIL917CPM6NQD9FQZP40V"', 24 silly get age: '70', 24 silly get connection: 'keep-alive', 24 silly get 'x-served-by': 'cache-lcy1126-LCY', 24 silly get 'x-cache': 'HIT', 24 silly get 'x-cache-hits': '1', 24 silly get 'x-timer': 'S1461836107.646802,VS0,VE0', 24 silly get vary: 'Accept-Encoding' } ] 25 verbose etag https://registry.npmjs.org/sharp from cache 26 verbose get saving sharp to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\sharp\.cache.json 27 silly addNameRange number 2 { name: 'sharp', range: '*', hasData: true } 28 silly addNameRange versions [ 'sharp', 28 silly addNameRange [ '0.0.1', 28 silly addNameRange '0.0.2', 28 silly addNameRange '0.0.3', 28 silly addNameRange '0.0.4', 28 silly addNameRange '0.0.5', 28 silly addNameRange '0.0.6', 28 silly addNameRange '0.0.7', 28 silly addNameRange '0.0.8', 28 silly addNameRange '0.0.9', 28 silly addNameRange '0.1.0', 28 silly addNameRange '0.1.1', 28 silly addNameRange '0.1.2', 28 silly addNameRange '0.1.3', 28 silly addNameRange '0.1.4', 28 silly addNameRange '0.1.5', 28 silly addNameRange '0.1.6', 28 silly addNameRange '0.1.7', 28 silly addNameRange '0.1.8', 28 silly addNameRange '0.2.0', 28 silly addNameRange '0.3.0', 28 silly addNameRange '0.4.0', 28 silly addNameRange '0.4.1', 28 silly addNameRange '0.4.2', 28 silly addNameRange '0.5.0', 28 silly addNameRange '0.5.1', 28 silly addNameRange '0.5.2', 28 silly addNameRange '0.6.0', 28 silly addNameRange '0.6.1', 28 silly addNameRange '0.6.2', 28 silly addNameRange '0.7.0', 28 silly addNameRange '0.7.1', 28 silly addNameRange '0.7.2', 28 silly addNameRange '0.8.0', 28 silly addNameRange '0.8.1', 28 silly addNameRange '0.8.2', 28 silly addNameRange '0.8.3', 28 silly addNameRange '0.8.4', 28 silly addNameRange '0.9.0', 28 silly addNameRange '0.9.1', 28 silly addNameRange '0.9.2', 28 silly addNameRange '0.9.3', 28 silly addNameRange '0.10.0', 28 silly addNameRange '0.10.1', 28 silly addNameRange '0.11.0', 28 silly addNameRange '0.11.1', 28 silly addNameRange '0.11.2', 28 silly addNameRange '0.11.3', 28 silly addNameRange '0.11.4', 28 silly addNameRange '0.12.0', 28 silly addNameRange '0.12.1', 28 silly addNameRange '0.12.2', 28 silly addNameRange '0.13.0', 28 silly addNameRange '0.13.1', 28 silly addNameRange '0.14.0', 28 silly addNameRange '0.14.1' ] ] 29 verbose addNamed sharp@0.14.1 30 silly addNamed semver.valid 0.14.1 31 silly addNamed semver.validRange 0.14.1 32 silly cache afterAdd sharp@0.14.1 33 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\sharp\0.14.1\package\package.json not in flight; writing 34 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\sharp\0.14.1\package\package.json written 35 silly install resolved [ { name: 'sharp', 35 silly install resolved version: '0.14.1', 35 silly install resolved author: { name: 'Lovell Fuller', email: 'npm@lovell.info' }, 35 silly install resolved contributors: 35 silly install resolved [ [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object], 35 silly install resolved [Object] ], 35 silly install resolved description: 'High performance Node.js module to resize JPEG, PNG, WebP and TIFF images using the libvips library', 35 silly install resolved scripts: 35 silly install resolved { clean: 'rm -rf node_modules/ build/ include/ lib/ coverage/ test/fixtures/output.*', 35 silly install resolved test: 'VIPS_WARNING=0 node ./node_modules/istanbul/lib/cli.js cover ./node_modules/mocha/bin/_mocha -- --slow=5000 --timeout=30000 ./test/unit/*.js', 35 silly install resolved 'test-win': 'node ./node_modules/mocha/bin/mocha --slow=5000 --timeout=60000 ./test/unit/*.js', 35 silly install resolved 'test-leak': './test/leak/leak.sh', 35 silly install resolved 'test-packaging': './packaging/test.sh', 35 silly install resolved 'test-clean': 'rm -rf coverage/ test/fixtures/output.* && npm install && npm test', 35 silly install resolved install: 'node-gyp rebuild' }, 35 silly install resolved main: 'index.js', 35 silly install resolved repository: { type: 'git', url: 'git://github.com/lovell/sharp.git' }, 35 silly install resolved keywords: 35 silly install resolved [ 'jpeg', 35 silly install resolved 'png', 35 silly install resolved 'webp', 35 silly install resolved 'tiff', 35 silly install resolved 'dzi', 35 silly install resolved 'resize', 35 silly install resolved 'thumbnail', 35 silly install resolved 'crop', 35 silly install resolved 'libvips', 35 silly install resolved 'vips' ], 35 silly install resolved dependencies: 35 silly install resolved { bluebird: '^3.3.5', 35 silly install resolved color: '^0.11.1', 35 silly install resolved nan: '^2.2.1', 35 silly install resolved semver: '^5.1.0', 35 silly install resolved request: '^2.71.0', 35 silly install resolved tar: '^2.2.1' }, 35 silly install resolved devDependencies: 35 silly install resolved { async: '^1.5.2', 35 silly install resolved bufferutil: '^1.2.1', 35 silly install resolved coveralls: '^2.11.9', 35 silly install resolved 'exif-reader': '^1.0.0', 35 silly install resolved icc: '^0.0.2', 35 silly install resolved istanbul: '^0.4.3', 35 silly install resolved mocha: '^2.4.5', 35 silly install resolved 'mocha-jshint': '^2.3.1', 35 silly install resolved 'node-cpplint': '^0.4.0', 35 silly install resolved rimraf: '^2.5.2', 35 silly install resolved unzip: '^0.1.11' }, 35 silly install resolved license: 'Apache-2.0', 35 silly install resolved config: { libvips: '8.2.3' }, 35 silly install resolved engines: { node: '>=0.10' }, 35 silly install resolved gypfile: true, 35 silly install resolved gitHead: '531a0402f70d3a9c01c90590d0771d135cf22ec4', 35 silly install resolved bugs: { url: 'https://github.com/lovell/sharp/issues' }, 35 silly install resolved homepage: 'https://github.com/lovell/sharp#readme', 35 silly install resolved _id: 'sharp@0.14.1', 35 silly install resolved _shasum: '0d16739999323bf0f44b21672d178b04f39f4100', 35 silly install resolved _from: 'sharp@*', 35 silly install resolved _npmVersion: '3.8.3', 35 silly install resolved _nodeVersion: '5.10.1', 35 silly install resolved _npmUser: { name: 'lovell', email: 'npm@lovell.info' }, 35 silly install resolved maintainers: [ [Object] ], 35 silly install resolved dist: 35 silly install resolved { shasum: '0d16739999323bf0f44b21672d178b04f39f4100', 35 silly install resolved tarball: 'https://registry.npmjs.org/sharp/-/sharp-0.14.1.tgz' }, 35 silly install resolved _npmOperationalInternal: 35 silly install resolved { host: 'packages-16-east.internal.npmjs.com', 35 silly install resolved tmp: 'tmp/sharp-0.14.1.tgz_1460838941567_0.8808624984230846' }, 35 silly install resolved directories: {}, 35 silly install resolved _resolved: 'https://registry.npmjs.org/sharp/-/sharp-0.14.1.tgz', 35 silly install resolved readme: 'ERROR: No README data found!' } ] 36 info install sharp@0.14.1 into E:\cartridge-images 37 info installOne sharp@0.14.1 38 verbose installOne of sharp to E:\cartridge-images not in flight; installing 39 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\sharp-1870c05d4c6b5b3a.lock for E:\cartridge-images\node_modules\sharp 40 silly install write writing sharp 0.14.1 to E:\cartridge-images\node_modules\sharp 41 silly cache addNamed cb sharp@0.14.1 42 verbose unbuild node_modules\sharp 43 silly gentlyRm E:\cartridge-images\node_modules\sharp is being purged from base E:\cartridge-images 44 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp 45 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\sharp\0.14.1\package.tgz 46 verbose tar unpacking to E:\cartridge-images\node_modules\sharp 47 silly gentlyRm E:\cartridge-images\node_modules\sharp is being purged 48 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp 49 silly gunzTarPerm modes [ '777', '666' ] 50 silly gunzTarPerm extractEntry package.json 51 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 52 silly gunzTarPerm extractEntry .npmignore 53 silly gunzTarPerm modified mode [ '.npmignore', 436, 438 ] 54 silly gunzTarPerm extractEntry README.md 55 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 56 silly gunzTarPerm extractEntry LICENSE 57 silly gunzTarPerm modified mode [ 'LICENSE', 436, 438 ] 58 silly gunzTarPerm extractEntry binding.js 59 silly gunzTarPerm modified mode [ 'binding.js', 420, 438 ] 60 silly gunzTarPerm extractEntry index.js 61 silly gunzTarPerm modified mode [ 'index.js', 436, 438 ] 62 silly gunzTarPerm extractEntry binding.gyp 63 silly gunzTarPerm modified mode [ 'binding.gyp', 436, 438 ] 64 silly gunzTarPerm extractEntry docs/api.md 65 silly gunzTarPerm modified mode [ 'docs/api.md', 436, 438 ] 66 silly gunzTarPerm extractEntry docs/changelog.md 67 silly gunzTarPerm modified mode [ 'docs/changelog.md', 420, 438 ] 68 silly gunzTarPerm extractEntry docs/index.md 69 silly gunzTarPerm modified mode [ 'docs/index.md', 436, 438 ] 70 silly gunzTarPerm extractEntry docs/install.md 71 silly gunzTarPerm modified mode [ 'docs/install.md', 420, 438 ] 72 silly gunzTarPerm extractEntry docs/performance.md 73 silly gunzTarPerm modified mode [ 'docs/performance.md', 436, 438 ] 74 silly gunzTarPerm extractEntry icc/USWebCoatedSWOP.icc 75 silly gunzTarPerm modified mode [ 'icc/USWebCoatedSWOP.icc', 436, 438 ] 76 silly gunzTarPerm extractEntry icc/sRGB_IEC61966-2-1_black_scaled.icc 77 silly gunzTarPerm modified mode [ 'icc/sRGB_IEC61966-2-1_black_scaled.icc', 436, 438 ] 78 silly gunzTarPerm extractEntry src/operations.h 79 silly gunzTarPerm modified mode [ 'src/operations.h', 436, 438 ] 80 silly gunzTarPerm extractEntry src/common.cc 81 silly gunzTarPerm modified mode [ 'src/common.cc', 436, 438 ] 82 silly gunzTarPerm extractEntry src/libvips/cplusplus/VError.cpp 83 silly gunzTarPerm modified mode [ 'src/libvips/cplusplus/VError.cpp', 436, 438 ] 84 silly gunzTarPerm extractEntry src/libvips/cplusplus/VImage.cpp 85 silly gunzTarPerm modified mode [ 'src/libvips/cplusplus/VImage.cpp', 436, 438 ] 86 silly gunzTarPerm extractEntry src/libvips/cplusplus/VInterpolate.cpp 87 silly gunzTarPerm modified mode [ 'src/libvips/cplusplus/VInterpolate.cpp', 436, 438 ] 88 silly gunzTarPerm extractEntry src/libvips/cplusplus/vips-operators.cpp 89 silly gunzTarPerm modified mode [ 'src/libvips/cplusplus/vips-operators.cpp', 436, 438 ] 90 silly gunzTarPerm extractEntry src/metadata.cc 91 silly gunzTarPerm modified mode [ 'src/metadata.cc', 436, 438 ] 92 silly gunzTarPerm extractEntry src/metadata.h 93 silly gunzTarPerm modified mode [ 'src/metadata.h', 436, 438 ] 94 silly gunzTarPerm extractEntry src/operations.cc 95 silly gunzTarPerm modified mode [ 'src/operations.cc', 436, 438 ] 96 silly gunzTarPerm extractEntry src/common.h 97 silly gunzTarPerm modified mode [ 'src/common.h', 436, 438 ] 98 silly gunzTarPerm extractEntry src/pipeline.cc 99 silly gunzTarPerm modified mode [ 'src/pipeline.cc', 436, 438 ] 100 silly gunzTarPerm extractEntry src/pipeline.h 101 silly gunzTarPerm modified mode [ 'src/pipeline.h', 436, 438 ] 102 silly gunzTarPerm extractEntry src/sharp.cc 103 silly gunzTarPerm modified mode [ 'src/sharp.cc', 420, 438 ] 104 silly gunzTarPerm extractEntry src/utilities.cc 105 silly gunzTarPerm modified mode [ 'src/utilities.cc', 420, 438 ] 106 silly gunzTarPerm extractEntry src/utilities.h 107 silly gunzTarPerm modified mode [ 'src/utilities.h', 436, 438 ] 108 silly gunzTarPerm extractEntry CONTRIBUTING.md 109 silly gunzTarPerm modified mode [ 'CONTRIBUTING.md', 436, 438 ] 110 info preinstall sharp@0.14.1 111 silly prepareForInstallMany adding bluebird@^3.3.5 from sharp dependencies 112 silly prepareForInstallMany adding color@^0.11.1 from sharp dependencies 113 silly prepareForInstallMany adding nan@^2.2.1 from sharp dependencies 114 silly prepareForInstallMany adding semver@^5.1.0 from sharp dependencies 115 silly prepareForInstallMany adding request@^2.71.0 from sharp dependencies 116 silly prepareForInstallMany adding tar@^2.2.1 from sharp dependencies 117 silly cache add args [ 'bluebird@^3.3.5', null ] 118 verbose cache add spec bluebird@^3.3.5 119 silly cache add args [ 'color@^0.11.1', null ] 120 verbose cache add spec color@^0.11.1 121 silly cache add parsed spec { raw: 'bluebird@^3.3.5', 121 silly cache add scope: null, 121 silly cache add name: 'bluebird', 121 silly cache add rawSpec: '^3.3.5', 121 silly cache add spec: '>=3.3.5 <4.0.0', 121 silly cache add type: 'range' } 122 verbose addNamed bluebird@>=3.3.5 <4.0.0 123 silly addNamed semver.valid null 124 silly addNamed semver.validRange >=3.3.5 <4.0.0 125 silly addNameRange { name: 'bluebird', range: '>=3.3.5 <4.0.0', hasData: false } 126 silly mapToRegistry name bluebird 127 silly mapToRegistry using default registry 128 silly mapToRegistry registry https://registry.npmjs.org/ 129 silly mapToRegistry uri https://registry.npmjs.org/bluebird 130 verbose addNameRange registry:https://registry.npmjs.org/bluebird not in flight; fetching 131 silly cache add parsed spec { raw: 'color@^0.11.1', 131 silly cache add scope: null, 131 silly cache add name: 'color', 131 silly cache add rawSpec: '^0.11.1', 131 silly cache add spec: '>=0.11.1 <0.12.0', 131 silly cache add type: 'range' } 132 verbose addNamed color@>=0.11.1 <0.12.0 133 silly addNamed semver.valid null 134 silly addNamed semver.validRange >=0.11.1 <0.12.0 135 silly addNameRange { name: 'color', range: '>=0.11.1 <0.12.0', hasData: false } 136 silly mapToRegistry name color 137 silly mapToRegistry using default registry 138 silly mapToRegistry registry https://registry.npmjs.org/ 139 silly mapToRegistry uri https://registry.npmjs.org/color 140 verbose addNameRange registry:https://registry.npmjs.org/color not in flight; fetching 141 silly cache add args [ 'nan@^2.2.1', null ] 142 verbose cache add spec nan@^2.2.1 143 silly cache add parsed spec { raw: 'nan@^2.2.1', 143 silly cache add scope: null, 143 silly cache add name: 'nan', 143 silly cache add rawSpec: '^2.2.1', 143 silly cache add spec: '>=2.2.1 <3.0.0', 143 silly cache add type: 'range' } 144 verbose addNamed nan@>=2.2.1 <3.0.0 145 silly addNamed semver.valid null 146 silly addNamed semver.validRange >=2.2.1 <3.0.0 147 silly addNameRange { name: 'nan', range: '>=2.2.1 <3.0.0', hasData: false } 148 silly mapToRegistry name nan 149 silly mapToRegistry using default registry 150 silly mapToRegistry registry https://registry.npmjs.org/ 151 silly mapToRegistry uri https://registry.npmjs.org/nan 152 verbose addNameRange registry:https://registry.npmjs.org/nan not in flight; fetching 153 silly cache add args [ 'semver@^5.1.0', null ] 154 verbose cache add spec semver@^5.1.0 155 silly cache add parsed spec { raw: 'semver@^5.1.0', 155 silly cache add scope: null, 155 silly cache add name: 'semver', 155 silly cache add rawSpec: '^5.1.0', 155 silly cache add spec: '>=5.1.0 <6.0.0', 155 silly cache add type: 'range' } 156 verbose addNamed semver@>=5.1.0 <6.0.0 157 silly addNamed semver.valid null 158 silly addNamed semver.validRange >=5.1.0 <6.0.0 159 silly addNameRange { name: 'semver', range: '>=5.1.0 <6.0.0', hasData: false } 160 silly mapToRegistry name semver 161 silly mapToRegistry using default registry 162 silly mapToRegistry registry https://registry.npmjs.org/ 163 silly mapToRegistry uri https://registry.npmjs.org/semver 164 verbose addNameRange registry:https://registry.npmjs.org/semver not in flight; fetching 165 silly cache add args [ 'request@^2.71.0', null ] 166 verbose cache add spec request@^2.71.0 167 silly cache add parsed spec { raw: 'request@^2.71.0', 167 silly cache add scope: null, 167 silly cache add name: 'request', 167 silly cache add rawSpec: '^2.71.0', 167 silly cache add spec: '>=2.71.0 <3.0.0', 167 silly cache add type: 'range' } 168 verbose addNamed request@>=2.71.0 <3.0.0 169 silly addNamed semver.valid null 170 silly addNamed semver.validRange >=2.71.0 <3.0.0 171 silly addNameRange { name: 'request', range: '>=2.71.0 <3.0.0', hasData: false } 172 silly mapToRegistry name request 173 silly mapToRegistry using default registry 174 silly mapToRegistry registry https://registry.npmjs.org/ 175 silly mapToRegistry uri https://registry.npmjs.org/request 176 verbose addNameRange registry:https://registry.npmjs.org/request not in flight; fetching 177 silly cache add args [ 'tar@^2.2.1', null ] 178 verbose cache add spec tar@^2.2.1 179 silly cache add parsed spec { raw: 'tar@^2.2.1', 179 silly cache add scope: null, 179 silly cache add name: 'tar', 179 silly cache add rawSpec: '^2.2.1', 179 silly cache add spec: '>=2.2.1 <3.0.0', 179 silly cache add type: 'range' } 180 verbose addNamed tar@>=2.2.1 <3.0.0 181 silly addNamed semver.valid null 182 silly addNamed semver.validRange >=2.2.1 <3.0.0 183 silly addNameRange { name: 'tar', range: '>=2.2.1 <3.0.0', hasData: false } 184 silly mapToRegistry name tar 185 silly mapToRegistry using default registry 186 silly mapToRegistry registry https://registry.npmjs.org/ 187 silly mapToRegistry uri https://registry.npmjs.org/tar 188 verbose addNameRange registry:https://registry.npmjs.org/tar not in flight; fetching 189 verbose request uri https://registry.npmjs.org/color 190 verbose request no auth needed 191 info attempt registry request try #1 at 10:35:08 AM 192 verbose etag "6YLR82NTPAYD1TU69ZGFLCITM" 193 http request GET https://registry.npmjs.org/color 194 verbose request uri https://registry.npmjs.org/semver 195 verbose request no auth needed 196 info attempt registry request try #1 at 10:35:08 AM 197 verbose etag "1NTGMWGNPB43FQ0BD7ANB091R" 198 http request GET https://registry.npmjs.org/semver 199 verbose request uri https://registry.npmjs.org/bluebird 200 verbose request no auth needed 201 info attempt registry request try #1 at 10:35:08 AM 202 verbose etag "9DH8HHHKFBUPD8NJLSH4PHFNN" 203 http request GET https://registry.npmjs.org/bluebird 204 verbose request uri https://registry.npmjs.org/nan 205 verbose request no auth needed 206 info attempt registry request try #1 at 10:35:08 AM 207 verbose etag "EHABLM48HODTES4F53YIIAWSX" 208 http request GET https://registry.npmjs.org/nan 209 verbose request uri https://registry.npmjs.org/request 210 verbose request no auth needed 211 info attempt registry request try #1 at 10:35:08 AM 212 verbose etag "19G5EQ93ULHSSXTYNINBGF2WY" 213 http request GET https://registry.npmjs.org/request 214 verbose request uri https://registry.npmjs.org/tar 215 verbose request no auth needed 216 info attempt registry request try #1 at 10:35:08 AM 217 verbose etag "3KJ8CU8UOIJPGLQX5N4AQJMB" 218 http request GET https://registry.npmjs.org/tar 219 http 304 https://registry.npmjs.org/color 220 silly get cb [ 304, 220 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 220 silly get via: '1.1 varnish', 220 silly get 'cache-control': 'max-age=300', 220 silly get etag: '"6YLR82NTPAYD1TU69ZGFLCITM"', 220 silly get age: '265', 220 silly get connection: 'keep-alive', 220 silly get 'x-served-by': 'cache-lcy1120-LCY', 220 silly get 'x-cache': 'HIT', 220 silly get 'x-cache-hits': '3', 220 silly get 'x-timer': 'S1461836108.272977,VS0,VE0', 220 silly get vary: 'Accept-Encoding' } ] 221 verbose etag https://registry.npmjs.org/color from cache 222 verbose get saving color to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\color\.cache.json 223 http 304 https://registry.npmjs.org/semver 224 silly get cb [ 304, 224 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 224 silly get via: '1.1 varnish', 224 silly get 'cache-control': 'max-age=300', 224 silly get etag: '"1NTGMWGNPB43FQ0BD7ANB091R"', 224 silly get age: '231', 224 silly get connection: 'keep-alive', 224 silly get 'x-served-by': 'cache-lcy1135-LCY', 224 silly get 'x-cache': 'HIT', 224 silly get 'x-cache-hits': '34', 224 silly get 'x-timer': 'S1461836108.274842,VS0,VE0', 224 silly get vary: 'Accept-Encoding' } ] 225 verbose etag https://registry.npmjs.org/semver from cache 226 verbose get saving semver to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\semver\.cache.json 227 http 304 https://registry.npmjs.org/bluebird 228 silly get cb [ 304, 228 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 228 silly get via: '1.1 varnish', 228 silly get 'cache-control': 'max-age=300', 228 silly get etag: '"9DH8HHHKFBUPD8NJLSH4PHFNN"', 228 silly get age: '173', 228 silly get connection: 'keep-alive', 228 silly get 'x-served-by': 'cache-lcy1133-LCY', 228 silly get 'x-cache': 'HIT', 228 silly get 'x-cache-hits': '7', 228 silly get 'x-timer': 'S1461836108.278056,VS0,VE0', 228 silly get vary: 'Accept-Encoding' } ] 229 verbose etag https://registry.npmjs.org/bluebird from cache 230 verbose get saving bluebird to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\bluebird\.cache.json 231 http 304 https://registry.npmjs.org/nan 232 silly get cb [ 304, 232 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 232 silly get via: '1.1 varnish', 232 silly get 'cache-control': 'max-age=300', 232 silly get etag: '"EHABLM48HODTES4F53YIIAWSX"', 232 silly get age: '213', 232 silly get connection: 'keep-alive', 232 silly get 'x-served-by': 'cache-lcy1131-LCY', 232 silly get 'x-cache': 'HIT', 232 silly get 'x-cache-hits': '10', 232 silly get 'x-timer': 'S1461836108.280209,VS0,VE0', 232 silly get vary: 'Accept-Encoding' } ] 233 verbose etag https://registry.npmjs.org/nan from cache 234 verbose get saving nan to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\nan\.cache.json 235 http 304 https://registry.npmjs.org/request 236 silly get cb [ 304, 236 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 236 silly get via: '1.1 varnish', 236 silly get 'cache-control': 'max-age=300', 236 silly get etag: '"19G5EQ93ULHSSXTYNINBGF2WY"', 236 silly get age: '271', 236 silly get connection: 'keep-alive', 236 silly get 'x-served-by': 'cache-lcy1132-LCY', 236 silly get 'x-cache': 'HIT', 236 silly get 'x-cache-hits': '25', 236 silly get 'x-timer': 'S1461836108.283170,VS0,VE0', 236 silly get vary: 'Accept-Encoding' } ] 237 verbose etag https://registry.npmjs.org/request from cache 238 verbose get saving request to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\request\.cache.json 239 http 304 https://registry.npmjs.org/tar 240 silly get cb [ 304, 240 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 240 silly get via: '1.1 varnish', 240 silly get 'cache-control': 'max-age=300', 240 silly get etag: '"3KJ8CU8UOIJPGLQX5N4AQJMB"', 240 silly get age: '126', 240 silly get connection: 'keep-alive', 240 silly get 'x-served-by': 'cache-lcy1122-LCY', 240 silly get 'x-cache': 'HIT', 240 silly get 'x-cache-hits': '2', 240 silly get 'x-timer': 'S1461836108.303924,VS0,VE0', 240 silly get vary: 'Accept-Encoding' } ] 241 verbose etag https://registry.npmjs.org/tar from cache 242 verbose get saving tar to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\tar\.cache.json 243 silly addNameRange number 2 { name: 'color', range: '>=0.11.1 <0.12.0', hasData: true } 244 silly addNameRange versions [ 'color', 244 silly addNameRange [ '0.1.0', 244 silly addNameRange '0.1.1', 244 silly addNameRange '0.1.2', 244 silly addNameRange '0.1.3', 244 silly addNameRange '0.2.0', 244 silly addNameRange '0.3.0', 244 silly addNameRange '0.4.0', 244 silly addNameRange '0.4.1', 244 silly addNameRange '0.4.2', 244 silly addNameRange '0.4.3', 244 silly addNameRange '0.4.4', 244 silly addNameRange '0.5.0', 244 silly addNameRange '0.6.0', 244 silly addNameRange '0.7.0', 244 silly addNameRange '0.7.1', 244 silly addNameRange '0.7.2', 244 silly addNameRange '0.7.3', 244 silly addNameRange '0.8.0', 244 silly addNameRange '0.9.0', 244 silly addNameRange '0.10.0', 244 silly addNameRange '0.10.1', 244 silly addNameRange '0.11.0', 244 silly addNameRange '0.11.1' ] ] 245 verbose addNamed color@0.11.1 246 silly addNamed semver.valid 0.11.1 247 silly addNamed semver.validRange 0.11.1 248 silly addNameRange number 2 { name: 'semver', range: '>=5.1.0 <6.0.0', hasData: true } 249 silly addNameRange versions [ 'semver', 249 silly addNameRange [ '1.0.0', 249 silly addNameRange '1.0.1', 249 silly addNameRange '1.0.2', 249 silly addNameRange '1.0.3', 249 silly addNameRange '1.0.4', 249 silly addNameRange '1.0.5', 249 silly addNameRange '1.0.6', 249 silly addNameRange '1.0.7', 249 silly addNameRange '1.0.8', 249 silly addNameRange '1.0.9', 249 silly addNameRange '1.0.10', 249 silly addNameRange '1.0.11', 249 silly addNameRange '1.0.12', 249 silly addNameRange '1.0.13', 249 silly addNameRange '1.0.14', 249 silly addNameRange '1.1.0', 249 silly addNameRange '1.1.1', 249 silly addNameRange '1.1.2', 249 silly addNameRange '1.1.3', 249 silly addNameRange '1.1.4', 249 silly addNameRange '2.0.0-alpha', 249 silly addNameRange '2.0.0-beta', 249 silly addNameRange '2.0.1', 249 silly addNameRange '2.0.2', 249 silly addNameRange '2.0.3', 249 silly addNameRange '2.0.4', 249 silly addNameRange '2.0.5', 249 silly addNameRange '2.0.6', 249 silly addNameRange '2.0.7', 249 silly addNameRange '2.0.8', 249 silly addNameRange '2.0.9', 249 silly addNameRange '2.0.10', 249 silly addNameRange '2.0.11', 249 silly addNameRange '2.1.0', 249 silly addNameRange '2.2.0', 249 silly addNameRange '2.2.1', 249 silly addNameRange '2.3.0', 249 silly addNameRange '2.3.1', 249 silly addNameRange '2.3.2', 249 silly addNameRange '3.0.0', 249 silly addNameRange '3.0.1', 249 silly addNameRange '4.0.0', 249 silly addNameRange '4.0.2', 249 silly addNameRange '4.0.3', 249 silly addNameRange '4.1.0', 249 silly addNameRange '4.1.1', 249 silly addNameRange '4.2.0', 249 silly addNameRange '4.2.1', 249 silly addNameRange '4.2.2', 249 silly addNameRange '4.3.0', 249 silly addNameRange '4.3.1', 249 silly addNameRange '4.3.2', 249 silly addNameRange '4.3.3', 249 silly addNameRange '4.3.4', 249 silly addNameRange '4.3.5', 249 silly addNameRange '4.3.6', 249 silly addNameRange '5.0.0', 249 silly addNameRange '5.0.1', 249 silly addNameRange '5.0.2', 249 silly addNameRange '5.0.3', 249 silly addNameRange '5.1.0' ] ] 250 verbose addNamed semver@5.1.0 251 silly addNamed semver.valid 5.1.0 252 silly addNamed semver.validRange 5.1.0 253 silly addNameRange number 2 { name: 'bluebird', range: '>=3.3.5 <4.0.0', hasData: true } 254 silly addNameRange versions [ 'bluebird', 254 silly addNameRange [ '0.7.1-1', 254 silly addNameRange '0.7.1-2', 254 silly addNameRange '0.7.1-3', 254 silly addNameRange '0.7.1-4', 254 silly addNameRange '0.7.1-5', 254 silly addNameRange '0.7.2-0', 254 silly addNameRange '0.7.3-0', 254 silly addNameRange '0.7.4-0', 254 silly addNameRange '0.7.4-1', 254 silly addNameRange '0.7.5-0', 254 silly addNameRange '0.7.6-0', 254 silly addNameRange '0.7.7-0', 254 silly addNameRange '0.7.7-1', 254 silly addNameRange '0.7.8-0', 254 silly addNameRange '0.7.8-1', 254 silly addNameRange '0.7.9-0', 254 silly addNameRange '0.7.9-1', 254 silly addNameRange '0.7.10-0', 254 silly addNameRange '0.7.10-1', 254 silly addNameRange '0.7.11-0', 254 silly addNameRange '0.7.12-0', 254 silly addNameRange '0.7.12-1', 254 silly addNameRange '0.7.12-2', 254 silly addNameRange '0.8.0-0', 254 silly addNameRange '0.8.0-1', 254 silly addNameRange '0.8.0-2', 254 silly addNameRange '0.8.0-3', 254 silly addNameRange '0.8.1-0', 254 silly addNameRange '0.8.2-0', 254 silly addNameRange '0.8.2-1', 254 silly addNameRange '0.8.2-2', 254 silly addNameRange '0.8.3-0', 254 silly addNameRange '0.8.3-1', 254 silly addNameRange '0.8.3-2', 254 silly addNameRange '0.8.3-3', 254 silly addNameRange '0.8.4-0', 254 silly addNameRange '0.8.4-1', 254 silly addNameRange '0.8.5-0', 254 silly addNameRange '0.8.5-1', 254 silly addNameRange '0.9.0-0', 254 silly addNameRange '0.9.1-0', 254 silly addNameRange '0.9.1-1', 254 silly addNameRange '0.9.2-0', 254 silly addNameRange '0.9.2-1', 254 silly addNameRange '0.9.3-0', 254 silly addNameRange '0.9.4-0', 254 silly addNameRange '0.9.4-1', 254 silly addNameRange '0.9.5-0', 254 silly addNameRange '0.9.6-0', 254 silly addNameRange '0.9.7-0', 254 silly addNameRange '0.9.8-0', 254 silly addNameRange '0.9.9-0', 254 silly addNameRange '0.9.10-0', 254 silly addNameRange '0.9.10-1', 254 silly addNameRange '0.9.11-0', 254 silly addNameRange '0.9.11-1', 254 silly addNameRange '0.10.0-0', 254 silly addNameRange '0.10.0-1', 254 silly addNameRange '0.10.1-0', 254 silly addNameRange '0.10.2-0', 254 silly addNameRange '0.10.2-1', 254 silly addNameRange '0.10.3-0', 254 silly addNameRange '0.10.4-0', 254 silly addNameRange '0.10.4-1', 254 silly addNameRange '0.10.5-0', 254 silly addNameRange '0.10.6-0', 254 silly addNameRange '0.10.7-0', 254 silly addNameRange '0.10.8-0', 254 silly addNameRange '0.10.9-0', 254 silly addNameRange '0.10.9-1', 254 silly addNameRange '0.10.10-0', 254 silly addNameRange '0.10.11-0', 254 silly addNameRange '0.10.11-1', 254 silly addNameRange '0.10.11-2', 254 silly addNameRange '0.10.11-4', 254 silly addNameRange '0.10.12-0', 254 silly addNameRange '0.10.13-0', 254 silly addNameRange '0.10.13-1', 254 silly addNameRange '0.10.14-0', 254 silly addNameRange '0.11.0-0', 254 silly addNameRange '0.11.1-0', 254 silly addNameRange '0.11.2-0', 254 silly addNameRange '0.11.3-0', 254 silly addNameRange '0.11.4-0', 254 silly addNameRange '0.11.4-1', 254 silly addNameRange '0.11.5-0', 254 silly addNameRange '0.11.5-1', 254 silly addNameRange '0.11.6-0', 254 silly addNameRange '1.0.0', 254 silly addNameRange '1.0.1', 254 silly addNameRange '1.0.2', 254 silly addNameRange '1.0.3', 254 silly addNameRange '1.0.4', 254 silly addNameRange '1.0.5', 254 silly addNameRange '1.0.7', 254 silly addNameRange '1.0.8', 254 silly addNameRange '1.1.0', 254 silly addNameRange '1.1.1', 254 silly addNameRange '1.2.0', 254 silly addNameRange '1.2.1', 254 silly addNameRange '1.2.2', 254 silly addNameRange '1.2.3', 254 silly addNameRange '1.2.4', 254 silly addNameRange '2.0.2', 254 silly addNameRange '2.0.3', 254 silly addNameRange '2.0.4', 254 silly addNameRange '2.0.5', 254 silly addNameRange '2.0.6', 254 silly addNameRange '2.0.7', 254 silly addNameRange '2.1.1', 254 silly addNameRange '2.1.2', 254 silly addNameRange '2.1.3', 254 silly addNameRange '2.2.0', 254 silly addNameRange '2.2.1', 254 silly addNameRange '2.2.2', 254 silly addNameRange '2.3.0', 254 silly addNameRange '2.3.1', 254 silly addNameRange '2.3.2', 254 silly addNameRange '2.3.3', 254 silly addNameRange '2.3.4', 254 silly addNameRange '2.3.5', 254 silly addNameRange '0.11.6', 254 silly addNameRange '2.3.6', 254 silly addNameRange '2.3.9', 254 silly addNameRange '2.3.10', 254 silly addNameRange '2.3.11', 254 silly addNameRange '2.4.0', 254 silly addNameRange '2.4.1', 254 silly addNameRange '2.4.2', 254 silly addNameRange '2.4.3', 254 silly addNameRange '2.5.0', 254 silly addNameRange '2.5.1', 254 silly addNameRange '2.5.2', 254 silly addNameRange '2.5.3', 254 silly addNameRange '2.6.0', 254 silly addNameRange '2.6.1', 254 silly addNameRange '2.6.2', 254 silly addNameRange '2.6.3', 254 silly addNameRange '2.6.4', 254 silly addNameRange '2.7.0', 254 silly addNameRange '2.7.1', 254 silly addNameRange '2.8.0', 254 silly addNameRange '2.8.1', 254 silly addNameRange '2.8.2', 254 silly addNameRange '2.9.0', 254 silly addNameRange '2.9.1', 254 silly addNameRange '2.9.2', 254 silly addNameRange '2.9.3', 254 silly addNameRange '2.9.4', 254 silly addNameRange '2.9.5', 254 silly addNameRange '2.9.6', 254 silly addNameRange '2.9.7', 254 silly addNameRange '2.9.8', 254 silly addNameRange '2.9.9', 254 silly addNameRange '2.9.10', 254 silly addNameRange '2.9.11', 254 silly addNameRange '2.9.12', 254 silly addNameRange '2.9.13', 254 silly addNameRange '2.9.14', 254 silly addNameRange '2.9.15', 254 silly addNameRange '2.9.16', 254 silly addNameRange '2.9.17', 254 silly addNameRange '2.9.18', 254 silly addNameRange '2.9.19', 254 silly addNameRange '2.9.20', 254 silly addNameRange '2.9.21', 254 silly addNameRange '2.9.22', 254 silly addNameRange '2.9.23', 254 silly addNameRange '2.9.24', 254 silly addNameRange '2.9.25', 254 silly addNameRange '2.9.26', 254 silly addNameRange '2.9.27', 254 silly addNameRange '2.9.28', 254 silly addNameRange '2.9.29', 254 silly addNameRange '2.9.30', 254 silly addNameRange '2.9.31', 254 silly addNameRange '2.9.32', 254 silly addNameRange '2.9.33', 254 silly addNameRange '2.9.34', 254 silly addNameRange '2.10.0', 254 silly addNameRange '2.10.1', 254 silly addNameRange '2.10.2', 254 silly addNameRange '3.0.0', 254 silly addNameRange '3.0.1', 254 silly addNameRange '3.0.2', 254 silly addNameRange '3.0.3', 254 silly addNameRange '3.0.4', 254 silly addNameRange '3.0.5', 254 silly addNameRange '3.0.6', 254 silly addNameRange '3.1.0', 254 silly addNameRange '3.1.1', 254 silly addNameRange '3.1.2', 254 silly addNameRange '3.1.3', 254 silly addNameRange '3.1.4', 254 silly addNameRange '3.1.5', 254 silly addNameRange '3.2.0', 254 silly addNameRange '3.2.1', 254 silly addNameRange '3.2.2', 254 silly addNameRange '3.3.0', 254 silly addNameRange '3.3.1', 254 silly addNameRange '3.3.2', 254 silly addNameRange '3.3.3', 254 silly addNameRange '3.3.4', 254 silly addNameRange '3.3.5' ] ] 255 verbose addNamed bluebird@3.3.5 256 silly addNamed semver.valid 3.3.5 257 silly addNamed semver.validRange 3.3.5 258 silly addNameRange number 2 { name: 'nan', range: '>=2.2.1 <3.0.0', hasData: true } 259 silly addNameRange versions [ 'nan', 259 silly addNameRange [ '0.3.0-wip', 259 silly addNameRange '0.3.0-wip2', 259 silly addNameRange '0.3.0', 259 silly addNameRange '0.3.1', 259 silly addNameRange '0.3.2', 259 silly addNameRange '0.4.0', 259 silly addNameRange '0.4.1', 259 silly addNameRange '0.4.2', 259 silly addNameRange '0.4.3', 259 silly addNameRange '0.4.4', 259 silly addNameRange '0.5.0', 259 silly addNameRange '0.5.1', 259 silly addNameRange '0.5.2', 259 silly addNameRange '0.6.0', 259 silly addNameRange '0.7.0', 259 silly addNameRange '0.7.1', 259 silly addNameRange '0.8.0', 259 silly addNameRange '1.0.0', 259 silly addNameRange '1.1.0', 259 silly addNameRange '1.1.1', 259 silly addNameRange '1.1.2', 259 silly addNameRange '1.2.0', 259 silly addNameRange '1.3.0', 259 silly addNameRange '1.4.0', 259 silly addNameRange '1.4.1', 259 silly addNameRange '1.5.0', 259 silly addNameRange '1.4.2', 259 silly addNameRange '1.4.3', 259 silly addNameRange '1.5.1', 259 silly addNameRange '1.5.2', 259 silly addNameRange '1.6.0', 259 silly addNameRange '1.5.3', 259 silly addNameRange '1.6.1', 259 silly addNameRange '1.6.2', 259 silly addNameRange '1.7.0', 259 silly addNameRange '1.8.0', 259 silly addNameRange '1.8.1', 259 silly addNameRange '1.8.2', 259 silly addNameRange '1.8.3', 259 silly addNameRange '1.8.4', 259 silly addNameRange '1.9.0', 259 silly addNameRange '2.0.0', 259 silly addNameRange '2.0.1', 259 silly addNameRange '2.0.2', 259 silly addNameRange '2.0.3', 259 silly addNameRange '2.0.4', 259 silly addNameRange '2.0.5', 259 silly addNameRange '2.0.6', 259 silly addNameRange '2.0.7', 259 silly addNameRange '2.0.8', 259 silly addNameRange '2.0.9', 259 silly addNameRange '2.1.0', 259 silly addNameRange '2.2.0', 259 silly addNameRange '2.2.1', 259 silly addNameRange '2.3.0', 259 silly addNameRange '2.3.1', 259 silly addNameRange '2.3.2' ] ] 260 verbose addNamed nan@2.3.2 261 silly addNamed semver.valid 2.3.2 262 silly addNamed semver.validRange 2.3.2 263 silly addNameRange number 2 { name: 'request', range: '>=2.71.0 <3.0.0', hasData: true } 264 silly addNameRange versions [ 'request', 264 silly addNameRange [ '0.10.0', 264 silly addNameRange '0.8.3', 264 silly addNameRange '0.9.0', 264 silly addNameRange '0.9.1', 264 silly addNameRange '0.9.5', 264 silly addNameRange '1.0.0', 264 silly addNameRange '1.1.0', 264 silly addNameRange '1.1.1', 264 silly addNameRange '1.2.0', 264 silly addNameRange '1.9.0', 264 silly addNameRange '1.9.1', 264 silly addNameRange '1.9.2', 264 silly addNameRange '1.9.3', 264 silly addNameRange '1.9.5', 264 silly addNameRange '1.9.7', 264 silly addNameRange '1.9.8', 264 silly addNameRange '1.9.9', 264 silly addNameRange '2.0.0', 264 silly addNameRange '2.0.1', 264 silly addNameRange '2.0.2', 264 silly addNameRange '2.0.3', 264 silly addNameRange '2.0.4', 264 silly addNameRange '2.0.5', 264 silly addNameRange '2.1.0', 264 silly addNameRange '2.1.1', 264 silly addNameRange '2.2.0', 264 silly addNameRange '2.2.5', 264 silly addNameRange '2.2.6', 264 silly addNameRange '2.2.9', 264 silly addNameRange '2.9.0', 264 silly addNameRange '2.9.1', 264 silly addNameRange '2.9.2', 264 silly addNameRange '2.9.3', 264 silly addNameRange '2.9.100', 264 silly addNameRange '2.9.150', 264 silly addNameRange '2.9.151', 264 silly addNameRange '2.9.152', 264 silly addNameRange '2.9.153', 264 silly addNameRange '2.9.200', 264 silly addNameRange '2.9.201', 264 silly addNameRange '2.9.202', 264 silly addNameRange '2.9.203', 264 silly addNameRange '2.10.0', 264 silly addNameRange '2.11.0', 264 silly addNameRange '2.11.1', 264 silly addNameRange '2.11.2', 264 silly addNameRange '2.11.3', 264 silly addNameRange '2.11.4', 264 silly addNameRange '2.12.0', 264 silly addNameRange '2.14.0', 264 silly addNameRange '2.16.0', 264 silly addNameRange '2.16.2', 264 silly addNameRange '2.16.4', 264 silly addNameRange '2.16.6', 264 silly addNameRange '2.18.0', 264 silly addNameRange '2.19.0', 264 silly addNameRange '2.20.0', 264 silly addNameRange '2.21.0', 264 silly addNameRange '2.22.0', 264 silly addNameRange '2.23.0', 264 silly addNameRange '2.24.0', 264 silly addNameRange '2.25.0', 264 silly addNameRange '2.26.0', 264 silly addNameRange '2.27.0', 264 silly addNameRange '2.28.0', 264 silly addNameRange '2.29.0', 264 silly addNameRange '2.30.0', 264 silly addNameRange '2.31.0', 264 silly addNameRange '2.32.0', 264 silly addNameRange '2.33.0', 264 silly addNameRange '2.34.0', 264 silly addNameRange '2.35.0', 264 silly addNameRange '2.36.0', 264 silly addNameRange '2.37.0', 264 silly addNameRange '2.38.0', 264 silly addNameRange '2.39.0', 264 silly addNameRange '2.40.0', 264 silly addNameRange '2.41.0', 264 silly addNameRange '2.42.0', 264 silly addNameRange '2.43.0', 264 silly addNameRange '2.44.0', 264 silly addNameRange '2.45.0', 264 silly addNameRange '2.46.0', 264 silly addNameRange '2.47.0', 264 silly addNameRange '2.48.0', 264 silly addNameRange '2.49.0', 264 silly addNameRange '2.50.0', 264 silly addNameRange '2.51.0', 264 silly addNameRange '2.52.0', 264 silly addNameRange '2.53.0', 264 silly addNameRange '2.54.0', 264 silly addNameRange '2.55.0', 264 silly addNameRange '2.56.0', 264 silly addNameRange '2.57.0', 264 silly addNameRange '2.58.0', 264 silly addNameRange '2.59.0', 264 silly addNameRange '2.60.0', 264 silly addNameRange '2.61.0', 264 silly addNameRange '2.62.0', 264 silly addNameRange '2.63.0', 264 silly addNameRange '2.64.0', 264 silly addNameRange '2.65.0', 264 silly addNameRange '2.66.0', 264 silly addNameRange '2.67.0', 264 silly addNameRange '2.68.0', 264 silly addNameRange '2.69.0', 264 silly addNameRange '2.70.0', 264 silly addNameRange '2.71.0', 264 silly addNameRange '2.72.0' ] ] 265 verbose addNamed request@2.72.0 266 silly addNamed semver.valid 2.72.0 267 silly addNamed semver.validRange 2.72.0 268 silly addNameRange number 2 { name: 'tar', range: '>=2.2.1 <3.0.0', hasData: true } 269 silly addNameRange versions [ 'tar', 269 silly addNameRange [ '0.0.1', 269 silly addNameRange '0.1.0', 269 silly addNameRange '0.1.2', 269 silly addNameRange '0.1.3', 269 silly addNameRange '0.1.4', 269 silly addNameRange '0.1.5', 269 silly addNameRange '0.1.6', 269 silly addNameRange '0.1.7', 269 silly addNameRange '0.1.8', 269 silly addNameRange '0.1.9', 269 silly addNameRange '0.1.10', 269 silly addNameRange '0.1.11', 269 silly addNameRange '0.1.12', 269 silly addNameRange '0.1.13', 269 silly addNameRange '0.1.14', 269 silly addNameRange '0.1.15', 269 silly addNameRange '0.1.16', 269 silly addNameRange '0.1.17', 269 silly addNameRange '0.1.18', 269 silly addNameRange '0.1.19', 269 silly addNameRange '0.1.20', 269 silly addNameRange '1.0.0', 269 silly addNameRange '1.0.1', 269 silly addNameRange '1.0.2', 269 silly addNameRange '1.0.3', 269 silly addNameRange '2.0.0', 269 silly addNameRange '2.0.1', 269 silly addNameRange '2.1.0', 269 silly addNameRange '2.1.1', 269 silly addNameRange '2.2.0', 269 silly addNameRange '2.2.1' ] ] 270 verbose addNamed tar@2.2.1 271 silly addNamed semver.valid 2.2.1 272 silly addNamed semver.validRange 2.2.1 273 silly cache afterAdd color@0.11.1 274 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color\0.11.1\package\package.json not in flight; writing 275 silly cache afterAdd nan@2.3.2 276 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\nan\2.3.2\package\package.json not in flight; writing 277 silly cache afterAdd bluebird@3.3.5 278 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\bluebird\3.3.5\package\package.json not in flight; writing 279 silly cache afterAdd semver@5.1.0 280 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\semver\5.1.0\package\package.json not in flight; writing 281 silly cache afterAdd request@2.72.0 282 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\request\2.72.0\package\package.json not in flight; writing 283 silly cache afterAdd tar@2.2.1 284 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\tar\2.2.1\package\package.json not in flight; writing 285 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color\0.11.1\package\package.json written 286 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\nan\2.3.2\package\package.json written 287 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\bluebird\3.3.5\package\package.json written 288 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\semver\5.1.0\package\package.json written 289 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\tar\2.2.1\package\package.json written 290 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\request\2.72.0\package\package.json written 291 silly install resolved [ { name: 'color', 291 silly install resolved version: '0.11.1', 291 silly install resolved description: 'Color conversion and manipulation with CSS string support', 291 silly install resolved keywords: [ 'color', 'colour', 'css' ], 291 silly install resolved authors: 291 silly install resolved [ 'Heather Arthur ', 291 silly install resolved 'Maxime Thirouin', 291 silly install resolved 'Josh Junon' ], 291 silly install resolved license: 'MIT', 291 silly install resolved repository: { type: 'git', url: 'http://github.com/MoOx/color.git' }, 291 silly install resolved xo: { rules: [Object] }, 291 silly install resolved files: [ 'CHANGELOG.md', 'LICENSE', 'index.js' ], 291 silly install resolved scripts: { pretest: 'xo', test: 'mocha' }, 291 silly install resolved dependencies: { 'color-convert': '^0.5.3', 'color-string': '^0.3.0' }, 291 silly install resolved devDependencies: { mocha: '^2.2.5', xo: '^0.12.1' }, 291 silly install resolved readme: '# color [![Build Status](https://travis-ci.org/MoOx/color.svg?branch=master)](https://travis-ci.org/MoOx/color)\n\n> JavaScript library for color conversion and manipulation with support for CSS color strings.\n\n```js\nvar color = Color("#7743CE");\n\ncolor.alpha(0.5).lighten(0.5);\n\nconsole.log(color.hslString()); // "hsla(262, 59%, 81%, 0.5)"\n```\n\n## Install\n\n```console\n$ npm install color\n```\n\n## Usage\n\n```js\nvar Color = require("color")\n```\n\n### Setters\n\n```js\nvar color = Color("rgb(255, 255, 255)")\nvar color = Color({r: 255, g: 255, b: 255})\nvar color = Color().rgb(255, 255, 255)\nvar color = Color().rgb([255, 255, 255])\n```\nPass any valid CSS color string into `Color()` or a hash of values. Also load in color values with `rgb()`, `hsl()`, `hsv()`, `hwb()`, and `cmyk()`.\n\n```js\ncolor.red(120)\n```\nSet the values for individual channels with `alpha`, `red`, `green`, `blue`, `hue`, `saturation` (hsl), `saturationv` (hsv), `lightness`, `whiteness`, `blackness`, `cyan`, `magenta`, `yellow`, `black`\n\n### Getters\n\n\n```js\ncolor.rgb() // {r: 255, g: 255, b: 255}\n```\nGet a hash of the rgb values with `rgb()`, similarly for `hsl()`, `hsv()`, and `cmyk()`\n\n```js\ncolor.rgbArray() // [255, 255, 255]\n```\nGet an array of the values with `rgbArray()`, `hslArray()`, `hsvArray()`, and `cmykArray()`.\n\n```js\ncolor.red() // 255\n```\nGet the value for an individual channel.\n\n### CSS Strings\n\n```js\ncolor.hslString() // "hsl(320, 50%, 100%)"\n```\n\nDifferent CSS String formats for the color are on `hexString`, `rgbString`, `percentString`, `hslString`, `hwbString`, and `keyword` (undefined if it\'s not a keyword color). `"rgba"` and `"hsla"` are used if the current alpha value of the color isn\'t `1`.\n\n### Luminosity\n\n```js\ncolor.luminosity(); // 0.412\n```\nThe [WCAG luminosity](http://www.w3.org/TR/WCAG20/#relativeluminancedef) of the color. 0 is black, 1 is white.\n\n```js\ncolor.contrast(Color("blue")) // 12\n```\nThe [WCAG contrast ratio](http://www.w3.org/TR/WCAG20/#contrast-ratiodef) to another color, from 1 (same color) to 21 (contrast b/w white and black).\n\n```js\ncolor.light(); // true\ncolor.dark(); // false\n```\nGet whether the color is "light" or "dark", useful for deciding text color.\n\n### Manipulation\n\n```js\ncolor.negate() // rgb(0, 100, 255) -> rgb(255, 155, 0)\n\ncolor.lighten(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 75%)\ncolor.darken(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 25%)\n\ncolor.saturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 75%, 50%)\ncolor.desaturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 25%, 50%)\ncolor.greyscale() // #5CBF54 -> #969696\n\ncolor.whiten(0.5) // hwb(100, 50%, 50%) -> hwb(100, 75%, 50%)\ncolor.blacken(0.5) // hwb(100, 50%, 50%) -> hwb(100, 50%, 75%)\n\ncolor.clearer(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 0.4)\ncolor.opaquer(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 1.0)\n\ncolor.rotate(180) // hsl(60, 20%, 20%) -> hsl(240, 20%, 20%)\ncolor.rotate(-90) // hsl(60, 20%, 20%) -> hsl(330, 20%, 20%)\n\ncolor.mix(Color("yellow")) // cyan -> rgb(128, 255, 128)\ncolor.mix(Color("yellow"), 0.3) // cyan -> rgb(77, 255, 179)\n\n// chaining\ncolor.green(100).greyscale().lighten(0.6)\n```\n\n### Clone\n\nYou can can create a copy of an existing color object using `clone()`:\n\n```js\ncolor.clone() // -> New color object\n```\n\nAnd more to come...\n\n## Propers\n\nThe API was inspired by [color-js](https://github.com/brehaut/color-js). Manipulation functions by CSS tools like Sass, LESS, and Stylus.\n', 291 silly install resolved readmeFilename: 'README.md', 291 silly install resolved bugs: { url: 'https://github.com/MoOx/color/issues' }, 291 silly install resolved homepage: 'https://github.com/MoOx/color', 291 silly install resolved _id: 'color@0.11.1', 291 silly install resolved _shasum: '19e357ce1872e191e8a91702b4ee1b0ed844187a', 291 silly install resolved _resolved: 'https://registry.npmjs.org/color/-/color-0.11.1.tgz', 291 silly install resolved _from: 'color@>=0.11.1 <0.12.0' }, 291 silly install resolved { name: 'nan', 291 silly install resolved version: '2.3.2', 291 silly install resolved description: 'Native Abstractions for Node.js: C++ header for Node 0.8 -> 6 compatibility', 291 silly install resolved main: 'include_dirs.js', 291 silly install resolved repository: { type: 'git', url: 'git://github.com/nodejs/nan.git' }, 291 silly install resolved scripts: 291 silly install resolved { test: 'tap --gc test/js/*-test.js', 291 silly install resolved 'rebuild-tests': 'node-gyp rebuild --msvs_version=2013 --directory test', 291 silly install resolved docs: 'doc/.build.sh' }, 291 silly install resolved contributors: 291 silly install resolved [ [Object], 291 silly install resolved [Object], 291 silly install resolved [Object], 291 silly install resolved [Object], 291 silly install resolved [Object], 291 silly install resolved [Object], 291 silly install resolved [Object] ], 291 silly install resolved devDependencies: 291 silly install resolved { bindings: '~1.2.1', 291 silly install resolved commander: '^2.8.1', 291 silly install resolved glob: '^5.0.14', 291 silly install resolved 'node-gyp': '~3.0.1', 291 silly install resolved tap: '~0.7.1', 291 silly install resolved xtend: '~4.0.0' }, 291 silly install resolved license: 'MIT', 291 silly install resolved readme: 'Native Abstractions for Node.js\n===============================\n\n**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10, 0.12, 1, 4, 5 and 6.**\n\n***Current version: 2.3.2***\n\n*(See [CHANGELOG.md](https://github.com/nodejs/nan/blob/master/CHANGELOG.md) for complete ChangeLog)*\n\n[![NPM](https://nodei.co/npm/nan.png?downloads=true&downloadRank=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6&height=3)](https://nodei.co/npm/nan/)\n\n[![Build Status](https://api.travis-ci.org/nodejs/nan.svg?branch=master)](http://travis-ci.org/nodejs/nan)\n[![Build status](https://ci.appveyor.com/api/projects/status/kh73pbm9dsju7fgh)](https://ci.appveyor.com/project/RodVagg/nan)\n\nThanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.12 to 4.0, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle.\n\nThis project also contains some helper utilities that make addon development a bit more pleasant.\n\n * **[News & Updates](#news)**\n * **[Usage](#usage)**\n * **[Example](#example)**\n * **[API](#api)**\n * **[Tests](#tests)**\n * **[Governance & Contributing](#governance)**\n\n\n## News & Updates\n\n\n## Usage\n\nSimply add **NAN** as a dependency in the *package.json* of your Node addon:\n\n``` bash\n$ npm install --save nan\n```\n\nPull in the path to **NAN** in your *binding.gyp* so that you can use `#include ` in your *.cpp* files:\n\n``` python\n"include_dirs" : [\n "` when compiling your addon.\n\n\n## Example\n\nJust getting started with Nan? Take a look at the **[Node Add-on Examples](https://github.com/nodejs/node-addon-examples)**.\n\nRefer to a [quick-start **Nan** Boilerplate](https://github.com/fcanas/node-native-boilerplate) for a ready-to-go project that utilizes basic Nan functionality.\n\nFor a simpler example, see the **[async pi estimation example](https://github.com/nodejs/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**.\n\nYet another example is **[nan-example-eol](https://github.com/CodeCharmLtd/nan-example-eol)**. It shows newline detection implemented as a native addon.\n\nAlso take a look at our comprehensive **[C++ test suite](https://github.com/nodejs/nan/tree/master/test/cpp)** which has a plehora of code snippets for your pasting pleasure.\n\n\n## API\n\nAdditional to the NAN documentation below, please consult:\n\n* [The V8 Getting Started Guide](https://developers.google.com/v8/get_started)\n* [The V8 Embedders Guide](https://developers.google.com/v8/embed)\n* [V8 API Documentation](http://v8docs.nodesource.com/)\n* [Node Add-on Documentation](https://nodejs.org/api/addons.html)\n\n\n\n### JavaScript-accessible methods\n\nA _template_ is a blueprint for JavaScript functions and objects in a context. You can use a template to wrap C++ functions and data structures within JavaScript objects so that they can be manipulated from JavaScript. See the V8 Embedders Guide section on [Templates](https://developers.google.com/v8/embed#templates) for further information.\n\nIn order to expose functionality to JavaScript via a template, you must provide it to V8 in a form that it understands. Across the versions of V8 supported by NAN, JavaScript-accessible method signatures vary widely, NAN fully abstracts method declaration and provides you with an interface that is similar to the most recent V8 API but is backward-compatible with older versions that still use the now-deceased `v8::Argument` type.\n\n* **Method argument types**\n - Nan::FunctionCallbackInfo\n - Nan::PropertyCallbackInfo\n - Nan::ReturnValue\n* **Method declarations**\n - Method declaration\n - Getter declaration\n - Setter declaration\n - Property getter declaration\n - Property setter declaration\n - Property enumerator declaration\n - Property deleter declaration\n - Property query declaration\n - Index getter declaration\n - Index setter declaration\n - Index enumerator declaration\n - Index deleter declaration\n - Index query declaration\n* Method and template helpers\n - Nan::SetMethod()\n - Nan::SetPrototypeMethod()\n - Nan::SetAccessor()\n - Nan::SetNamedPropertyHandler()\n - Nan::SetIndexedPropertyHandler()\n - Nan::SetTemplate()\n - Nan::SetPrototypeTemplate()\n - Nan::SetInstanceTemplate()\n - Nan::SetCallHandler()\n - Nan::SetCallAsFunctionHandler()\n\n### Scopes\n\nA _local handle_ is a pointer to an object. All V8 objects are accessed using handles, they are necessary because of the way the V8 garbage collector works.\n\nA handle scope can be thought of as a container for any number of handles. When you\'ve finished with your handles, instead of deleting each one individually you can simply delete their scope.\n\nThe creation of `HandleScope` objects is different across the supported versions of V8. Therefore, NAN provides its own implementations that can be used safely across these.\n\n - Nan::HandleScope\n - Nan::EscapableHandleScope\n\nAlso see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles).\n\n### Persistent references\n\nAn object reference that is independent of any `HandleScope` is a _persistent_ reference. Where a `Local` handle only lives as long as the `HandleScope` in which it was allocated, a `Persistent` handle remains valid until it is explicitly disposed.\n\nDue to the evolution of the V8 API, it is necessary for NAN to provide a wrapper implementation of the `Persistent` classes to supply compatibility across the V8 versions supported.\n\n - Nan::PersistentBase & v8::PersistentBase\n - Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits\n - Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits\n - Nan::Persistent\n - Nan::Global\n - Nan::WeakCallbackInfo\n - Nan::WeakCallbackType\n\nAlso see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles).\n\n### New\n\nNAN provides a `Nan::New()` helper for the creation of new JavaScript objects in a way that\'s compatible across the supported versions of V8.\n\n - Nan::New()\n - Nan::Undefined()\n - Nan::Null()\n - Nan::True()\n - Nan::False()\n - Nan::EmptyString()\n\n\n### Converters\n\nNAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don\'t have this functionality so it is provided by NAN.\n\n - Nan::To()\n\n### Maybe Types\n\nThe `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_.\n\n* **Maybe Types**\n - Nan::MaybeLocal\n - Nan::Maybe\n - Nan::Nothing\n - Nan::Just\n* **Maybe Helpers**\n - Nan::Call()\n - Nan::ToDetailString()\n - Nan::ToArrayIndex()\n - Nan::Equals()\n - Nan::NewInstance()\n - Nan::GetFunction()\n - Nan::Set()\n - Nan::ForceSet()\n - Nan::Get()\n - Nan::GetPropertyAttributes()\n - Nan::Has()\n - Nan::Delete()\n - Nan::GetPropertyNames()\n - Nan::GetOwnPropertyNames()\n - Nan::SetPrototype()\n - Nan::ObjectProtoToString()\n - Nan::HasOwnProperty()\n - Nan::HasRealNamedProperty()\n - Nan::HasRealIndexedProperty()\n - Nan::HasRealNamedCallbackProperty()\n - Nan::GetRealNamedPropertyInPrototypeChain()\n - Nan::GetRealNamedProperty()\n - Nan::CallAsFunction()\n - Nan::CallAsConstructor()\n - Nan::GetSourceLine()\n - Nan::GetLineNumber()\n - Nan::GetStartColumn()\n - Nan::GetEndColumn()\n - Nan::CloneElementAt()\n - Nan::MakeMaybe()\n\n### Script\n\nNAN provides a `v8::Script` helpers as the API has changed over the supported versions of V8.\n\n - Nan::CompileScript()\n - Nan::RunScript()\n\n\n### Errors\n\nNAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted.\n\nNote that an Error object is simply a specialized form of `v8::Value`.\n\nAlso consult the V8 Embedders Guide section on [Exceptions](https://developers.google.com/v8/embed#exceptions) for more information.\n\n - Nan::Error()\n - Nan::RangeError()\n - Nan::ReferenceError()\n - Nan::SyntaxError()\n - Nan::TypeError()\n - Nan::ThrowError()\n - Nan::ThrowRangeError()\n - Nan::ThrowReferenceError()\n - Nan::ThrowSyntaxError()\n - Nan::ThrowTypeError()\n - Nan::FatalException()\n - Nan::ErrnoException()\n - Nan::TryCatch\n\n\n### Buffers\n\nNAN\'s `node::Buffer` helpers exist as the API has changed across supported Node versions. Use these methods to ensure compatibility.\n\n - Nan::NewBuffer()\n - Nan::CopyBuffer()\n - Nan::FreeCallback()\n\n### Nan::Callback\n\n`Nan::Callback` makes it easier to use `v8::Function` handles as callbacks. A class that wraps a `v8::Function` handle, protecting it from garbage collection and making it particularly useful for storage and use across asynchronous execution.\n\n - Nan::Callback\n\n### Asynchronous work helpers\n\n`Nan::AsyncWorker` and `Nan::AsyncProgressWorker` are helper classes that make working with asynchronous code easier.\n\n - Nan::AsyncWorker\n - Nan::AsyncProgressWorker\n - Nan::AsyncQueueWorker\n\n### Strings & Bytes\n\nMiscellaneous string & byte encoding and decoding functionality provided for compatibility across supported versions of V8 and Node. Implemented by NAN to ensure that all encoding types are supported, even for older versions of Node where they are missing.\n\n - Nan::Encoding\n - Nan::Encode()\n - Nan::DecodeBytes()\n - Nan::DecodeWrite()\n\n\n### Object Wrappers\n\nThe `ObjectWrap` class can be used to make wrapped C++ objects and a factory of wrapped objects.\n\n - Nan::ObjectWrap\n\n\n### V8 internals\n\nThe hooks to access V8 internals—including GC and statistics—are different across the supported versions of V8, therefore NAN provides its own hooks that call the appropriate V8 methods.\n\n - NAN_GC_CALLBACK()\n - Nan::AddGCEpilogueCallback()\n - Nan::RemoveGCEpilogueCallback()\n - Nan::AddGCPrologueCallback()\n - Nan::RemoveGCPrologueCallback()\n - Nan::GetHeapStatistics()\n - Nan::SetCounterFunction()\n - Nan::SetCreateHistogramFunction()\n - Nan::SetAddHistogramSampleFunction()\n - Nan::IdleNotification()\n - Nan::LowMemoryNotification()\n - Nan::ContextDisposedNotification()\n - Nan::GetInternalFieldPointer()\n - Nan::SetInternalFieldPointer()\n - Nan::AdjustExternalMemory()\n\n\n### Miscellaneous V8 Helpers\n\n - Nan::Utf8String\n - Nan::GetCurrentContext()\n - Nan::SetIsolateData()\n - Nan::GetIsolateData()\n - Nan::TypedArrayContents\n\n\n### Miscellaneous Node Helpers\n\n - Nan::MakeCallback()\n - NAN_MODULE_INIT()\n - Nan::Export()\n\n\n\n\n\n### Tests\n\nTo run the NAN tests do:\n\n``` sh\nnpm install\nnpm run-script rebuild-tests\nnpm test\n```\n\nOr just:\n\n``` sh\nnpm install\nmake test\n```\n\n\n## Governance & Contributing\n\nNAN is governed by the [io.js](https://iojs.org/) Addon API Working Group\n\n### Addon API Working Group (WG)\n\nThe NAN project is jointly governed by a Working Group which is responsible for high-level guidance of the project.\n\nMembers of the WG are also known as Collaborators, there is no distinction between the two, unlike other io.js projects.\n\nThe WG has final authority over this project including:\n\n* Technical direction\n* Project governance and process (including this policy)\n* Contribution policy\n* GitHub repository hosting\n* Maintaining the list of additional Collaborators\n\nFor the current list of WG members, see the project [README.md](./README.md#collaborators).\n\nIndividuals making significant and valuable contributions are made members of the WG and given commit-access to the project. These individuals are identified by the WG and their addition to the WG is discussed via GitHub and requires unanimous consensus amongst those WG members participating in the discussion with a quorum of 50% of WG members required for acceptance of the vote.\n\n_Note:_ If you make a significant contribution and are not considered for commit-access log an issue or contact a WG member directly.\n\nFor the current list of WG members / Collaborators, see the project [README.md](./README.md#collaborators).\n\n### Consensus Seeking Process\n\nThe WG follows a [Consensus Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) decision making model.\n\nModifications of the contents of the NAN repository are made on a collaborative basis. Anybody with a GitHub account may propose a modification via pull request and it will be considered by the WG. All pull requests must be reviewed and accepted by a WG member with sufficient expertise who is able to take full responsibility for the change. In the case of pull requests proposed by an existing WG member, an additional WG member is required for sign-off. Consensus should be sought if additional WG members participate and there is disagreement around a particular modification.\n\nIf a change proposal cannot reach a consensus, a WG member can call for a vote amongst the members of the WG. Simple majority wins.\n\n\n## Developer\'s Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:\n\n* (a) The contribution was created in whole or in part by me and I\n have the right to submit it under the open source license\n indicated in the file; or\n\n* (b) The contribution is based upon previous work that, to the best\n of my knowledge, is covered under an appropriate open source\n license and I have the right under that license to submit that\n work with modifications, whether created in whole or in part\n by me, under the same open source license (unless I am\n permitted to submit under a different license), as indicated\n in the file; or\n\n* (c) The contribution was provided directly to me by some other\n person who certified (a), (b) or (c) and I have not modified\n it.\n\n* (d) I understand and agree that this project and the contribution\n are public and that a record of the contribution (including all\n personal information I submit with it, including my sign-off) is\n maintained indefinitely and may be redistributed consistent with\n this project or the open source license(s) involved.\n\n\n### WG Members / Collaborators\n\n\n\n\n\n\n\n\n\n
Rod VaggGitHub/rvaggTwitter/@rvagg
Benjamin ByholmGitHub/kkoopa-
Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
Nathan RajlichGitHub/TooTallNateTwitter/@TooTallNate
Brett LawsonGitHub/brett19Twitter/@brett19x
Ben NoordhuisGitHub/bnoordhuisTwitter/@bnoordhuis
David SiegelGitHub/agnat-
\n\n## Licence & copyright\n\nCopyright (c) 2016 NAN WG Members / Collaborators (listed above).\n\nNative Abstractions for Node.js is licensed under an MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.\n', 291 silly install resolved readmeFilename: 'README.md', 291 silly install resolved bugs: { url: 'https://github.com/nodejs/nan/issues' }, 291 silly install resolved homepage: 'https://github.com/nodejs/nan', 291 silly install resolved _id: 'nan@2.3.2', 291 silly install resolved _shasum: '4d4ecf17e1da4e989efb4f273d8d00201cad087e', 291 silly install resolved _resolved: 'https://registry.npmjs.org/nan/-/nan-2.3.2.tgz', 291 silly install resolved _from: 'nan@>=2.2.1 <3.0.0' }, 291 silly install resolved { name: 'bluebird', 291 silly install resolved description: 'Full featured Promises/A+ implementation with exceptionally good performance', 291 silly install resolved version: '3.3.5', 291 silly install resolved keywords: 291 silly install resolved [ 'promise', 291 silly install resolved 'performance', 291 silly install resolved 'promises', 291 silly install resolved 'promises-a', 291 silly install resolved 'promises-aplus', 291 silly install resolved 'async', 291 silly install resolved 'await', 291 silly install resolved 'deferred', 291 silly install resolved 'deferreds', 291 silly install resolved 'future', 291 silly install resolved 'flow control', 291 silly install resolved 'dsl', 291 silly install resolved 'fluent interface' ], 291 silly install resolved scripts: 291 silly install resolved { lint: 'node scripts/jshint.js', 291 silly install resolved test: 'node tools/test.js', 291 silly install resolved istanbul: 'istanbul', 291 silly install resolved prepublish: 'npm run generate-browser-core && npm run generate-browser-full', 291 silly install resolved 'generate-browser-full': 'node tools/build.js --no-clean --no-debug --release --browser --minify', 291 silly install resolved 'generate-browser-core': 'node tools/build.js --features=core --no-debug --release --zalgo --browser --minify && mv js/browser/bluebird.js js/browser/bluebird.core.js && mv js/browser/bluebird.min.js js/browser/bluebird.core.min.js' }, 291 silly install resolved homepage: 'https://github.com/petkaantonov/bluebird', 291 silly install resolved repository: 291 silly install resolved { type: 'git', 291 silly install resolved url: 'git://github.com/petkaantonov/bluebird.git' }, 291 silly install resolved bugs: { url: 'http://github.com/petkaantonov/bluebird/issues' }, 291 silly install resolved license: 'MIT', 291 silly install resolved author: 291 silly install resolved { name: 'Petka Antonov', 291 silly install resolved email: 'petka_antonov@hotmail.com', 291 silly install resolved url: 'http://github.com/petkaantonov/' }, 291 silly install resolved devDependencies: 291 silly install resolved { acorn: '~0.6.0', 291 silly install resolved baconjs: '^0.7.43', 291 silly install resolved bluebird: '^2.9.2', 291 silly install resolved 'body-parser': '^1.10.2', 291 silly install resolved browserify: '^8.1.1', 291 silly install resolved 'cli-table': '~0.3.1', 291 silly install resolved co: '^4.2.0', 291 silly install resolved 'cross-spawn': '^0.2.3', 291 silly install resolved glob: '^4.3.2', 291 silly install resolved 'grunt-saucelabs': '~8.4.1', 291 silly install resolved highland: '^2.3.0', 291 silly install resolved istanbul: '^0.3.5', 291 silly install resolved jshint: '^2.6.0', 291 silly install resolved 'jshint-stylish': '~0.2.0', 291 silly install resolved mkdirp: '~0.5.0', 291 silly install resolved mocha: '~2.1', 291 silly install resolved open: '~0.0.5', 291 silly install resolved optimist: '~0.6.1', 291 silly install resolved rimraf: '~2.2.6', 291 silly install resolved rx: '^2.3.25', 291 silly install resolved 'serve-static': '^1.7.1', 291 silly install resolved sinon: '~1.7.3', 291 silly install resolved 'uglify-js': '~2.4.16', 291 silly install resolved kefir: '^2.4.1' }, 291 silly install resolved readmeFilename: 'README.md', 291 silly install resolved main: './js/release/bluebird.js', 291 silly install resolved browser: './js/browser/bluebird.js', 291 silly install resolved files: [ 'js/browser', 'js/release', 'LICENSE' ], 291 silly install resolved readme: '\n Promises/A+ logo\n\n[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird)\n[![coverage-98%](http://img.shields.io/badge/coverage-98%-brightgreen.svg?style=flat)](http://petkaantonov.github.io/bluebird/coverage/debug/index.html)\n\n**Got a question?** Join us on [stackoverflow](http://stackoverflow.com/questions/tagged/bluebird), the [mailing list](https://groups.google.com/forum/#!forum/bluebird-js) or chat on [IRC](https://webchat.freenode.net/?channels=#promises)\n\n# Introduction\n\nBluebird is a fully featured promise library with focus on innovative features and performance\n\nSee the [**bluebird website**](http://bluebirdjs.com/docs/getting-started.html) for further documentation, references and instructions. See the [**API reference**](http://bluebirdjs.com/docs/api-reference.html) here.\n\nFor bluebird 2.x documentation and files, see the [2.x tree](https://github.com/petkaantonov/bluebird/tree/2.x).\n\n# Questions and issues\n\nThe [github issue tracker](https://github.com/petkaantonov/bluebird/issues) is **_only_** for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`.\n\n\n\n## Thanks\n\nThanks to BrowserStack for providing us with a free account which lets us support old browsers like IE8. \n\n# License\n\nThe MIT License (MIT)\n\nCopyright (c) 2013-2016 Petka Antonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n', 291 silly install resolved _id: 'bluebird@3.3.5', 291 silly install resolved _shasum: '5ee747f1c7bd967658b683936430aee753955a34', 291 silly install resolved _resolved: 'https://registry.npmjs.org/bluebird/-/bluebird-3.3.5.tgz', 291 silly install resolved _from: 'bluebird@>=3.3.5 <4.0.0' }, 291 silly install resolved { name: 'semver', 291 silly install resolved version: '5.1.0', 291 silly install resolved description: 'The semantic version parser used by npm.', 291 silly install resolved main: 'semver.js', 291 silly install resolved scripts: { test: 'tap test/*.js' }, 291 silly install resolved devDependencies: { tap: '^2.0.0' }, 291 silly install resolved license: 'ISC', 291 silly install resolved repository: { type: 'git', url: 'https://github.com/npm/node-semver' }, 291 silly install resolved bin: { semver: './bin/semver' }, 291 silly install resolved readme: 'semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid(\'1.2.3\') // \'1.2.3\'\n semver.valid(\'a.b.c\') // null\n semver.clean(\' =v1.2.3 \') // \'1.2.3\'\n semver.satisfies(\'1.2.3\', \'1.x || >=2.5.0 || 5.0.0 - 7.2.3\') // true\n semver.gt(\'1.2.3\', \'9.8.7\') // false\n semver.lt(\'1.2.3\', \'9.8.7\') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver [ [...]] [-r | -i | --preid | -l | -rv]\n Test if version(s) satisfy the supplied range(s), and sort them.\n\n Multiple versions or ranges may be supplied, unless increment\n option is specified. In that case, only a single version may\n be used, and it is incremented by the specified level\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA "version" is described by the `v2.0.0` specification found at\n.\n\nA leading `"="` or `"v"` character is stripped off and ignored.\n\n## Ranges\n\nA `version range` is a set of `comparators` which specify versions\nthat satisfy the range.\n\nA `comparator` is composed of an `operator` and a `version`. The set\nof primitive `operators` is:\n\n* `<` Less than\n* `<=` Less than or equal to\n* `>` Greater than\n* `>=` Greater than or equal to\n* `=` Equal. If no operator is specified, then equality is assumed,\n so this operator is optional, but MAY be included.\n\nFor example, the comparator `>=1.2.7` would match the versions\n`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`\nor `1.1.0`.\n\nComparators can be joined by whitespace to form a `comparator set`,\nwhich is satisfied by the **intersection** of all of the comparators\nit includes.\n\nA range is composed of one or more comparator sets, joined by `||`. A\nversion matches a range if and only if every comparator in at least\none of the `||`-separated comparator sets is satisfied by the version.\n\nFor example, the range `>=1.2.7 <1.3.0` would match the versions\n`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,\nor `1.1.0`.\n\nThe range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,\n`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.\n\n### Prerelease Tags\n\nIf a version has a prerelease tag (for example, `1.2.3-alpha.3`) then\nit will only be allowed to satisfy comparator sets if at least one\ncomparator with the same `[major, minor, patch]` tuple also has a\nprerelease tag.\n\nFor example, the range `>1.2.3-alpha.3` would be allowed to match the\nversion `1.2.3-alpha.7`, but it would *not* be satisfied by\n`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater\nthan" `1.2.3-alpha.3` according to the SemVer sort rules. The version\nrange only accepts prerelease tags on the `1.2.3` version. The\nversion `3.4.5` *would* satisfy the range, because it does not have a\nprerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.\n\nThe purpose for this behavior is twofold. First, prerelease versions\nfrequently are updated very quickly, and contain many breaking changes\nthat are (by the author\'s design) not yet fit for public consumption.\nTherefore, by default, they are excluded from range matching\nsemantics.\n\nSecond, a user who has opted into using a prerelease version has\nclearly indicated the intent to use *that specific* set of\nalpha/beta/rc versions. By including a prerelease tag in the range,\nthe user is indicating that they are aware of the risk. However, it\nis still not appropriate to assume that they have opted into taking a\nsimilar risk on the *next* set of prerelease versions.\n\n#### Prerelease Identifiers\n\nThe method `.inc` takes an additional `identifier` string argument that\nwill append the value of the string as a prerelease identifier:\n\n```javascript\n> semver.inc(\'1.2.3\', \'prerelease\', \'beta\')\n\'1.2.4-beta.0\'\n```\n\ncommand-line example:\n\n```shell\n$ semver 1.2.3 -i prerelease --preid beta\n1.2.4-beta.0\n```\n\nWhich then can be used to increment further:\n\n```shell\n$ semver 1.2.4-beta.0 -i prerelease\n1.2.4-beta.1\n```\n\n### Advanced Range Syntax\n\nAdvanced range syntax desugars to primitive comparators in\ndeterministic ways.\n\nAdvanced ranges may be combined in the same way as primitive\ncomparators using white space or `||`.\n\n#### Hyphen Ranges `X.Y.Z - A.B.C`\n\nSpecifies an inclusive set.\n\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n\nIf a partial version is provided as the first version in the inclusive\nrange, then the missing pieces are replaced with zeroes.\n\n* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`\n\nIf a partial version is provided as the second version in the\ninclusive range, then all versions that start with the supplied parts\nof the tuple are accepted, but nothing that would be greater than the\nprovided tuple parts.\n\n* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`\n* `1.2.3 - 2` := `>=1.2.3 <3.0.0`\n\n#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`\n\nAny of `X`, `x`, or `*` may be used to "stand in" for one of the\nnumeric values in the `[major, minor, patch]` tuple.\n\n* `*` := `>=0.0.0` (Any version satisfies)\n* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)\n* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)\n\nA partial version range is treated as an X-Range, so the special\ncharacter is in fact optional.\n\n* `""` (empty string) := `*` := `>=0.0.0`\n* `1` := `1.x.x` := `>=1.0.0 <2.0.0`\n* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`\n\n#### Tilde Ranges `~1.2.3` `~1.2` `~1`\n\nAllows patch-level changes if a minor version is specified on the\ncomparator. Allows minor-level changes if not.\n\n* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)\n* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)\n* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`\n* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)\n* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)\n* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in\n the `1.2.3` version will be allowed, if they are greater than or\n equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but\n `1.2.4-beta.2` would not, because it is a prerelease of a\n different `[major, minor, patch]` tuple.\n\n#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`\n\nAllows changes that do not modify the left-most non-zero digit in the\n`[major, minor, patch]` tuple. In other words, this allows patch and\nminor updates for versions `1.0.0` and above, patch updates for\nversions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.\n\nMany authors treat a `0.x` version as if the `x` were the major\n"breaking-change" indicator.\n\nCaret ranges are ideal when an author may make breaking changes\nbetween `0.2.4` and `0.3.0` releases, which is a common practice.\nHowever, it presumes that there will *not* be breaking changes between\n`0.2.4` and `0.2.5`. It allows for changes that are presumed to be\nadditive (but non-breaking), according to commonly observed practices.\n\n* `^1.2.3` := `>=1.2.3 <2.0.0`\n* `^0.2.3` := `>=0.2.3 <0.3.0`\n* `^0.0.3` := `>=0.0.3 <0.0.4`\n* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in\n the `1.2.3` version will be allowed, if they are greater than or\n equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but\n `1.2.4-beta.2` would not, because it is a prerelease of a\n different `[major, minor, patch]` tuple.\n* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the\n `0.0.3` version *only* will be allowed, if they are greater than or\n equal to `beta`. So, `0.0.3-pr.2` would be allowed.\n\nWhen parsing caret ranges, a missing `patch` value desugars to the\nnumber `0`, but will allow flexibility within that value, even if the\nmajor and minor versions are both `0`.\n\n* `^1.2.x` := `>=1.2.0 <2.0.0`\n* `^0.0.x` := `>=0.0.0 <0.1.0`\n* `^0.0` := `>=0.0.0 <0.1.0`\n\nA missing `minor` and `patch` values will desugar to zero, but also\nallow flexibility within those values, even if the major version is\nzero.\n\n* `^1.x` := `>=1.0.0 <2.0.0`\n* `^0.x` := `>=0.0.0 <1.0.0`\n\n### Range Grammar\n\nPutting all this together, here is a Backus-Naur grammar for ranges,\nfor the benefit of parser authors:\n\n```bnf\nrange-set ::= range ( logical-or range ) *\nlogical-or ::= ( \' \' ) * \'||\' ( \' \' ) *\nrange ::= hyphen | simple ( \' \' simple ) * | \'\'\nhyphen ::= partial \' - \' partial\nsimple ::= primitive | partial | tilde | caret\nprimitive ::= ( \'<\' | \'>\' | \'>=\' | \'<=\' | \'=\' | ) partial\npartial ::= xr ( \'.\' xr ( \'.\' xr qualifier ? )? )?\nxr ::= \'x\' | \'X\' | \'*\' | nr\nnr ::= \'0\' | [\'1\'-\'9\'][\'0\'-\'9\']+\ntilde ::= \'~\' partial\ncaret ::= \'^\' partial\nqualifier ::= ( \'-\' pre )? ( \'+\' build )?\npre ::= parts\nbuild ::= parts\nparts ::= part ( \'.\' part ) *\npart ::= nr | [-0-9A-Za-z]+\n```\n\n## Functions\n\nAll methods and classes take a final `loose` boolean argument that, if\ntrue, will be more forgiving about not-quite-valid semver strings.\nThe resulting output will always be 100% strict, of course.\n\nStrict-mode Comparators and Ranges will be strict about the SemVer\nstrings that they parse.\n\n* `valid(v)`: Return the parsed version, or null if it\'s not valid.\n* `inc(v, release)`: Return the version incremented by the release\n type (`major`, `premajor`, `minor`, `preminor`, `patch`,\n `prepatch`, or `prerelease`), or null if it\'s not valid\n * `premajor` in one call will bump the version up to the next major\n version and down to a prerelease of that major version.\n `preminor`, and `prepatch` work the same way.\n * If called from a non-prerelease version, the `prerelease` will work the\n same as `prepatch`. It increments the patch version, then makes a\n prerelease. If the input version is already a prerelease it simply\n increments it.\n* `major(v)`: Return the major version number.\n* `minor(v)`: Return the minor version number.\n* `patch(v)`: Return the patch version number.\n\n### Comparison\n\n* `gt(v1, v2)`: `v1 > v2`\n* `gte(v1, v2)`: `v1 >= v2`\n* `lt(v1, v2)`: `v1 < v2`\n* `lte(v1, v2)`: `v1 <= v2`\n* `eq(v1, v2)`: `v1 == v2` This is true if they\'re logically equivalent,\n even if they\'re not the exact same string. You already know how to\n compare strings.\n* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.\n* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it\'ll call\n the corresponding function above. `"==="` and `"!=="` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if\n `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.\n* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions\n in descending order when passed to `Array.sort()`.\n* `diff(v1, v2)`: Returns difference between two versions by the release type\n (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),\n or null if the versions are the same.\n\n\n### Ranges\n\n* `validRange(range)`: Return the valid range or null if it\'s not valid\n* `satisfies(version, range)`: Return true if the version satisfies the\n range.\n* `maxSatisfying(versions, range)`: Return the highest version in the list\n that satisfies the range, or `null` if none of them do.\n* `gtr(version, range)`: Return `true` if version is greater than all the\n versions possible in the range.\n* `ltr(version, range)`: Return `true` if version is less than all the\n versions possible in the range.\n* `outside(version, range, hilo)`: Return true if the version is outside\n the bounds of the range in either the high or low direction. The\n `hilo` argument must be either the string `\'>\'` or `\'<\'`. (This is\n the function called by `gtr` and `ltr`.)\n\nNote that, since ranges may be non-contiguous, a version might not be\ngreater than a range, less than a range, *or* satisfy a range! For\nexample, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`\nuntil `2.0.0`, so the version `1.2.10` would not be greater than the\nrange (because `2.0.1` satisfies, which is higher), nor less than the\nrange (since `1.2.8` satisfies, which is lower), and it also does not\nsatisfy the range.\n\nIf you want to know if a version satisfies or does not satisfy a\nrange, use the `satisfies(version, range)` function.\n', 291 silly install resolved readmeFilename: 'README.md', 291 silly install resolved bugs: { url: 'https://github.com/npm/node-semver/issues' }, 291 silly install resolved homepage: 'https://github.com/npm/node-semver', 291 silly install resolved _id: 'semver@5.1.0', 291 silly install resolved _shasum: '85f2cf8550465c4df000cf7d86f6b054106ab9e5', 291 silly install resolved _resolved: 'https://registry.npmjs.org/semver/-/semver-5.1.0.tgz', 291 silly install resolved _from: 'semver@>=5.1.0 <6.0.0' }, 291 silly install resolved { author: 291 silly install resolved { name: 'Isaac Z. Schlueter', 291 silly install resolved email: 'i@izs.me', 291 silly install resolved url: 'http://blog.izs.me/' }, 291 silly install resolved name: 'tar', 291 silly install resolved description: 'tar for node', 291 silly install resolved version: '2.2.1', 291 silly install resolved repository: { type: 'git', url: 'git://github.com/isaacs/node-tar.git' }, 291 silly install resolved main: 'tar.js', 291 silly install resolved scripts: { test: 'tap test/*.js' }, 291 silly install resolved dependencies: { 'block-stream': '*', fstream: '^1.0.2', inherits: '2' }, 291 silly install resolved devDependencies: 291 silly install resolved { 'graceful-fs': '^4.1.2', 291 silly install resolved rimraf: '1.x', 291 silly install resolved tap: '0.x', 291 silly install resolved mkdirp: '^0.5.0' }, 291 silly install resolved license: 'ISC', 291 silly install resolved readme: '# node-tar\n\nTar for Node.js.\n\n[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/)\n\n## API\n\nSee `examples/` for usage examples.\n\n### var tar = require(\'tar\')\n\nReturns an object with `.Pack`, `.Extract` and `.Parse` methods.\n\n### tar.Pack([properties])\n\nReturns a through stream. Use\n[fstream](https://npmjs.org/package/fstream) to write files into the\npack stream and you will receive tar archive data from the pack\nstream.\n\nThis only works with directories, it does not work with individual files.\n\nThe optional `properties` object are used to set properties in the tar\n\'Global Extended Header\'. If the `fromBase` property is set to true,\nthe tar will contain files relative to the path passed, and not with\nthe path included.\n\n### tar.Extract([options])\n\nReturns a through stream. Write tar data to the stream and the files\nin the tarball will be extracted onto the filesystem.\n\n`options` can be:\n\n```js\n{\n path: \'/path/to/extract/tar/into\',\n strip: 0, // how many path segments to strip from the root when extracting\n}\n```\n\n`options` also get passed to the `fstream.Writer` instance that `tar`\nuses internally.\n\n### tar.Parse()\n\nReturns a writable stream. Write tar data to it and it will emit\n`entry` events for each entry parsed from the tarball. This is used by\n`tar.Extract`.\n', 291 silly install resolved readmeFilename: 'README.md', 291 silly install resolved bugs: { url: 'https://github.com/isaacs/node-tar/issues' }, 291 silly install resolved homepage: 'https://github.com/isaacs/node-tar', 291 silly install resolved _id: 'tar@2.2.1', 291 silly install resolved _shasum: '8e4d2a256c0e2185c6b18ad694aec968b83cb1d1', 291 silly install resolved _resolved: 'https://registry.npmjs.org/tar/-/tar-2.2.1.tgz', 291 silly install resolved _from: 'tar@>=2.2.1 <3.0.0' }, 291 silly install resolved { name: 'request', 291 silly install resolved description: 'Simplified HTTP request client.', 291 silly install resolved tags: [ 'http', 'simple', 'util', 'utility' ], 291 silly install resolved version: '2.72.0', 291 silly install resolved author: { name: 'Mikeal Rogers', email: 'mikeal.rogers@gmail.com' }, 291 silly install resolved repository: { type: 'git', url: 'https://github.com/request/request.git' }, 291 silly install resolved bugs: { url: 'http://github.com/request/request/issues' }, 291 silly install resolved license: 'Apache-2.0', 291 silly install resolved engines: { node: '>=0.8.0' }, 291 silly install resolved main: 'index.js', 291 silly install resolved dependencies: 291 silly install resolved { 'aws-sign2': '~0.6.0', 291 silly install resolved aws4: '^1.2.1', 291 silly install resolved bl: '~1.1.2', 291 silly install resolved caseless: '~0.11.0', 291 silly install resolved 'combined-stream': '~1.0.5', 291 silly install resolved extend: '~3.0.0', 291 silly install resolved 'forever-agent': '~0.6.1', 291 silly install resolved 'form-data': '~1.0.0-rc3', 291 silly install resolved 'har-validator': '~2.0.6', 291 silly install resolved hawk: '~3.1.3', 291 silly install resolved 'http-signature': '~1.1.0', 291 silly install resolved 'is-typedarray': '~1.0.0', 291 silly install resolved isstream: '~0.1.2', 291 silly install resolved 'json-stringify-safe': '~5.0.1', 291 silly install resolved 'mime-types': '~2.1.7', 291 silly install resolved 'node-uuid': '~1.4.7', 291 silly install resolved 'oauth-sign': '~0.8.1', 291 silly install resolved qs: '~6.1.0', 291 silly install resolved stringstream: '~0.0.4', 291 silly install resolved 'tough-cookie': '~2.2.0', 291 silly install resolved 'tunnel-agent': '~0.4.1' }, 291 silly install resolved scripts: 291 silly install resolved { test: 'npm run lint && npm run test-ci && npm run test-browser', 291 silly install resolved 'test-ci': 'taper tests/test-*.js', 291 silly install resolved 'test-cov': 'istanbul cover tape tests/test-*.js', 291 silly install resolved 'test-browser': 'node tests/browser/start.js', 291 silly install resolved lint: 'eslint lib/ *.js tests/ && echo Lint passed.' }, 291 silly install resolved devDependencies: 291 silly install resolved { bluebird: '^3.2.1', 291 silly install resolved browserify: '^12.0.2', 291 silly install resolved 'browserify-istanbul': '^2.0.0', 291 silly install resolved 'buffer-equal': '^1.0.0', 291 silly install resolved 'codecov.io': '^0.1.6', 291 silly install resolved coveralls: '^2.11.4', 291 silly install resolved eslint: '^2.5.3', 291 silly install resolved 'function-bind': '^1.0.2', 291 silly install resolved istanbul: '^0.4.0', 291 silly install resolved karma: '^0.13.10', 291 silly install resolved 'karma-browserify': '^5.0.1', 291 silly install resolved 'karma-cli': '^0.1.1', 291 silly install resolved 'karma-coverage': '^0.5.3', 291 silly install resolved 'karma-phantomjs-launcher': '^1.0.0', 291 silly install resolved 'karma-tap': '^1.0.3', 291 silly install resolved 'phantomjs-prebuilt': '^2.1.3', 291 silly install resolved rimraf: '^2.2.8', 291 silly install resolved 'server-destroy': '^1.0.1', 291 silly install resolved tape: '^4.2.0', 291 silly install resolved taper: '^0.4.0' }, 291 silly install resolved readme: '\n# Request - Simplified HTTP client\n\n[![npm package](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/)\n\n[![Build status](https://img.shields.io/travis/request/request/master.svg?style=flat-square)](https://travis-ci.org/request/request)\n[![Coverage](https://img.shields.io/codecov/c/github/request/request.svg?style=flat-square)](https://codecov.io/github/request/request?branch=master)\n[![Coverage](https://img.shields.io/coveralls/request/request.svg?style=flat-square)](https://coveralls.io/r/request/request)\n[![Dependency Status](https://img.shields.io/david/request/request.svg?style=flat-square)](https://david-dm.org/request/request)\n[![Known Vulnerabilities](https://snyk.io/test/npm/request/badge.svg?style=flat-square)](https://snyk.io/test/npm/request)\n[![Gitter](https://img.shields.io/badge/gitter-join_chat-blue.svg?style=flat-square)](https://gitter.im/request/request?utm_source=badge)\n\n\n## Super simple to use\n\nRequest is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default.\n\n```js\nvar request = require(\'request\');\nrequest(\'http://www.google.com\', function (error, response, body) {\n if (!error && response.statusCode == 200) {\n console.log(body) // Show the HTML for the Google homepage.\n }\n})\n```\n\n\n## Table of contents\n\n- [Streaming](#streaming)\n- [Forms](#forms)\n- [HTTP Authentication](#http-authentication)\n- [Custom HTTP Headers](#custom-http-headers)\n- [OAuth Signing](#oauth-signing)\n- [Proxies](#proxies)\n- [Unix Domain Sockets](#unix-domain-sockets)\n- [TLS/SSL Protocol](#tlsssl-protocol)\n- [Support for HAR 1.2](#support-for-har-12)\n- [**All Available Options**](#requestoptions-callback)\n\nRequest also offers [convenience methods](#convenience-methods) like\n`request.defaults` and `request.post`, and there are\nlots of [usage examples](#examples) and several\n[debugging techniques](#debugging).\n\n\n---\n\n\n## Streaming\n\nYou can stream any response to a file stream.\n\n```js\nrequest(\'http://google.com/doodle.png\').pipe(fs.createWriteStream(\'doodle.png\'))\n```\n\nYou can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one).\n\n```js\nfs.createReadStream(\'file.json\').pipe(request.put(\'http://mysite.com/obj.json\'))\n```\n\nRequest can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers.\n\n```js\nrequest.get(\'http://google.com/img.png\').pipe(request.put(\'http://mysite.com/img.png\'))\n```\n\nRequest emits a "response" event when a response is received. The `response` argument will be an instance of [http.IncomingMessage](http://nodejs.org/api/http.html#http_http_incomingmessage).\n\n```js\nrequest\n .get(\'http://google.com/img.png\')\n .on(\'response\', function(response) {\n console.log(response.statusCode) // 200\n console.log(response.headers[\'content-type\']) // \'image/png\'\n })\n .pipe(request.put(\'http://mysite.com/img.png\'))\n```\n\nTo easily handle errors when streaming requests, listen to the `error` event before piping:\n\n```js\nrequest\n .get(\'http://mysite.com/doodle.png\')\n .on(\'error\', function(err) {\n console.log(err)\n })\n .pipe(fs.createWriteStream(\'doodle.png\'))\n```\n\nNow let’s get fancy.\n\n```js\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n if (req.method === \'PUT\') {\n req.pipe(request.put(\'http://mysite.com/doodle.png\'))\n } else if (req.method === \'GET\' || req.method === \'HEAD\') {\n request.get(\'http://mysite.com/doodle.png\').pipe(resp)\n }\n }\n})\n```\n\nYou can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don\'t really care about security, you can do:\n\n```js\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n var x = request(\'http://mysite.com/doodle.png\')\n req.pipe(x)\n x.pipe(resp)\n }\n})\n```\n\nAnd since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :)\n\n```js\nreq.pipe(request(\'http://mysite.com/doodle.png\')).pipe(resp)\n```\n\nAlso, none of this new functionality conflicts with requests previous features, it just expands them.\n\n```js\nvar r = request.defaults({\'proxy\':\'http://localproxy.com\'})\n\nhttp.createServer(function (req, resp) {\n if (req.url === \'/doodle.png\') {\n r.get(\'http://google.com/doodle.png\').pipe(resp)\n }\n})\n```\n\nYou can still use intermediate proxies, the requests will still follow HTTP forwards, etc.\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## Forms\n\n`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API.\n\n\n#### application/x-www-form-urlencoded (URL-Encoded Forms)\n\nURL-encoded forms are simple.\n\n```js\nrequest.post(\'http://service.com/upload\', {form:{key:\'value\'}})\n// or\nrequest.post(\'http://service.com/upload\').form({key:\'value\'})\n// or\nrequest.post({url:\'http://service.com/upload\', form: {key:\'value\'}}, function(err,httpResponse,body){ /* ... */ })\n```\n\n\n#### multipart/form-data (Multipart Form Uploads)\n\nFor `multipart/form-data` we use the [form-data](https://github.com/form-data/form-data) library by [@felixge](https://github.com/felixge). For the most cases, you can pass your upload form data via the `formData` option.\n\n\n```js\nvar formData = {\n // Pass a simple key-value pair\n my_field: \'my_value\',\n // Pass data via Buffers\n my_buffer: new Buffer([1, 2, 3]),\n // Pass data via Streams\n my_file: fs.createReadStream(__dirname + \'/unicycle.jpg\'),\n // Pass multiple values /w an Array\n attachments: [\n fs.createReadStream(__dirname + \'/attachment1.jpg\'),\n fs.createReadStream(__dirname + \'/attachment2.jpg\')\n ],\n // Pass optional meta-data with an \'options\' object with style: {value: DATA, options: OPTIONS}\n // Use case: for some types of streams, you\'ll need to provide "file"-related information manually.\n // See the `form-data` README for more information about options: https://github.com/form-data/form-data\n custom_file: {\n value: fs.createReadStream(\'/dev/urandom\'),\n options: {\n filename: \'topsecret.jpg\',\n contentType: \'image/jpg\'\n }\n }\n};\nrequest.post({url:\'http://service.com/upload\', formData: formData}, function optionalCallback(err, httpResponse, body) {\n if (err) {\n return console.error(\'upload failed:\', err);\n }\n console.log(\'Upload successful! Server responded with:\', body);\n});\n```\n\nFor advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.)\n\n```js\n// NOTE: Advanced use-case, for normal use see \'formData\' usage above\nvar r = request.post(\'http://service.com/upload\', function optionalCallback(err, httpResponse, body) {...})\nvar form = r.form();\nform.append(\'my_field\', \'my_value\');\nform.append(\'my_buffer\', new Buffer([1, 2, 3]));\nform.append(\'custom_file\', fs.createReadStream(__dirname + \'/unicycle.jpg\'), {filename: \'unicycle.jpg\'});\n```\nSee the [form-data README](https://github.com/form-data/form-data) for more information & examples.\n\n\n#### multipart/related\n\nSome variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options.\n\n```js\n request({\n method: \'PUT\',\n preambleCRLF: true,\n postambleCRLF: true,\n uri: \'http://service.com/upload\',\n multipart: [\n {\n \'content-type\': \'application/json\',\n body: JSON.stringify({foo: \'bar\', _attachments: {\'message.txt\': {follows: true, length: 18, \'content_type\': \'text/plain\' }}})\n },\n { body: \'I am an attachment\' },\n { body: fs.createReadStream(\'image.png\') }\n ],\n // alternatively pass an object containing additional options\n multipart: {\n chunked: false,\n data: [\n {\n \'content-type\': \'application/json\',\n body: JSON.stringify({foo: \'bar\', _attachments: {\'message.txt\': {follows: true, length: 18, \'content_type\': \'text/plain\' }}})\n },\n { body: \'I am an attachment\' }\n ]\n }\n },\n function (error, response, body) {\n if (error) {\n return console.error(\'upload failed:\', error);\n }\n console.log(\'Upload successful! Server responded with:\', body);\n })\n```\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## HTTP Authentication\n\n```js\nrequest.get(\'http://some.server.com/\').auth(\'username\', \'password\', false);\n// or\nrequest.get(\'http://some.server.com/\', {\n \'auth\': {\n \'user\': \'username\',\n \'pass\': \'password\',\n \'sendImmediately\': false\n }\n});\n// or\nrequest.get(\'http://some.server.com/\').auth(null, null, true, \'bearerToken\');\n// or\nrequest.get(\'http://some.server.com/\', {\n \'auth\': {\n \'bearer\': \'bearerToken\'\n }\n});\n```\n\nIf passed as an option, `auth` should be a hash containing values:\n\n- `user` || `username`\n- `pass` || `password`\n- `sendImmediately` (optional)\n- `bearer` (optional)\n\nThe method form takes parameters\n`auth(username, password, sendImmediately, bearer)`.\n\n`sendImmediately` defaults to `true`, which causes a basic or bearer\nauthentication header to be sent. If `sendImmediately` is `false`, then\n`request` will retry with a proper authentication header after receiving a\n`401` response from the server (which must contain a `WWW-Authenticate` header\nindicating the required authentication method).\n\nNote that you can also specify basic authentication using the URL itself, as\ndetailed in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt). Simply pass the\n`user:password` before the host with an `@` sign:\n\n```js\nvar username = \'username\',\n password = \'password\',\n url = \'http://\' + username + \':\' + password + \'@some.server.com\';\n\nrequest({url: url}, function (error, response, body) {\n // Do more stuff with \'body\' here\n});\n```\n\nDigest authentication is supported, but it only works with `sendImmediately`\nset to `false`; otherwise `request` will send basic authentication on the\ninitial request, which will probably cause the request to fail.\n\nBearer authentication is supported, and is activated when the `bearer` value is\navailable. The value may be either a `String` or a `Function` returning a\n`String`. Using a function to supply the bearer token is particularly useful if\nused in conjunction with `defaults` to allow a single function to supply the\nlast known token at the time of sending a request, or to compute one on the fly.\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## Custom HTTP Headers\n\nHTTP Headers, such as `User-Agent`, can be set in the `options` object.\nIn the example below, we call the github API to find out the number\nof stars and forks for the request repository. This requires a\ncustom `User-Agent` header as well as https.\n\n```js\nvar request = require(\'request\');\n\nvar options = {\n url: \'https://api.github.com/repos/request/request\',\n headers: {\n \'User-Agent\': \'request\'\n }\n};\n\nfunction callback(error, response, body) {\n if (!error && response.statusCode == 200) {\n var info = JSON.parse(body);\n console.log(info.stargazers_count + " Stars");\n console.log(info.forks_count + " Forks");\n }\n}\n\nrequest(options, callback);\n```\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## OAuth Signing\n\n[OAuth version 1.0](https://tools.ietf.org/html/rfc5849) is supported. The\ndefault signing algorithm is\n[HMAC-SHA1](https://tools.ietf.org/html/rfc5849#section-3.4.2):\n\n```js\n// OAuth1.0 - 3-legged server side flow (Twitter example)\n// step 1\nvar qs = require(\'querystring\')\n , oauth =\n { callback: \'http://mysite.com/callback/\'\n , consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n }\n , url = \'https://api.twitter.com/oauth/request_token\'\n ;\nrequest.post({url:url, oauth:oauth}, function (e, r, body) {\n // Ideally, you would take the body in the response\n // and construct a URL that a user clicks on (like a sign in button).\n // The verifier is only available in the response after a user has\n // verified with twitter that they are authorizing your app.\n\n // step 2\n var req_data = qs.parse(body)\n var uri = \'https://api.twitter.com/oauth/authenticate\'\n + \'?\' + qs.stringify({oauth_token: req_data.oauth_token})\n // redirect the user to the authorize uri\n\n // step 3\n // after the user is redirected back to your server\n var auth_data = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: auth_data.oauth_token\n , token_secret: req_data.oauth_token_secret\n , verifier: auth_data.oauth_verifier\n }\n , url = \'https://api.twitter.com/oauth/access_token\'\n ;\n request.post({url:url, oauth:oauth}, function (e, r, body) {\n // ready to make signed requests on behalf of the user\n var perm_data = qs.parse(body)\n , oauth =\n { consumer_key: CONSUMER_KEY\n , consumer_secret: CONSUMER_SECRET\n , token: perm_data.oauth_token\n , token_secret: perm_data.oauth_token_secret\n }\n , url = \'https://api.twitter.com/1.1/users/show.json\'\n , qs =\n { screen_name: perm_data.screen_name\n , user_id: perm_data.user_id\n }\n ;\n request.get({url:url, oauth:oauth, qs:qs, json:true}, function (e, r, user) {\n console.log(user)\n })\n })\n})\n```\n\nFor [RSA-SHA1 signing](https://tools.ietf.org/html/rfc5849#section-3.4.3), make\nthe following changes to the OAuth options object:\n* Pass `signature_method : \'RSA-SHA1\'`\n* Instead of `consumer_secret`, specify a `private_key` string in\n [PEM format](http://how2ssl.com/articles/working_with_pem_files/)\n\nFor [PLAINTEXT signing](http://oauth.net/core/1.0/#anchor22), make\nthe following changes to the OAuth options object:\n* Pass `signature_method : \'PLAINTEXT\'`\n\nTo send OAuth parameters via query params or in a post body as described in The\n[Consumer Request Parameters](http://oauth.net/core/1.0/#consumer_req_param)\nsection of the oauth1 spec:\n* Pass `transport_method : \'query\'` or `transport_method : \'body\'` in the OAuth\n options object.\n* `transport_method` defaults to `\'header\'`\n\nTo use [Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html) you can either\n* Manually generate the body hash and pass it as a string `body_hash: \'...\'`\n* Automatically generate the body hash by passing `body_hash: true`\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## Proxies\n\nIf you specify a `proxy` option, then the request (and any subsequent\nredirects) will be sent via a connection to the proxy server.\n\nIf your endpoint is an `https` url, and you are using a proxy, then\nrequest will send a `CONNECT` request to the proxy server *first*, and\nthen use the supplied connection to connect to the endpoint.\n\nThat is, first it will make a request like:\n\n```\nHTTP/1.1 CONNECT endpoint-server.com:80\nHost: proxy-server.com\nUser-Agent: whatever user agent you specify\n```\n\nand then the proxy server make a TCP connection to `endpoint-server`\non port `80`, and return a response that looks like:\n\n```\nHTTP/1.1 200 OK\n```\n\nAt this point, the connection is left open, and the client is\ncommunicating directly with the `endpoint-server.com` machine.\n\nSee [the wikipedia page on HTTP Tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel)\nfor more information.\n\nBy default, when proxying `http` traffic, request will simply make a\nstandard proxied `http` request. This is done by making the `url`\nsection of the initial line of the request a fully qualified url to\nthe endpoint.\n\nFor example, it will make a single request that looks like:\n\n```\nHTTP/1.1 GET http://endpoint-server.com/some-url\nHost: proxy-server.com\nOther-Headers: all go here\n\nrequest body or whatever\n```\n\nBecause a pure "http over http" tunnel offers no additional security\nor other features, it is generally simpler to go with a\nstraightforward HTTP proxy in this case. However, if you would like\nto force a tunneling proxy, you may set the `tunnel` option to `true`.\n\nYou can also make a standard proxied `http` request by explicitly setting\n`tunnel : false`, but **note that this will allow the proxy to see the traffic\nto/from the destination server**.\n\nIf you are using a tunneling proxy, you may set the\n`proxyHeaderWhiteList` to share certain headers with the proxy.\n\nYou can also set the `proxyHeaderExclusiveList` to share certain\nheaders only with the proxy and not with destination host.\n\nBy default, this set is:\n\n```\naccept\naccept-charset\naccept-encoding\naccept-language\naccept-ranges\ncache-control\ncontent-encoding\ncontent-language\ncontent-length\ncontent-location\ncontent-md5\ncontent-range\ncontent-type\nconnection\ndate\nexpect\nmax-forwards\npragma\nproxy-authorization\nreferer\nte\ntransfer-encoding\nuser-agent\nvia\n```\n\nNote that, when using a tunneling proxy, the `proxy-authorization`\nheader and any headers from custom `proxyHeaderExclusiveList` are\n*never* sent to the endpoint server, but only to the proxy server.\n\n\n### Controlling proxy behaviour using environment variables\n\nThe following environment variables are respected by `request`:\n\n * `HTTP_PROXY` / `http_proxy`\n * `HTTPS_PROXY` / `https_proxy`\n * `NO_PROXY` / `no_proxy`\n\nWhen `HTTP_PROXY` / `http_proxy` are set, they will be used to proxy non-SSL requests that do not have an explicit `proxy` configuration option present. Similarly, `HTTPS_PROXY` / `https_proxy` will be respected for SSL requests that do not have an explicit `proxy` configuration option. It is valid to define a proxy in one of the environment variables, but then override it for a specific request, using the `proxy` configuration option. Furthermore, the `proxy` configuration option can be explicitly set to false / null to opt out of proxying altogether for that request.\n\n`request` is also aware of the `NO_PROXY`/`no_proxy` environment variables. These variables provide a granular way to opt out of proxying, on a per-host basis. It should contain a comma separated list of hosts to opt out of proxying. It is also possible to opt of proxying when a particular destination port is used. Finally, the variable may be set to `*` to opt out of the implicit proxy configuration of the other environment variables.\n\nHere\'s some examples of valid `no_proxy` values:\n\n * `google.com` - don\'t proxy HTTP/HTTPS requests to Google.\n * `google.com:443` - don\'t proxy HTTPS requests to Google, but *do* proxy HTTP requests to Google.\n * `google.com:443, yahoo.com:80` - don\'t proxy HTTPS requests to Google, and don\'t proxy HTTP requests to Yahoo!\n * `*` - ignore `https_proxy`/`http_proxy` environment variables altogether.\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## UNIX Domain Sockets\n\n`request` supports making requests to [UNIX Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket). To make one, use the following URL scheme:\n\n```js\n/* Pattern */ \'http://unix:SOCKET:PATH\'\n/* Example */ request.get(\'http://unix:/absolute/path/to/unix.socket:/request/path\')\n```\n\nNote: The `SOCKET` path is assumed to be absolute to the root of the host file system.\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## TLS/SSL Protocol\n\nTLS/SSL Protocol options, such as `cert`, `key` and `passphrase`, can be\nset directly in `options` object, in the `agentOptions` property of the `options` object, or even in `https.globalAgent.options`. Keep in mind that, although `agentOptions` allows for a slightly wider range of configurations, the recommended way is via `options` object directly, as using `agentOptions` or `https.globalAgent.options` would not be applied in the same way in proxied environments (as data travels through a TLS connection instead of an http/https agent).\n\n```js\nvar fs = require(\'fs\')\n , path = require(\'path\')\n , certFile = path.resolve(__dirname, \'ssl/client.crt\')\n , keyFile = path.resolve(__dirname, \'ssl/client.key\')\n , caFile = path.resolve(__dirname, \'ssl/ca.cert.pem\')\n , request = require(\'request\');\n\nvar options = {\n url: \'https://api.some-server.com/\',\n cert: fs.readFileSync(certFile),\n key: fs.readFileSync(keyFile),\n passphrase: \'password\',\n ca: fs.readFileSync(caFile)\n }\n};\n\nrequest.get(options);\n```\n\n### Using `options.agentOptions`\n\nIn the example below, we call an API requires client side SSL certificate\n(in PEM format) with passphrase protected private key (in PEM format) and disable the SSLv3 protocol:\n\n```js\nvar fs = require(\'fs\')\n , path = require(\'path\')\n , certFile = path.resolve(__dirname, \'ssl/client.crt\')\n , keyFile = path.resolve(__dirname, \'ssl/client.key\')\n , request = require(\'request\');\n\nvar options = {\n url: \'https://api.some-server.com/\',\n agentOptions: {\n cert: fs.readFileSync(certFile),\n key: fs.readFileSync(keyFile),\n // Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format:\n // pfx: fs.readFileSync(pfxFilePath),\n passphrase: \'password\',\n securityOptions: \'SSL_OP_NO_SSLv3\'\n }\n};\n\nrequest.get(options);\n```\n\nIt is able to force using SSLv3 only by specifying `secureProtocol`:\n\n```js\nrequest.get({\n url: \'https://api.some-server.com/\',\n agentOptions: {\n secureProtocol: \'SSLv3_method\'\n }\n});\n```\n\nIt is possible to accept other certificates than those signed by generally allowed Certificate Authorities (CAs).\nThis can be useful, for example, when using self-signed certificates.\nTo require a different root certificate, you can specify the signing CA by adding the contents of the CA\'s certificate file to the `agentOptions`.\nThe certificate the domain presents must be signed by the root certificate specified:\n\n```js\nrequest.get({\n url: \'https://api.some-server.com/\',\n agentOptions: {\n ca: fs.readFileSync(\'ca.cert.pem\')\n }\n});\n```\n\n[back to top](#table-of-contents)\n\n\n---\n\n## Support for HAR 1.2\n\nThe `options.har` property will override the values: `url`, `method`, `qs`, `headers`, `form`, `formData`, `body`, `json`, as well as construct multipart data and read files from disk when `request.postData.params[].fileName` is present without a matching `value`.\n\na validation step will check if the HAR Request format matches the latest spec (v1.2) and will skip parsing if not matching.\n\n```js\n var request = require(\'request\')\n request({\n // will be ignored\n method: \'GET\',\n uri: \'http://www.google.com\',\n\n // HTTP Archive Request Object\n har: {\n url: \'http://www.mockbin.com/har\',\n method: \'POST\',\n headers: [\n {\n name: \'content-type\',\n value: \'application/x-www-form-urlencoded\'\n }\n ],\n postData: {\n mimeType: \'application/x-www-form-urlencoded\',\n params: [\n {\n name: \'foo\',\n value: \'bar\'\n },\n {\n name: \'hello\',\n value: \'world\'\n }\n ]\n }\n }\n })\n\n // a POST request will be sent to http://www.mockbin.com\n // with body an application/x-www-form-urlencoded body:\n // foo=bar&hello=world\n```\n\n[back to top](#table-of-contents)\n\n\n---\n\n## request(options, callback)\n\nThe first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional.\n\n- `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()`\n- `baseUrl` - fully qualified uri string used as the base url. Most useful with `request.defaults`, for example when you want to do many requests to the same domain. If `baseUrl` is `https://example.com/api/`, then requesting `/end/point?test=true` will fetch `https://example.com/api/end/point?test=true`. When `baseUrl` is given, `uri` must also be a string.\n- `method` - http method (default: `"GET"`)\n- `headers` - http headers (default: `{}`)\n\n---\n\n- `qs` - object containing querystring values to be appended to the `uri`\n- `qsParseOptions` - object containing options to pass to the [qs.parse](https://github.com/hapijs/qs#parsing-objects) method. Alternatively pass options to the [querystring.parse](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_parse_str_sep_eq_options) method using this format `{sep:\';\', eq:\':\', options:{}}`\n- `qsStringifyOptions` - object containing options to pass to the [qs.stringify](https://github.com/hapijs/qs#stringifying) method. Alternatively pass options to the [querystring.stringify](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_stringify_obj_sep_eq_options) method using this format `{sep:\';\', eq:\':\', options:{}}`. For example, to change the way arrays are converted to query strings using the `qs` module pass the `arrayFormat` option with one of `indices|brackets|repeat`\n- `useQuerystring` - If true, use `querystring` to stringify and parse\n querystrings, otherwise use `qs` (default: `false`). Set this option to\n `true` if you need arrays to be serialized as `foo=bar&foo=baz` instead of the\n default `foo[0]=bar&foo[1]=baz`.\n\n---\n\n- `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer`, `String` or `ReadStream`. If `json` is `true`, then `body` must be a JSON-serializable object.\n- `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above.\n- `formData` - Data to pass for a `multipart/form-data` request. See\n [Forms](#forms) section above.\n- `multipart` - array of objects which contain their own headers and `body`\n attributes. Sends a `multipart/related` request. See [Forms](#forms) section\n above.\n - Alternatively you can pass in an object `{chunked: false, data: []}` where\n `chunked` is used to specify whether the request is sent in\n [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding)\n In non-chunked requests, data items with body streams are not allowed.\n- `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request.\n- `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request.\n- `json` - sets `body` to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON.\n- `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body.\n- `jsonReplacer` - a [replacer function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that will be passed to `JSON.stringify()` when stringifying a JSON request body.\n\n---\n\n- `auth` - A hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above.\n- `oauth` - Options for OAuth HMAC-SHA1 signing. See documentation above.\n- `hawk` - Options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example).\n- `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`. Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services). If you want to use AWS sign version 4 use the parameter `sign_version` with value `4` otherwise the default is version 2. **Note:** you need to `npm install aws4` first.\n- `httpSignature` - Options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent\'s library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options.\n\n---\n\n- `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise.\n- `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`)\n- `maxRedirects` - the maximum number of redirects to follow (default: `10`)\n- `removeRefererHeader` - removes the referer header when a redirect happens (default: `false`). **Note:** if true, referer header set in the initial request is preserved during redirect chain.\n\n---\n\n- `encoding` - Encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default). (**Note:** if you expect binary data, you should set `encoding: null`.)\n- `gzip` - If `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response. **Note:** Automatic decoding of the response content is performed on the body data returned through `request` (both through the `request` stream and passed to the callback function) but is not performed on the `response` stream (available from the `response` event) which is the unmodified `http.IncomingMessage` object which may contain compressed data. See example below.\n- `jar` - If `true`, remember cookies for future use (or define your custom cookie jar; see examples section)\n\n---\n\n- `agent` - `http(s).Agent` instance to use\n- `agentClass` - alternatively specify your agent\'s class name\n- `agentOptions` - and pass its options. **Note:** for HTTPS see [tls API doc for TLS/SSL options](http://nodejs.org/api/tls.html#tls_tls_connect_options_callback) and the [documentation above](#using-optionsagentoptions).\n- `forever` - set to `true` to use the [forever-agent](https://github.com/request/forever-agent) **Note:** Defaults to `http(s).Agent({keepAlive:true})` in node 0.12+\n- `pool` - An object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as your options allow for it). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool. **Note:** `pool` is used only when the `agent` option is not specified.\n - A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`).\n - Note that if you are sending multiple requests in a loop and creating\n multiple new `pool` objects, `maxSockets` will not work as intended. To\n work around this, either use [`request.defaults`](#requestdefaultsoptions)\n with your pool options or create the pool object with the `maxSockets`\n property outside of the loop.\n- `timeout` - Integer containing the number of milliseconds to wait for a\nserver to send response headers (and start the response body) before aborting\nthe request. Note that if the underlying TCP connection cannot be established,\nthe OS-wide TCP connection timeout will overrule the `timeout` option ([the\ndefault in Linux can be anywhere from 20-120 seconds][linux-timeout]).\n\n[linux-timeout]: http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout\n\n---\n\n- `localAddress` - Local interface to bind for network connections.\n- `proxy` - An HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`)\n- `strictSSL` - If `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option.\n- `tunnel` - controls the behavior of\n [HTTP `CONNECT` tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling)\n as follows:\n - `undefined` (default) - `true` if the destination is `https`, `false` otherwise\n - `true` - always tunnel to the destination by making a `CONNECT` request to\n the proxy\n - `false` - request the destination as a `GET` request.\n- `proxyHeaderWhiteList` - A whitelist of headers to send to a\n tunneling proxy.\n- `proxyHeaderExclusiveList` - A whitelist of headers to send\n exclusively to a tunneling proxy and not to destination.\n\n---\n\n- `time` - If `true`, the request-response cycle (including all redirects) is timed at millisecond resolution, and the result provided on the response\'s `elapsedTime` property.\n- `har` - A [HAR 1.2 Request Object](http://www.softwareishard.com/blog/har-12-spec/#request), will be processed from HAR format into options overwriting matching values *(see the [HAR 1.2 section](#support-for-har-1.2) for details)*\n- `callback` - alternatively pass the request\'s callback in the options object\n\nThe callback argument gets 3 arguments:\n\n1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object)\n2. An [`http.IncomingMessage`](http://nodejs.org/api/http.html#http_http_incomingmessage) object\n3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied)\n\n[back to top](#table-of-contents)\n\n\n---\n\n## Convenience methods\n\nThere are also shorthand methods for different HTTP METHODs and some other conveniences.\n\n\n### request.defaults(options)\n\nThis method **returns a wrapper** around the normal request API that defaults\nto whatever options you pass to it.\n\n**Note:** `request.defaults()` **does not** modify the global request API;\ninstead, it **returns a wrapper** that has your default settings applied to it.\n\n**Note:** You can call `.defaults()` on the wrapper that is returned from\n`request.defaults` to add/override defaults that were previously defaulted.\n\nFor example:\n```js\n//requests using baseRequest() will set the \'x-token\' header\nvar baseRequest = request.defaults({\n headers: {\'x-token\': \'my-token\'}\n})\n\n//requests using specialRequest() will include the \'x-token\' header set in\n//baseRequest and will also include the \'special\' header\nvar specialRequest = baseRequest.defaults({\n headers: {special: \'special value\'}\n})\n```\n\n### request.put\n\nSame as `request()`, but defaults to `method: "PUT"`.\n\n```js\nrequest.put(url)\n```\n\n### request.patch\n\nSame as `request()`, but defaults to `method: "PATCH"`.\n\n```js\nrequest.patch(url)\n```\n\n### request.post\n\nSame as `request()`, but defaults to `method: "POST"`.\n\n```js\nrequest.post(url)\n```\n\n### request.head\n\nSame as `request()`, but defaults to `method: "HEAD"`.\n\n```js\nrequest.head(url)\n```\n\n### request.del / request.delete\n\nSame as `request()`, but defaults to `method: "DELETE"`.\n\n```js\nrequest.del(url)\nrequest.delete(url)\n```\n\n### request.get\n\nSame as `request()` (for uniformity).\n\n```js\nrequest.get(url)\n```\n### request.cookie\n\nFunction that creates a new cookie.\n\n```js\nrequest.cookie(\'key1=value1\')\n```\n### request.jar()\n\nFunction that creates a new cookie jar.\n\n```js\nrequest.jar()\n```\n\n[back to top](#table-of-contents)\n\n\n---\n\n\n## Debugging\n\nThere are at least three ways to debug the operation of `request`:\n\n1. Launch the node process like `NODE_DEBUG=request node script.js`\n (`lib,request,otherlib` works too).\n\n2. Set `require(\'request\').debug = true` at any time (this does the same thing\n as #1).\n\n3. Use the [request-debug module](https://github.com/request/request-debug) to\n view request and response headers and bodies.\n\n[back to top](#table-of-contents)\n\n\n---\n\n## Timeouts\n\nMost requests to external servers should have a timeout attached, in case the\nserver is not responding in a timely manner. Without a timeout, your code may\nhave a socket open/consume resources for minutes or more.\n\nThere are two main types of timeouts: **connection timeouts** and **read\ntimeouts**. A connect timeout occurs if the timeout is hit while your client is\nattempting to establish a connection to a remote machine (corresponding to the\n[connect() call][connect] on the socket). A read timeout occurs any time the\nserver is too slow to send back a part of the response.\n\nThese two situations have widely different implications for what went wrong\nwith the request, so it\'s useful to be able to distinguish them. You can detect\ntimeout errors by checking `err.code` for an \'ETIMEDOUT\' value. Further, you\ncan detect whether the timeout was a connection timeout by checking if the\n`err.connect` property is set to `true`.\n\n```js\nrequest.get(\'http://10.255.255.1\', {timeout: 1500}, function(err) {\n console.log(err.code === \'ETIMEDOUT\');\n // Set to `true` if the timeout was a connection timeout, `false` or\n // `undefined` otherwise.\n console.log(err.connect === true);\n process.exit(0);\n});\n```\n\n[connect]: http://linux.die.net/man/2/connect\n\n## Examples:\n\n```js\n var request = require(\'request\')\n , rand = Math.floor(Math.random()*100000000).toString()\n ;\n request(\n { method: \'PUT\'\n , uri: \'http://mikeal.iriscouch.com/testjs/\' + rand\n , multipart:\n [ { \'content-type\': \'application/json\'\n , body: JSON.stringify({foo: \'bar\', _attachments: {\'message.txt\': {follows: true, length: 18, \'content_type\': \'text/plain\' }}})\n }\n , { body: \'I am an attachment\' }\n ]\n }\n , function (error, response, body) {\n if(response.statusCode == 201){\n console.log(\'document saved as: http://mikeal.iriscouch.com/testjs/\'+ rand)\n } else {\n console.log(\'error: \'+ response.statusCode)\n console.log(body)\n }\n }\n )\n```\n\nFor backwards-compatibility, response compression is not supported by default.\nTo accept gzip-compressed responses, set the `gzip` option to `true`. Note\nthat the body data passed through `request` is automatically decompressed\nwhile the response object is unmodified and will contain compressed data if\nthe server sent a compressed response.\n\n```js\n var request = require(\'request\')\n request(\n { method: \'GET\'\n , uri: \'http://www.google.com\'\n , gzip: true\n }\n , function (error, response, body) {\n // body is the decompressed response body\n console.log(\'server encoded the data as: \' + (response.headers[\'content-encoding\'] || \'identity\'))\n console.log(\'the decoded data is: \' + body)\n }\n ).on(\'data\', function(data) {\n // decompressed data as it is received\n console.log(\'decoded chunk: \' + data)\n })\n .on(\'response\', function(response) {\n // unmodified http.IncomingMessage object\n response.on(\'data\', function(data) {\n // compressed data as it is received\n console.log(\'received \' + data.length + \' bytes of compressed data\')\n })\n })\n```\n\nCookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`).\n\n```js\nvar request = request.defaults({jar: true})\nrequest(\'http://www.google.com\', function () {\n request(\'http://images.google.com\')\n})\n```\n\nTo use a custom cookie jar (instead of `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`)\n\n```js\nvar j = request.jar()\nvar request = request.defaults({jar:j})\nrequest(\'http://www.google.com\', function () {\n request(\'http://images.google.com\')\n})\n```\n\nOR\n\n```js\nvar j = request.jar();\nvar cookie = request.cookie(\'key1=value1\');\nvar url = \'http://www.google.com\';\nj.setCookie(cookie, url);\nrequest({url: url, jar: j}, function () {\n request(\'http://images.google.com\')\n})\n```\n\nTo use a custom cookie store (such as a\n[`FileCookieStore`](https://github.com/mitsuru/tough-cookie-filestore)\nwhich supports saving to and restoring from JSON files), pass it as a parameter\nto `request.jar()`:\n\n```js\nvar FileCookieStore = require(\'tough-cookie-filestore\');\n// NOTE - currently the \'cookies.json\' file must already exist!\nvar j = request.jar(new FileCookieStore(\'cookies.json\'));\nrequest = request.defaults({ jar : j })\nrequest(\'http://www.google.com\', function() {\n request(\'http://images.google.com\')\n})\n```\n\nThe cookie store must be a\n[`tough-cookie`](https://github.com/SalesforceEng/tough-cookie)\nstore and it must support synchronous operations; see the\n[`CookieStore` API docs](https://github.com/SalesforceEng/tough-cookie#cookiestore-api)\nfor details.\n\nTo inspect your cookie jar after a request:\n\n```js\nvar j = request.jar()\nrequest({url: \'http://www.google.com\', jar: j}, function () {\n var cookie_string = j.getCookieString(url); // "key1=value1; key2=value2; ..."\n var cookies = j.getCookies(url);\n // [{key: \'key1\', value: \'value1\', domain: "www.google.com", ...}, ...]\n})\n```\n\n[back to top](#table-of-contents)\n', 291 silly install resolved readmeFilename: 'README.md', 291 silly install resolved homepage: 'https://github.com/request/request', 291 silly install resolved _id: 'request@2.72.0', 291 silly install resolved _shasum: '0ce3a179512620b10441f14c82e21c12c0ddb4e1', 291 silly install resolved _resolved: 'https://registry.npmjs.org/request/-/request-2.72.0.tgz', 291 silly install resolved _from: 'request@>=2.71.0 <3.0.0' } ] 292 info install color@0.11.1 into E:\cartridge-images\node_modules\sharp 293 info install nan@2.3.2 into E:\cartridge-images\node_modules\sharp 294 info install bluebird@3.3.5 into E:\cartridge-images\node_modules\sharp 295 info install semver@5.1.0 into E:\cartridge-images\node_modules\sharp 296 info install tar@2.2.1 into E:\cartridge-images\node_modules\sharp 297 info install request@2.72.0 into E:\cartridge-images\node_modules\sharp 298 info installOne color@0.11.1 299 verbose installOne of color to E:\cartridge-images\node_modules\sharp not in flight; installing 300 info installOne nan@2.3.2 301 verbose installOne of nan to E:\cartridge-images\node_modules\sharp not in flight; installing 302 info installOne bluebird@3.3.5 303 verbose installOne of bluebird to E:\cartridge-images\node_modules\sharp not in flight; installing 304 info installOne semver@5.1.0 305 verbose installOne of semver to E:\cartridge-images\node_modules\sharp not in flight; installing 306 info installOne tar@2.2.1 307 verbose installOne of tar to E:\cartridge-images\node_modules\sharp not in flight; installing 308 info installOne request@2.72.0 309 verbose installOne of request to E:\cartridge-images\node_modules\sharp not in flight; installing 310 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\color-f4b3441708e7559a.lock for E:\cartridge-images\node_modules\sharp\node_modules\color 311 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\bluebird-522895aa32080496.lock for E:\cartridge-images\node_modules\sharp\node_modules\bluebird 312 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\nan-0d1029606626cfb7.lock for E:\cartridge-images\node_modules\sharp\node_modules\nan 313 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\semver-6b3a6f7a189ce91a.lock for E:\cartridge-images\node_modules\sharp\node_modules\semver 314 silly install write writing color 0.11.1 to E:\cartridge-images\node_modules\sharp\node_modules\color 315 silly cache addNamed cb color@0.11.1 316 verbose unbuild node_modules\sharp\node_modules\color 317 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\request-c5ccd281545f6ead.lock for E:\cartridge-images\node_modules\sharp\node_modules\request 318 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\tar-37b0c9afb85f6819.lock for E:\cartridge-images\node_modules\sharp\node_modules\tar 319 silly install write writing bluebird 3.3.5 to E:\cartridge-images\node_modules\sharp\node_modules\bluebird 320 silly cache addNamed cb bluebird@3.3.5 321 verbose unbuild node_modules\sharp\node_modules\bluebird 322 silly install write writing nan 2.3.2 to E:\cartridge-images\node_modules\sharp\node_modules\nan 323 silly cache addNamed cb nan@2.3.2 324 verbose unbuild node_modules\sharp\node_modules\nan 325 silly install write writing semver 5.1.0 to E:\cartridge-images\node_modules\sharp\node_modules\semver 326 silly cache addNamed cb semver@5.1.0 327 verbose unbuild node_modules\sharp\node_modules\semver 328 silly install write writing request 2.72.0 to E:\cartridge-images\node_modules\sharp\node_modules\request 329 silly cache addNamed cb request@2.72.0 330 verbose unbuild node_modules\sharp\node_modules\request 331 silly install write writing tar 2.2.1 to E:\cartridge-images\node_modules\sharp\node_modules\tar 332 silly cache addNamed cb tar@2.2.1 333 verbose unbuild node_modules\sharp\node_modules\tar 334 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color is being purged from base E:\cartridge-images 335 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color 336 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\bluebird is being purged from base E:\cartridge-images 337 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\bluebird 338 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\nan is being purged from base E:\cartridge-images 339 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\nan 340 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\semver is being purged from base E:\cartridge-images 341 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\semver 342 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\color\0.11.1\package.tgz 343 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\color 344 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color is being purged 345 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color 346 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request is being purged from base E:\cartridge-images 347 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request 348 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\tar is being purged from base E:\cartridge-images 349 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\tar 350 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\bluebird\3.3.5\package.tgz 351 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\bluebird 352 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\bluebird is being purged 353 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\bluebird 354 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\nan\2.3.2\package.tgz 355 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\nan 356 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\nan is being purged 357 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\nan 358 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\semver\5.1.0\package.tgz 359 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\semver 360 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\semver is being purged 361 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\semver 362 silly gunzTarPerm modes [ '777', '666' ] 363 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\request\2.72.0\package.tgz 364 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\request 365 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request is being purged 366 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request 367 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\tar\2.2.1\package.tgz 368 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\tar 369 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\tar is being purged 370 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\tar 371 silly gunzTarPerm modes [ '777', '666' ] 372 silly gunzTarPerm modes [ '777', '666' ] 373 silly gunzTarPerm modes [ '777', '666' ] 374 silly gunzTarPerm modes [ '777', '666' ] 375 silly gunzTarPerm modes [ '777', '666' ] 376 silly gunzTarPerm extractEntry package.json 377 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 378 silly gunzTarPerm extractEntry package.json 379 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 380 silly gunzTarPerm extractEntry package.json 381 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 382 silly gunzTarPerm extractEntry package.json 383 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 384 silly gunzTarPerm extractEntry package.json 385 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 386 silly gunzTarPerm extractEntry package.json 387 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 388 silly gunzTarPerm extractEntry README.md 389 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 390 silly gunzTarPerm extractEntry LICENSE 391 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 392 silly gunzTarPerm extractEntry README.md 393 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 394 silly gunzTarPerm extractEntry LICENSE 395 silly gunzTarPerm modified mode [ 'LICENSE', 436, 438 ] 396 silly gunzTarPerm extractEntry README.md 397 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 398 silly gunzTarPerm extractEntry .npmignore 399 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ] 400 silly gunzTarPerm extractEntry README.md 401 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 402 silly gunzTarPerm extractEntry include_dirs.js 403 silly gunzTarPerm modified mode [ 'include_dirs.js', 436, 438 ] 404 silly gunzTarPerm extractEntry .npmignore 405 silly gunzTarPerm modified mode [ '.npmignore', 436, 438 ] 406 silly gunzTarPerm extractEntry README.md 407 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 408 silly gunzTarPerm extractEntry .npmignore 409 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ] 410 silly gunzTarPerm extractEntry README.md 411 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 412 silly gunzTarPerm extractEntry index.js 413 silly gunzTarPerm modified mode [ 'index.js', 420, 438 ] 414 silly gunzTarPerm extractEntry CHANGELOG.md 415 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 420, 438 ] 416 silly gunzTarPerm extractEntry LICENSE 417 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 418 silly gunzTarPerm extractEntry semver.js 419 silly gunzTarPerm modified mode [ 'semver.js', 420, 438 ] 420 silly gunzTarPerm extractEntry bin/semver 421 silly gunzTarPerm modified mode [ 'bin/semver', 493, 511 ] 422 silly gunzTarPerm extractEntry .travis.yml 423 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ] 424 silly gunzTarPerm extractEntry range.bnf 425 silly gunzTarPerm modified mode [ 'range.bnf', 420, 438 ] 426 silly gunzTarPerm extractEntry test/big-numbers.js 427 silly gunzTarPerm modified mode [ 'test/big-numbers.js', 420, 438 ] 428 silly gunzTarPerm extractEntry test/clean.js 429 silly gunzTarPerm modified mode [ 'test/clean.js', 420, 438 ] 430 silly gunzTarPerm extractEntry test/gtr.js 431 silly gunzTarPerm modified mode [ 'test/gtr.js', 420, 438 ] 432 silly gunzTarPerm extractEntry test/index.js 433 silly gunzTarPerm modified mode [ 'test/index.js', 420, 438 ] 434 silly gunzTarPerm extractEntry test/ltr.js 435 silly gunzTarPerm modified mode [ 'test/ltr.js', 420, 438 ] 436 silly gunzTarPerm extractEntry test/major-minor-patch.js 437 silly gunzTarPerm modified mode [ 'test/major-minor-patch.js', 420, 438 ] 438 silly gunzTarPerm extractEntry nan_converters.h 439 silly gunzTarPerm modified mode [ 'nan_converters.h', 436, 438 ] 440 silly gunzTarPerm extractEntry LICENSE.md 441 silly gunzTarPerm modified mode [ 'LICENSE.md', 436, 438 ] 442 silly gunzTarPerm extractEntry doc/node_misc.md 443 silly gunzTarPerm modified mode [ 'doc/node_misc.md', 436, 438 ] 444 silly gunzTarPerm extractEntry LICENSE 445 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 446 silly gunzTarPerm extractEntry tar.js 447 silly gunzTarPerm modified mode [ 'tar.js', 420, 438 ] 448 silly gunzTarPerm extractEntry changelog.md 449 silly gunzTarPerm modified mode [ 'changelog.md', 436, 438 ] 450 silly gunzTarPerm extractEntry js/browser/bluebird.core.js 451 silly gunzTarPerm modified mode [ 'js/browser/bluebird.core.js', 436, 438 ] 452 silly gunzTarPerm extractEntry LICENSE 453 silly gunzTarPerm modified mode [ 'LICENSE', 436, 438 ] 454 silly gunzTarPerm extractEntry examples/extracter.js 455 silly gunzTarPerm modified mode [ 'examples/extracter.js', 420, 438 ] 456 silly gunzTarPerm extractEntry examples/packer.js 457 silly gunzTarPerm modified mode [ 'examples/packer.js', 420, 438 ] 458 silly gunzTarPerm extractEntry index.js 459 silly gunzTarPerm modified mode [ 'index.js', 509, 511 ] 460 silly gunzTarPerm extractEntry request.js 461 silly gunzTarPerm modified mode [ 'request.js', 436, 438 ] 462 silly gunzTarPerm extractEntry .travis.yml 463 silly gunzTarPerm modified mode [ '.travis.yml', 436, 438 ] 464 silly gunzTarPerm extractEntry js/browser/bluebird.core.min.js 465 silly gunzTarPerm modified mode [ 'js/browser/bluebird.core.min.js', 436, 438 ] 466 silly gunzTarPerm extractEntry examples/reader.js 467 silly gunzTarPerm modified mode [ 'examples/reader.js', 420, 438 ] 468 silly gunzTarPerm extractEntry lib/buffer-entry.js 469 silly gunzTarPerm modified mode [ 'lib/buffer-entry.js', 420, 438 ] 470 silly gunzTarPerm extractEntry js/browser/bluebird.js 471 silly gunzTarPerm modified mode [ 'js/browser/bluebird.js', 436, 438 ] 472 silly gunzTarPerm extractEntry js/browser/bluebird.min.js 473 silly gunzTarPerm modified mode [ 'js/browser/bluebird.min.js', 436, 438 ] 474 silly gunzTarPerm extractEntry lib/entry-writer.js 475 silly gunzTarPerm modified mode [ 'lib/entry-writer.js', 420, 438 ] 476 silly gunzTarPerm extractEntry doc/asyncworker.md 477 silly gunzTarPerm modified mode [ 'doc/asyncworker.md', 436, 438 ] 478 silly gunzTarPerm extractEntry js/release/any.js 479 silly gunzTarPerm modified mode [ 'js/release/any.js', 436, 438 ] 480 silly gunzTarPerm extractEntry js/release/finally.js 481 silly gunzTarPerm modified mode [ 'js/release/finally.js', 436, 438 ] 482 silly gunzTarPerm extractEntry js/release/generators.js 483 silly gunzTarPerm modified mode [ 'js/release/generators.js', 436, 438 ] 484 silly gunzTarPerm extractEntry CHANGELOG.md 485 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 436, 438 ] 486 silly gunzTarPerm extractEntry lib/entry.js 487 silly gunzTarPerm modified mode [ 'lib/entry.js', 420, 438 ] 488 silly gunzTarPerm extractEntry lib/extended-header-writer.js 489 silly gunzTarPerm modified mode [ 'lib/extended-header-writer.js', 420, 438 ] 490 silly gunzTarPerm extractEntry doc/callback.md 491 silly gunzTarPerm modified mode [ 'doc/callback.md', 436, 438 ] 492 silly gunzTarPerm extractEntry doc/converters.md 493 silly gunzTarPerm modified mode [ 'doc/converters.md', 436, 438 ] 494 silly gunzTarPerm extractEntry lib/extended-header.js 495 silly gunzTarPerm modified mode [ 'lib/extended-header.js', 420, 438 ] 496 silly gunzTarPerm extractEntry lib/extract.js 497 silly gunzTarPerm modified mode [ 'lib/extract.js', 420, 438 ] 498 silly gunzTarPerm extractEntry doc/errors.md 499 silly gunzTarPerm modified mode [ 'doc/errors.md', 436, 438 ] 500 silly gunzTarPerm extractEntry doc/maybe_types.md 501 silly gunzTarPerm modified mode [ 'doc/maybe_types.md', 436, 438 ] 502 silly gunzTarPerm extractEntry lib/global-header-writer.js 503 silly gunzTarPerm modified mode [ 'lib/global-header-writer.js', 420, 438 ] 504 silly gunzTarPerm extractEntry lib/header.js 505 silly gunzTarPerm modified mode [ 'lib/header.js', 420, 438 ] 506 silly gunzTarPerm extractEntry lib/auth.js 507 silly gunzTarPerm modified mode [ 'lib/auth.js', 436, 438 ] 508 silly gunzTarPerm extractEntry js/release/join.js 509 silly gunzTarPerm modified mode [ 'js/release/join.js', 436, 438 ] 510 silly gunzTarPerm extractEntry doc/methods.md 511 silly gunzTarPerm modified mode [ 'doc/methods.md', 436, 438 ] 512 silly gunzTarPerm extractEntry doc/new.md 513 silly gunzTarPerm modified mode [ 'doc/new.md', 436, 438 ] 514 silly gunzTarPerm extractEntry lib/pack.js 515 silly gunzTarPerm modified mode [ 'lib/pack.js', 420, 438 ] 516 silly gunzTarPerm extractEntry lib/parse.js 517 silly gunzTarPerm modified mode [ 'lib/parse.js', 420, 438 ] 518 info preinstall color@0.11.1 519 silly prepareForInstallMany adding color-convert@^0.5.3 from color dependencies 520 silly prepareForInstallMany adding color-string@^0.3.0 from color dependencies 521 silly gunzTarPerm extractEntry doc/buffers.md 522 silly gunzTarPerm modified mode [ 'doc/buffers.md', 436, 438 ] 523 silly gunzTarPerm extractEntry doc/object_wrappers.md 524 silly gunzTarPerm modified mode [ 'doc/object_wrappers.md', 436, 438 ] 525 silly cache add args [ 'color-convert@^0.5.3', null ] 526 verbose cache add spec color-convert@^0.5.3 527 silly cache add args [ 'color-string@^0.3.0', null ] 528 verbose cache add spec color-string@^0.3.0 529 silly cache add parsed spec { raw: 'color-convert@^0.5.3', 529 silly cache add scope: null, 529 silly cache add name: 'color-convert', 529 silly cache add rawSpec: '^0.5.3', 529 silly cache add spec: '>=0.5.3 <0.6.0', 529 silly cache add type: 'range' } 530 verbose addNamed color-convert@>=0.5.3 <0.6.0 531 silly addNamed semver.valid null 532 silly addNamed semver.validRange >=0.5.3 <0.6.0 533 silly addNameRange { name: 'color-convert', 533 silly addNameRange range: '>=0.5.3 <0.6.0', 533 silly addNameRange hasData: false } 534 silly mapToRegistry name color-convert 535 silly mapToRegistry using default registry 536 silly mapToRegistry registry https://registry.npmjs.org/ 537 silly mapToRegistry uri https://registry.npmjs.org/color-convert 538 verbose addNameRange registry:https://registry.npmjs.org/color-convert not in flight; fetching 539 silly cache add parsed spec { raw: 'color-string@^0.3.0', 539 silly cache add scope: null, 539 silly cache add name: 'color-string', 539 silly cache add rawSpec: '^0.3.0', 539 silly cache add spec: '>=0.3.0 <0.4.0', 539 silly cache add type: 'range' } 540 verbose addNamed color-string@>=0.3.0 <0.4.0 541 silly addNamed semver.valid null 542 silly addNamed semver.validRange >=0.3.0 <0.4.0 543 silly addNameRange { name: 'color-string', range: '>=0.3.0 <0.4.0', hasData: false } 544 silly mapToRegistry name color-string 545 silly mapToRegistry using default registry 546 silly mapToRegistry registry https://registry.npmjs.org/ 547 silly mapToRegistry uri https://registry.npmjs.org/color-string 548 verbose addNameRange registry:https://registry.npmjs.org/color-string not in flight; fetching 549 silly gunzTarPerm extractEntry .travis.yml 550 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ] 551 silly gunzTarPerm extractEntry test/00-setup-fixtures.js 552 silly gunzTarPerm modified mode [ 'test/00-setup-fixtures.js', 420, 438 ] 553 silly gunzTarPerm extractEntry lib/cookies.js 554 silly gunzTarPerm modified mode [ 'lib/cookies.js', 436, 438 ] 555 silly gunzTarPerm extractEntry lib/getProxyFromURI.js 556 silly gunzTarPerm modified mode [ 'lib/getProxyFromURI.js', 436, 438 ] 557 verbose request uri https://registry.npmjs.org/color-convert 558 verbose request no auth needed 559 info attempt registry request try #1 at 10:35:09 AM 560 verbose etag "1VDNG2OA4IKFKE0S0OXSO1JMS" 561 http request GET https://registry.npmjs.org/color-convert 562 verbose request uri https://registry.npmjs.org/color-string 563 verbose request no auth needed 564 info attempt registry request try #1 at 10:35:09 AM 565 verbose etag "4LQ4H8ANU0KIESMY9BMG9A0NY" 566 http request GET https://registry.npmjs.org/color-string 567 silly gunzTarPerm extractEntry js/release/filter.js 568 silly gunzTarPerm modified mode [ 'js/release/filter.js', 436, 438 ] 569 silly gunzTarPerm extractEntry doc/persistent.md 570 silly gunzTarPerm modified mode [ 'doc/persistent.md', 436, 438 ] 571 silly gunzTarPerm extractEntry doc/scopes.md 572 silly gunzTarPerm modified mode [ 'doc/scopes.md', 436, 438 ] 573 silly gunzTarPerm extractEntry test/dir-normalization.js 574 silly gunzTarPerm modified mode [ 'test/dir-normalization.js', 420, 438 ] 575 silly gunzTarPerm extractEntry test/parse.js 576 silly gunzTarPerm modified mode [ 'test/parse.js', 420, 438 ] 577 silly gunzTarPerm extractEntry doc/script.md 578 silly gunzTarPerm modified mode [ 'doc/script.md', 436, 438 ] 579 silly gunzTarPerm extractEntry doc/string_bytes.md 580 silly gunzTarPerm modified mode [ 'doc/string_bytes.md', 436, 438 ] 581 silly gunzTarPerm extractEntry lib/har.js 582 silly gunzTarPerm modified mode [ 'lib/har.js', 436, 438 ] 583 silly gunzTarPerm extractEntry lib/helpers.js 584 silly gunzTarPerm modified mode [ 'lib/helpers.js', 436, 438 ] 585 silly gunzTarPerm extractEntry test/error-on-broken.js 586 silly gunzTarPerm modified mode [ 'test/error-on-broken.js', 420, 438 ] 587 silly gunzTarPerm extractEntry test/extract-move.js 588 silly gunzTarPerm modified mode [ 'test/extract-move.js', 420, 438 ] 589 silly gunzTarPerm extractEntry js/release/method.js 590 silly gunzTarPerm modified mode [ 'js/release/method.js', 436, 438 ] 591 silly gunzTarPerm extractEntry doc/v8_internals.md 592 silly gunzTarPerm modified mode [ 'doc/v8_internals.md', 436, 438 ] 593 silly gunzTarPerm extractEntry doc/v8_misc.md 594 silly gunzTarPerm modified mode [ 'doc/v8_misc.md', 436, 438 ] 595 silly gunzTarPerm extractEntry lib/multipart.js 596 silly gunzTarPerm modified mode [ 'lib/multipart.js', 436, 438 ] 597 silly gunzTarPerm extractEntry lib/oauth.js 598 silly gunzTarPerm modified mode [ 'lib/oauth.js', 436, 438 ] 599 silly gunzTarPerm extractEntry lib/querystring.js 600 silly gunzTarPerm modified mode [ 'lib/querystring.js', 436, 438 ] 601 silly gunzTarPerm extractEntry test/extract.js 602 silly gunzTarPerm modified mode [ 'test/extract.js', 420, 438 ] 603 silly gunzTarPerm extractEntry test/parse-discard.js 604 silly gunzTarPerm modified mode [ 'test/parse-discard.js', 420, 438 ] 605 silly gunzTarPerm extractEntry nan.h 606 silly gunzTarPerm modified mode [ 'nan.h', 436, 438 ] 607 silly gunzTarPerm extractEntry nan_callbacks.h 608 silly gunzTarPerm modified mode [ 'nan_callbacks.h', 436, 438 ] 609 silly gunzTarPerm extractEntry nan_callbacks_12_inl.h 610 silly gunzTarPerm modified mode [ 'nan_callbacks_12_inl.h', 436, 438 ] 611 silly gunzTarPerm extractEntry nan_callbacks_pre_12_inl.h 612 silly gunzTarPerm modified mode [ 'nan_callbacks_pre_12_inl.h', 436, 438 ] 613 silly gunzTarPerm extractEntry nan_converters_43_inl.h 614 silly gunzTarPerm modified mode [ 'nan_converters_43_inl.h', 436, 438 ] 615 silly gunzTarPerm extractEntry nan_converters_pre_43_inl.h 616 silly gunzTarPerm modified mode [ 'nan_converters_pre_43_inl.h', 436, 438 ] 617 silly gunzTarPerm extractEntry nan_implementation_12_inl.h 618 silly gunzTarPerm modified mode [ 'nan_implementation_12_inl.h', 436, 438 ] 619 silly gunzTarPerm extractEntry nan_implementation_pre_12_inl.h 620 silly gunzTarPerm modified mode [ 'nan_implementation_pre_12_inl.h', 436, 438 ] 621 silly gunzTarPerm extractEntry nan_maybe_43_inl.h 622 silly gunzTarPerm modified mode [ 'nan_maybe_43_inl.h', 436, 438 ] 623 silly gunzTarPerm extractEntry nan_maybe_pre_43_inl.h 624 silly gunzTarPerm modified mode [ 'nan_maybe_pre_43_inl.h', 436, 438 ] 625 silly gunzTarPerm extractEntry nan_new.h 626 silly gunzTarPerm modified mode [ 'nan_new.h', 436, 438 ] 627 silly gunzTarPerm extractEntry nan_object_wrap.h 628 silly gunzTarPerm modified mode [ 'nan_object_wrap.h', 436, 438 ] 629 silly gunzTarPerm extractEntry nan_persistent_12_inl.h 630 silly gunzTarPerm modified mode [ 'nan_persistent_12_inl.h', 436, 438 ] 631 silly gunzTarPerm extractEntry nan_persistent_pre_12_inl.h 632 silly gunzTarPerm modified mode [ 'nan_persistent_pre_12_inl.h', 436, 438 ] 633 silly gunzTarPerm extractEntry nan_string_bytes.h 634 silly gunzTarPerm modified mode [ 'nan_string_bytes.h', 436, 438 ] 635 silly gunzTarPerm extractEntry nan_typedarray_contents.h 636 silly gunzTarPerm modified mode [ 'nan_typedarray_contents.h', 436, 438 ] 637 silly gunzTarPerm extractEntry nan_weak.h 638 silly gunzTarPerm modified mode [ 'nan_weak.h', 436, 438 ] 639 silly gunzTarPerm extractEntry CHANGELOG.md 640 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 436, 438 ] 641 silly gunzTarPerm extractEntry tools/package.json 642 silly gunzTarPerm modified mode [ 'tools/package.json', 436, 438 ] 643 silly gunzTarPerm extractEntry tools/README.md 644 silly gunzTarPerm modified mode [ 'tools/README.md', 436, 438 ] 645 silly gunzTarPerm extractEntry tools/1to2.js 646 silly gunzTarPerm modified mode [ 'tools/1to2.js', 509, 511 ] 647 silly gunzTarPerm extractEntry test/header.js 648 silly gunzTarPerm modified mode [ 'test/header.js', 420, 438 ] 649 silly gunzTarPerm extractEntry test/pack-no-proprietary.js 650 silly gunzTarPerm modified mode [ 'test/pack-no-proprietary.js', 420, 438 ] 651 silly gunzTarPerm extractEntry js/release/nodeback.js 652 silly gunzTarPerm modified mode [ 'js/release/nodeback.js', 436, 438 ] 653 silly gunzTarPerm extractEntry lib/redirect.js 654 silly gunzTarPerm modified mode [ 'lib/redirect.js', 436, 438 ] 655 silly gunzTarPerm extractEntry test/pack.js 656 silly gunzTarPerm modified mode [ 'test/pack.js', 420, 438 ] 657 silly gunzTarPerm extractEntry test/zz-cleanup.js 658 silly gunzTarPerm modified mode [ 'test/zz-cleanup.js', 420, 438 ] 659 silly gunzTarPerm extractEntry test/cb-never-called-1.0.1.tgz 660 silly gunzTarPerm modified mode [ 'test/cb-never-called-1.0.1.tgz', 420, 438 ] 661 silly gunzTarPerm extractEntry test/dir-normalization.tar 662 silly gunzTarPerm modified mode [ 'test/dir-normalization.tar', 420, 438 ] 663 silly gunzTarPerm extractEntry lib/tunnel.js 664 silly gunzTarPerm modified mode [ 'lib/tunnel.js', 436, 438 ] 665 silly gunzTarPerm extractEntry test/fixtures.tgz 666 silly gunzTarPerm modified mode [ 'test/fixtures.tgz', 420, 438 ] 667 silly gunzTarPerm extractEntry js/release/nodeify.js 668 silly gunzTarPerm modified mode [ 'js/release/nodeify.js', 436, 438 ] 669 silly gunzTarPerm extractEntry CONTRIBUTING.md 670 silly gunzTarPerm modified mode [ 'CONTRIBUTING.md', 436, 438 ] 671 silly gunzTarPerm extractEntry .eslintrc 672 silly gunzTarPerm modified mode [ '.eslintrc', 436, 438 ] 673 silly gunzTarPerm extractEntry js/release/promise.js 674 silly gunzTarPerm modified mode [ 'js/release/promise.js', 436, 438 ] 675 silly gunzTarPerm extractEntry js/release/promise_array.js 676 silly gunzTarPerm modified mode [ 'js/release/promise_array.js', 436, 438 ] 677 silly gunzTarPerm extractEntry js/release/es5.js 678 silly gunzTarPerm modified mode [ 'js/release/es5.js', 436, 438 ] 679 http 304 https://registry.npmjs.org/color-string 680 silly get cb [ 304, 680 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 680 silly get via: '1.1 varnish', 680 silly get 'cache-control': 'max-age=300', 680 silly get etag: '"4LQ4H8ANU0KIESMY9BMG9A0NY"', 680 silly get age: '253', 680 silly get connection: 'keep-alive', 680 silly get 'x-served-by': 'cache-lcy1125-LCY', 680 silly get 'x-cache': 'HIT', 680 silly get 'x-cache-hits': '4', 680 silly get 'x-timer': 'S1461836108.971815,VS0,VE0', 680 silly get vary: 'Accept-Encoding' } ] 681 verbose etag https://registry.npmjs.org/color-string from cache 682 verbose get saving color-string to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\color-string\.cache.json 683 http 304 https://registry.npmjs.org/color-convert 684 silly get cb [ 304, 684 silly get { date: 'Thu, 28 Apr 2016 09:35:08 GMT', 684 silly get via: '1.1 varnish', 684 silly get 'cache-control': 'max-age=300', 684 silly get etag: '"1VDNG2OA4IKFKE0S0OXSO1JMS"', 684 silly get age: '265', 684 silly get connection: 'keep-alive', 684 silly get 'x-served-by': 'cache-lcy1133-LCY', 684 silly get 'x-cache': 'HIT', 684 silly get 'x-cache-hits': '5', 684 silly get 'x-timer': 'S1461836108.971319,VS0,VE0', 684 silly get vary: 'Accept-Encoding' } ] 685 verbose etag https://registry.npmjs.org/color-convert from cache 686 verbose get saving color-convert to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\color-convert\.cache.json 687 silly addNameRange number 2 { name: 'color-string', range: '>=0.3.0 <0.4.0', hasData: true } 688 silly addNameRange versions [ 'color-string', 688 silly addNameRange [ '0.1.0', 688 silly addNameRange '0.1.1', 688 silly addNameRange '0.1.2', 688 silly addNameRange '0.1.3', 688 silly addNameRange '0.2.0', 688 silly addNameRange '0.2.1', 688 silly addNameRange '0.2.2', 688 silly addNameRange '0.2.3', 688 silly addNameRange '0.2.4', 688 silly addNameRange '0.3.0', 688 silly addNameRange '0.4.0', 688 silly addNameRange '1.0.0', 688 silly addNameRange '1.0.1', 688 silly addNameRange '1.1.0', 688 silly addNameRange '1.1.1', 688 silly addNameRange '1.2.0' ] ] 689 verbose addNamed color-string@0.3.0 690 silly addNamed semver.valid 0.3.0 691 silly addNamed semver.validRange 0.3.0 692 silly addNameRange number 2 { name: 'color-convert', range: '>=0.5.3 <0.6.0', hasData: true } 693 silly addNameRange versions [ 'color-convert', 693 silly addNameRange [ '0.1.0', 693 silly addNameRange '0.2.0', 693 silly addNameRange '0.2.1', 693 silly addNameRange '0.3.0', 693 silly addNameRange '0.3.1', 693 silly addNameRange '0.3.4', 693 silly addNameRange '0.4.0', 693 silly addNameRange '0.5.0', 693 silly addNameRange '0.5.1', 693 silly addNameRange '0.5.2', 693 silly addNameRange '0.5.3', 693 silly addNameRange '0.6.0', 693 silly addNameRange '0.7.0', 693 silly addNameRange '1.0.0', 693 silly addNameRange '1.1.0', 693 silly addNameRange '1.1.1', 693 silly addNameRange '1.1.2', 693 silly addNameRange '1.2.0', 693 silly addNameRange '1.2.1', 693 silly addNameRange '1.2.2', 693 silly addNameRange '1.3.0', 693 silly addNameRange '1.3.1' ] ] 694 verbose addNamed color-convert@0.5.3 695 silly addNamed semver.valid 0.5.3 696 silly addNamed semver.validRange 0.5.3 697 silly gunzTarPerm extractEntry js/release/promisify.js 698 silly gunzTarPerm modified mode [ 'js/release/promisify.js', 436, 438 ] 699 silly cache afterAdd color-string@0.3.0 700 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color-string\0.3.0\package\package.json not in flight; writing 701 silly cache afterAdd color-convert@0.5.3 702 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color-convert\0.5.3\package\package.json not in flight; writing 703 info preinstall semver@5.1.0 704 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color-string\0.3.0\package\package.json written 705 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color-convert\0.5.3\package\package.json written 706 silly install resolved [ { name: 'color-string', 706 silly install resolved description: 'Parser and generator for CSS color strings', 706 silly install resolved version: '0.3.0', 706 silly install resolved author: { name: 'Heather Arthur', email: 'fayearthur@gmail.com' }, 706 silly install resolved contributors: [ [Object], [Object] ], 706 silly install resolved repository: 706 silly install resolved { type: 'git', 706 silly install resolved url: 'http://github.com/harthur/color-string.git' }, 706 silly install resolved scripts: { test: 'node test/basic.js' }, 706 silly install resolved license: 'MIT', 706 silly install resolved main: './color-string', 706 silly install resolved dependencies: { 'color-name': '^1.0.0' }, 706 silly install resolved devDependencies: {}, 706 silly install resolved keywords: [ 'color', 'colour', 'rgb', 'css' ], 706 silly install resolved readme: '# color-string\ncolor-string is a library for parsing and generating CSS color strings.\n\n#### parsing:\n```javascript\ncolorString.getRgb("#FFF") // [255, 255, 255]\ncolorString.getRgb("blue") // [0, 0, 255]\n\ncolorString.getRgba("rgba(200, 60, 60, 0.3)") // [200, 60, 60, 0.3]\ncolorString.getRgba("rgb(200, 200, 200)") // [200, 200, 200, 1]\n\ncolorString.getHsl("hsl(360, 100%, 50%)") // [360, 100, 50]\ncolorString.getHsla("hsla(360, 60%, 50%, 0.4)") // [360, 60, 50, 0.4]\n\ncolorString.getAlpha("rgba(200, 0, 12, 0.6)") // 0.6\n```\n#### generating:\n```javascript\ncolorString.hexString([255, 255, 255]) // "#FFFFFF"\ncolorString.rgbString([255, 255, 255]) // "rgb(255, 255, 255)"\ncolorString.rgbString([0, 0, 255, 0.4]) // "rgba(0, 0, 255, 0.4)"\ncolorString.rgbString([0, 0, 255], 0.4) // "rgba(0, 0, 255, 0.4)"\ncolorString.percentString([0, 0, 255]) // "rgb(0%, 0%, 100%)"\ncolorString.keyword([255, 255, 0]) // "yellow"\ncolorString.hslString([360, 100, 100]) // "hsl(360, 100%, 100%)"\n```\n\n# Install\n\n### node\nFor [node](http://nodejs.org) with [npm](http://npmjs.org):\n\n\tnpm install color-string\n\n### browser\nDownload the latest [color-string.js](https://github.com/harthur/color-string/tree/gh-pages). The `colorString` object is exported.\n', 706 silly install resolved readmeFilename: 'README.md', 706 silly install resolved bugs: { url: 'https://github.com/harthur/color-string/issues' }, 706 silly install resolved homepage: 'https://github.com/harthur/color-string', 706 silly install resolved _id: 'color-string@0.3.0', 706 silly install resolved _shasum: '27d46fb67025c5c2fa25993bfbf579e47841b991', 706 silly install resolved _resolved: 'https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz', 706 silly install resolved _from: 'color-string@>=0.3.0 <0.4.0' }, 706 silly install resolved { name: 'color-convert', 706 silly install resolved description: 'Plain color conversion functions', 706 silly install resolved version: '0.5.3', 706 silly install resolved author: { name: 'Heather Arthur', email: 'fayearthur@gmail.com' }, 706 silly install resolved repository: 706 silly install resolved { type: 'git', 706 silly install resolved url: 'http://github.com/harthur/color-convert.git' }, 706 silly install resolved devDependencies: {}, 706 silly install resolved scripts: { test: 'node test/basic.js' }, 706 silly install resolved keywords: [ 'color', 'colour', 'rgb' ], 706 silly install resolved readme: '# color-convert [![Build Status](https://travis-ci.org/harthur/color-convert.svg?branch=master)](https://travis-ci.org/harthur/color-convert)\nColor-convert is a color conversion library for JavaScript and node. It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, and CSS keywords:\n\n```js\nvar converter = require("color-convert")();\n\nconverter.rgb(140, 200, 100).hsl() // [96, 48, 59]\n\nconverter.keyword("blue").rgb() // [0, 0, 255]\n```\n\n# Install\n\n```console\nnpm install color-convert\n```\n\n# API\n\nColor-convert exports a converter object with getter/setter methods for each color space. It caches conversions:\n\n```js\nvar converter = require("color-convert")();\n\nconverter.rgb(140, 200, 100).hsl() // [96, 48, 59]\n\nconverter.rgb([140, 200, 100]) // args can be an array\n```\n\n### Plain functions\nGet direct conversion functions with no fancy objects:\n\n```js\nrequire("color-convert").rgb2hsl([140, 200, 100]); // [96, 48, 59]\n```\n\n### Unrounded\nTo get the unrounded conversion, append `Raw` to the function name:\n\n```js\nconvert.rgb2hslRaw([140, 200, 100]); // [95.99999999999999, 47.619047619047606, 58.82352941176471]\n```\n\n### Hash\nThere\'s also a hash of the conversion functions keyed first by the "from" color space, then by the "to" color space:\n\n```js\nconvert["hsl"]["hsv"]([160, 0, 20]) == convert.hsl2hsv([160, 0, 20])\n```\n\n### Other spaces\n\nThere are some conversions from rgb (sRGB) to XYZ and LAB too, available as `rgb2xyz()`, `rgb2lab()`, `xyz2rgb()`, and `xyz2lab()`.\n\n# Contribute\n\nPlease fork, add conversions, figure out color profile stuff for XYZ, LAB, etc. This is meant to be a basic library that can be used by other libraries to wrap color calculations in some cool way.\n', 706 silly install resolved readmeFilename: 'README.md', 706 silly install resolved bugs: { url: 'https://github.com/harthur/color-convert/issues' }, 706 silly install resolved homepage: 'https://github.com/harthur/color-convert', 706 silly install resolved _id: 'color-convert@0.5.3', 706 silly install resolved _shasum: 'bdb6c69ce660fadffe0b0007cc447e1b9f7282bd', 706 silly install resolved _resolved: 'https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz', 706 silly install resolved _from: 'color-convert@>=0.5.3 <0.6.0' } ] 707 info install color-string@0.3.0 into E:\cartridge-images\node_modules\sharp\node_modules\color 708 info install color-convert@0.5.3 into E:\cartridge-images\node_modules\sharp\node_modules\color 709 info installOne color-string@0.3.0 710 verbose installOne of color-string to E:\cartridge-images\node_modules\sharp\node_modules\color not in flight; installing 711 info installOne color-convert@0.5.3 712 verbose installOne of color-convert to E:\cartridge-images\node_modules\sharp\node_modules\color not in flight; installing 713 silly install resolved [] 714 verbose about to build E:\cartridge-images\node_modules\sharp\node_modules\semver 715 info build E:\cartridge-images\node_modules\sharp\node_modules\semver 716 verbose linkStuff [ false, 716 verbose linkStuff false, 716 verbose linkStuff false, 716 verbose linkStuff 'E:\\cartridge-images\\node_modules\\sharp\\node_modules' ] 717 info linkStuff semver@5.1.0 718 verbose linkBins semver@5.1.0 719 verbose link bins [ { semver: './bin/semver' }, 719 verbose link bins 'E:\\cartridge-images\\node_modules\\sharp\\node_modules\\.bin', 719 verbose link bins false ] 720 verbose linkMans semver@5.1.0 721 verbose rebuildBundles semver@5.1.0 722 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\color-convert-b744781b1b8b9f4c.lock for E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 723 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\color-string-4c4c18756cd6fae6.lock for E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string 724 silly install write writing color-convert 0.5.3 to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 725 silly cache addNamed cb color-convert@0.5.3 726 verbose unbuild node_modules\sharp\node_modules\color\node_modules\color-convert 727 silly install write writing color-string 0.3.0 to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string 728 silly cache addNamed cb color-string@0.3.0 729 verbose unbuild node_modules\sharp\node_modules\color\node_modules\color-string 730 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert is being purged from base E:\cartridge-images 731 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 732 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string is being purged from base E:\cartridge-images 733 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string 734 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\color-convert\0.5.3\package.tgz 735 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 736 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert is being purged 737 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 738 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\color-string\0.3.0\package.tgz 739 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string 740 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string is being purged 741 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string 742 silly gunzTarPerm modes [ '777', '666' ] 743 silly gunzTarPerm modes [ '777', '666' ] 744 silly gunzTarPerm extractEntry js/release/errors.js 745 silly gunzTarPerm modified mode [ 'js/release/errors.js', 436, 438 ] 746 info install semver@5.1.0 747 silly gunzTarPerm extractEntry package.json 748 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 749 info postinstall semver@5.1.0 750 silly gunzTarPerm extractEntry package.json 751 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 752 verbose unlock done using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\semver-6b3a6f7a189ce91a.lock for E:\cartridge-images\node_modules\sharp\node_modules\semver 753 silly gunzTarPerm extractEntry README.md 754 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 755 silly gunzTarPerm extractEntry LICENSE 756 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 757 silly gunzTarPerm extractEntry README.md 758 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 759 silly gunzTarPerm extractEntry LICENSE 760 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 761 silly gunzTarPerm extractEntry conversions.js 762 silly gunzTarPerm modified mode [ 'conversions.js', 420, 438 ] 763 silly gunzTarPerm extractEntry index.js 764 silly gunzTarPerm modified mode [ 'index.js', 420, 438 ] 765 silly gunzTarPerm extractEntry .travis.yml 766 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ] 767 silly gunzTarPerm extractEntry CHANGELOG.md 768 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 420, 438 ] 769 silly gunzTarPerm extractEntry component.json 770 silly gunzTarPerm modified mode [ 'component.json', 420, 438 ] 771 silly gunzTarPerm extractEntry test/basic.js 772 silly gunzTarPerm modified mode [ 'test/basic.js', 420, 438 ] 773 silly gunzTarPerm extractEntry test/speed.js 774 silly gunzTarPerm modified mode [ 'test/speed.js', 420, 438 ] 775 silly gunzTarPerm extractEntry color-string.js 776 silly gunzTarPerm modified mode [ 'color-string.js', 420, 438 ] 777 silly gunzTarPerm extractEntry CHANGELOG.md 778 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 420, 438 ] 779 silly gunzTarPerm extractEntry js/release/props.js 780 silly gunzTarPerm modified mode [ 'js/release/props.js', 436, 438 ] 781 silly gunzTarPerm extractEntry test/basic.js 782 silly gunzTarPerm modified mode [ 'test/basic.js', 420, 438 ] 783 silly gunzTarPerm extractEntry js/release/each.js 784 silly gunzTarPerm modified mode [ 'js/release/each.js', 436, 438 ] 785 silly gunzTarPerm extractEntry js/release/queue.js 786 silly gunzTarPerm modified mode [ 'js/release/queue.js', 436, 438 ] 787 silly gunzTarPerm extractEntry js/release/direct_resolve.js 788 silly gunzTarPerm modified mode [ 'js/release/direct_resolve.js', 436, 438 ] 789 silly gunzTarPerm extractEntry js/release/race.js 790 silly gunzTarPerm modified mode [ 'js/release/race.js', 436, 438 ] 791 info preinstall color-string@0.3.0 792 silly prepareForInstallMany adding color-name@^1.0.0 from color-string dependencies 793 silly gunzTarPerm extractEntry js/release/debuggability.js 794 silly gunzTarPerm modified mode [ 'js/release/debuggability.js', 436, 438 ] 795 silly cache add args [ 'color-name@^1.0.0', null ] 796 verbose cache add spec color-name@^1.0.0 797 silly cache add parsed spec { raw: 'color-name@^1.0.0', 797 silly cache add scope: null, 797 silly cache add name: 'color-name', 797 silly cache add rawSpec: '^1.0.0', 797 silly cache add spec: '>=1.0.0 <2.0.0', 797 silly cache add type: 'range' } 798 verbose addNamed color-name@>=1.0.0 <2.0.0 799 silly addNamed semver.valid null 800 silly addNamed semver.validRange >=1.0.0 <2.0.0 801 silly addNameRange { name: 'color-name', range: '>=1.0.0 <2.0.0', hasData: false } 802 silly mapToRegistry name color-name 803 silly mapToRegistry using default registry 804 silly mapToRegistry registry https://registry.npmjs.org/ 805 silly mapToRegistry uri https://registry.npmjs.org/color-name 806 verbose addNameRange registry:https://registry.npmjs.org/color-name not in flight; fetching 807 verbose request uri https://registry.npmjs.org/color-name 808 verbose request no auth needed 809 info attempt registry request try #1 at 10:35:09 AM 810 verbose etag "9XAYPUAP978784IWZSSO4BOH6" 811 http request GET https://registry.npmjs.org/color-name 812 silly gunzTarPerm extractEntry js/release/reduce.js 813 silly gunzTarPerm modified mode [ 'js/release/reduce.js', 436, 438 ] 814 silly gunzTarPerm extractEntry js/release/context.js 815 silly gunzTarPerm modified mode [ 'js/release/context.js', 436, 438 ] 816 info preinstall color-convert@0.5.3 817 silly install resolved [] 818 verbose about to build E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 819 info build E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 820 verbose linkStuff [ false, 820 verbose linkStuff false, 820 verbose linkStuff false, 820 verbose linkStuff 'E:\\cartridge-images\\node_modules\\sharp\\node_modules\\color\\node_modules' ] 821 info linkStuff color-convert@0.5.3 822 verbose linkBins color-convert@0.5.3 823 verbose linkMans color-convert@0.5.3 824 verbose rebuildBundles color-convert@0.5.3 825 info install color-convert@0.5.3 826 info postinstall color-convert@0.5.3 827 verbose unlock done using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\color-convert-b744781b1b8b9f4c.lock for E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-convert 828 silly gunzTarPerm extractEntry js/release/schedule.js 829 silly gunzTarPerm modified mode [ 'js/release/schedule.js', 436, 438 ] 830 silly gunzTarPerm extractEntry js/release/catch_filter.js 831 silly gunzTarPerm modified mode [ 'js/release/catch_filter.js', 436, 438 ] 832 info preinstall request@2.72.0 833 silly prepareForInstallMany adding aws-sign2@~0.6.0 from request dependencies 834 silly prepareForInstallMany adding aws4@^1.2.1 from request dependencies 835 silly prepareForInstallMany adding bl@~1.1.2 from request dependencies 836 silly prepareForInstallMany adding caseless@~0.11.0 from request dependencies 837 silly prepareForInstallMany adding combined-stream@~1.0.5 from request dependencies 838 silly prepareForInstallMany adding extend@~3.0.0 from request dependencies 839 silly prepareForInstallMany adding forever-agent@~0.6.1 from request dependencies 840 silly prepareForInstallMany adding form-data@~1.0.0-rc3 from request dependencies 841 silly prepareForInstallMany adding har-validator@~2.0.6 from request dependencies 842 silly prepareForInstallMany adding hawk@~3.1.3 from request dependencies 843 silly prepareForInstallMany adding http-signature@~1.1.0 from request dependencies 844 silly prepareForInstallMany adding is-typedarray@~1.0.0 from request dependencies 845 silly prepareForInstallMany adding isstream@~0.1.2 from request dependencies 846 silly prepareForInstallMany adding json-stringify-safe@~5.0.1 from request dependencies 847 silly prepareForInstallMany adding mime-types@~2.1.7 from request dependencies 848 silly prepareForInstallMany adding node-uuid@~1.4.7 from request dependencies 849 silly prepareForInstallMany adding oauth-sign@~0.8.1 from request dependencies 850 silly prepareForInstallMany adding qs@~6.1.0 from request dependencies 851 silly prepareForInstallMany adding stringstream@~0.0.4 from request dependencies 852 silly prepareForInstallMany adding tough-cookie@~2.2.0 from request dependencies 853 silly prepareForInstallMany adding tunnel-agent@~0.4.1 from request dependencies 854 silly cache add args [ 'bl@~1.1.2', null ] 855 verbose cache add spec bl@~1.1.2 856 silly cache add parsed spec { raw: 'bl@~1.1.2', 856 silly cache add scope: null, 856 silly cache add name: 'bl', 856 silly cache add rawSpec: '~1.1.2', 856 silly cache add spec: '>=1.1.2 <1.2.0', 856 silly cache add type: 'range' } 857 verbose addNamed bl@>=1.1.2 <1.2.0 858 silly addNamed semver.valid null 859 silly addNamed semver.validRange >=1.1.2 <1.2.0 860 silly addNameRange { name: 'bl', range: '>=1.1.2 <1.2.0', hasData: false } 861 silly mapToRegistry name bl 862 silly mapToRegistry using default registry 863 silly mapToRegistry registry https://registry.npmjs.org/ 864 silly mapToRegistry uri https://registry.npmjs.org/bl 865 verbose addNameRange registry:https://registry.npmjs.org/bl not in flight; fetching 866 silly cache add args [ 'caseless@~0.11.0', null ] 867 verbose cache add spec caseless@~0.11.0 868 silly cache add parsed spec { raw: 'caseless@~0.11.0', 868 silly cache add scope: null, 868 silly cache add name: 'caseless', 868 silly cache add rawSpec: '~0.11.0', 868 silly cache add spec: '>=0.11.0 <0.12.0', 868 silly cache add type: 'range' } 869 verbose addNamed caseless@>=0.11.0 <0.12.0 870 silly addNamed semver.valid null 871 silly addNamed semver.validRange >=0.11.0 <0.12.0 872 silly addNameRange { name: 'caseless', range: '>=0.11.0 <0.12.0', hasData: false } 873 silly mapToRegistry name caseless 874 silly mapToRegistry using default registry 875 silly mapToRegistry registry https://registry.npmjs.org/ 876 silly mapToRegistry uri https://registry.npmjs.org/caseless 877 verbose addNameRange registry:https://registry.npmjs.org/caseless not in flight; fetching 878 silly cache add args [ 'combined-stream@~1.0.5', null ] 879 verbose cache add spec combined-stream@~1.0.5 880 silly cache add parsed spec { raw: 'combined-stream@~1.0.5', 880 silly cache add scope: null, 880 silly cache add name: 'combined-stream', 880 silly cache add rawSpec: '~1.0.5', 880 silly cache add spec: '>=1.0.5 <1.1.0', 880 silly cache add type: 'range' } 881 verbose addNamed combined-stream@>=1.0.5 <1.1.0 882 silly addNamed semver.valid null 883 silly addNamed semver.validRange >=1.0.5 <1.1.0 884 silly addNameRange { name: 'combined-stream', 884 silly addNameRange range: '>=1.0.5 <1.1.0', 884 silly addNameRange hasData: false } 885 silly mapToRegistry name combined-stream 886 silly mapToRegistry using default registry 887 silly mapToRegistry registry https://registry.npmjs.org/ 888 silly mapToRegistry uri https://registry.npmjs.org/combined-stream 889 verbose addNameRange registry:https://registry.npmjs.org/combined-stream not in flight; fetching 890 silly cache add args [ 'extend@~3.0.0', null ] 891 verbose cache add spec extend@~3.0.0 892 silly cache add parsed spec { raw: 'extend@~3.0.0', 892 silly cache add scope: null, 892 silly cache add name: 'extend', 892 silly cache add rawSpec: '~3.0.0', 892 silly cache add spec: '>=3.0.0 <3.1.0', 892 silly cache add type: 'range' } 893 verbose addNamed extend@>=3.0.0 <3.1.0 894 silly addNamed semver.valid null 895 silly addNamed semver.validRange >=3.0.0 <3.1.0 896 silly addNameRange { name: 'extend', range: '>=3.0.0 <3.1.0', hasData: false } 897 silly mapToRegistry name extend 898 silly mapToRegistry using default registry 899 silly mapToRegistry registry https://registry.npmjs.org/ 900 silly mapToRegistry uri https://registry.npmjs.org/extend 901 verbose addNameRange registry:https://registry.npmjs.org/extend not in flight; fetching 902 silly cache add args [ 'forever-agent@~0.6.1', null ] 903 verbose cache add spec forever-agent@~0.6.1 904 silly cache add parsed spec { raw: 'forever-agent@~0.6.1', 904 silly cache add scope: null, 904 silly cache add name: 'forever-agent', 904 silly cache add rawSpec: '~0.6.1', 904 silly cache add spec: '>=0.6.1 <0.7.0', 904 silly cache add type: 'range' } 905 verbose addNamed forever-agent@>=0.6.1 <0.7.0 906 silly addNamed semver.valid null 907 silly addNamed semver.validRange >=0.6.1 <0.7.0 908 silly addNameRange { name: 'forever-agent', 908 silly addNameRange range: '>=0.6.1 <0.7.0', 908 silly addNameRange hasData: false } 909 silly mapToRegistry name forever-agent 910 silly mapToRegistry using default registry 911 silly mapToRegistry registry https://registry.npmjs.org/ 912 silly mapToRegistry uri https://registry.npmjs.org/forever-agent 913 verbose addNameRange registry:https://registry.npmjs.org/forever-agent not in flight; fetching 914 silly cache add args [ 'form-data@~1.0.0-rc3', null ] 915 verbose cache add spec form-data@~1.0.0-rc3 916 silly cache add parsed spec { raw: 'form-data@~1.0.0-rc3', 916 silly cache add scope: null, 916 silly cache add name: 'form-data', 916 silly cache add rawSpec: '~1.0.0-rc3', 916 silly cache add spec: '>=1.0.0-rc3 <1.1.0', 916 silly cache add type: 'range' } 917 verbose addNamed form-data@>=1.0.0-rc3 <1.1.0 918 silly addNamed semver.valid null 919 silly addNamed semver.validRange >=1.0.0-rc3 <1.1.0 920 silly addNameRange { name: 'form-data', 920 silly addNameRange range: '>=1.0.0-rc3 <1.1.0', 920 silly addNameRange hasData: false } 921 silly mapToRegistry name form-data 922 silly mapToRegistry using default registry 923 silly mapToRegistry registry https://registry.npmjs.org/ 924 silly mapToRegistry uri https://registry.npmjs.org/form-data 925 verbose addNameRange registry:https://registry.npmjs.org/form-data not in flight; fetching 926 silly cache add args [ 'har-validator@~2.0.6', null ] 927 verbose cache add spec har-validator@~2.0.6 928 silly cache add parsed spec { raw: 'har-validator@~2.0.6', 928 silly cache add scope: null, 928 silly cache add name: 'har-validator', 928 silly cache add rawSpec: '~2.0.6', 928 silly cache add spec: '>=2.0.6 <2.1.0', 928 silly cache add type: 'range' } 929 verbose addNamed har-validator@>=2.0.6 <2.1.0 930 silly addNamed semver.valid null 931 silly addNamed semver.validRange >=2.0.6 <2.1.0 932 silly addNameRange { name: 'har-validator', 932 silly addNameRange range: '>=2.0.6 <2.1.0', 932 silly addNameRange hasData: false } 933 silly mapToRegistry name har-validator 934 silly mapToRegistry using default registry 935 silly mapToRegistry registry https://registry.npmjs.org/ 936 silly mapToRegistry uri https://registry.npmjs.org/har-validator 937 verbose addNameRange registry:https://registry.npmjs.org/har-validator not in flight; fetching 938 silly cache add args [ 'hawk@~3.1.3', null ] 939 verbose cache add spec hawk@~3.1.3 940 silly cache add parsed spec { raw: 'hawk@~3.1.3', 940 silly cache add scope: null, 940 silly cache add name: 'hawk', 940 silly cache add rawSpec: '~3.1.3', 940 silly cache add spec: '>=3.1.3 <3.2.0', 940 silly cache add type: 'range' } 941 verbose addNamed hawk@>=3.1.3 <3.2.0 942 silly addNamed semver.valid null 943 silly addNamed semver.validRange >=3.1.3 <3.2.0 944 silly addNameRange { name: 'hawk', range: '>=3.1.3 <3.2.0', hasData: false } 945 silly mapToRegistry name hawk 946 silly mapToRegistry using default registry 947 silly mapToRegistry registry https://registry.npmjs.org/ 948 silly mapToRegistry uri https://registry.npmjs.org/hawk 949 verbose addNameRange registry:https://registry.npmjs.org/hawk not in flight; fetching 950 silly cache add args [ 'http-signature@~1.1.0', null ] 951 verbose cache add spec http-signature@~1.1.0 952 silly cache add parsed spec { raw: 'http-signature@~1.1.0', 952 silly cache add scope: null, 952 silly cache add name: 'http-signature', 952 silly cache add rawSpec: '~1.1.0', 952 silly cache add spec: '>=1.1.0 <1.2.0', 952 silly cache add type: 'range' } 953 verbose addNamed http-signature@>=1.1.0 <1.2.0 954 silly addNamed semver.valid null 955 silly addNamed semver.validRange >=1.1.0 <1.2.0 956 silly addNameRange { name: 'http-signature', 956 silly addNameRange range: '>=1.1.0 <1.2.0', 956 silly addNameRange hasData: false } 957 silly mapToRegistry name http-signature 958 silly mapToRegistry using default registry 959 silly mapToRegistry registry https://registry.npmjs.org/ 960 silly mapToRegistry uri https://registry.npmjs.org/http-signature 961 verbose addNameRange registry:https://registry.npmjs.org/http-signature not in flight; fetching 962 silly cache add args [ 'is-typedarray@~1.0.0', null ] 963 verbose cache add spec is-typedarray@~1.0.0 964 silly cache add parsed spec { raw: 'is-typedarray@~1.0.0', 964 silly cache add scope: null, 964 silly cache add name: 'is-typedarray', 964 silly cache add rawSpec: '~1.0.0', 964 silly cache add spec: '>=1.0.0 <1.1.0', 964 silly cache add type: 'range' } 965 verbose addNamed is-typedarray@>=1.0.0 <1.1.0 966 silly addNamed semver.valid null 967 silly addNamed semver.validRange >=1.0.0 <1.1.0 968 silly addNameRange { name: 'is-typedarray', 968 silly addNameRange range: '>=1.0.0 <1.1.0', 968 silly addNameRange hasData: false } 969 silly mapToRegistry name is-typedarray 970 silly mapToRegistry using default registry 971 silly mapToRegistry registry https://registry.npmjs.org/ 972 silly mapToRegistry uri https://registry.npmjs.org/is-typedarray 973 verbose addNameRange registry:https://registry.npmjs.org/is-typedarray not in flight; fetching 974 silly cache add args [ 'isstream@~0.1.2', null ] 975 verbose cache add spec isstream@~0.1.2 976 silly cache add parsed spec { raw: 'isstream@~0.1.2', 976 silly cache add scope: null, 976 silly cache add name: 'isstream', 976 silly cache add rawSpec: '~0.1.2', 976 silly cache add spec: '>=0.1.2 <0.2.0', 976 silly cache add type: 'range' } 977 verbose addNamed isstream@>=0.1.2 <0.2.0 978 silly addNamed semver.valid null 979 silly addNamed semver.validRange >=0.1.2 <0.2.0 980 silly addNameRange { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: false } 981 silly mapToRegistry name isstream 982 silly mapToRegistry using default registry 983 silly mapToRegistry registry https://registry.npmjs.org/ 984 silly mapToRegistry uri https://registry.npmjs.org/isstream 985 verbose addNameRange registry:https://registry.npmjs.org/isstream not in flight; fetching 986 silly cache add args [ 'json-stringify-safe@~5.0.1', null ] 987 verbose cache add spec json-stringify-safe@~5.0.1 988 silly cache add parsed spec { raw: 'json-stringify-safe@~5.0.1', 988 silly cache add scope: null, 988 silly cache add name: 'json-stringify-safe', 988 silly cache add rawSpec: '~5.0.1', 988 silly cache add spec: '>=5.0.1 <5.1.0', 988 silly cache add type: 'range' } 989 verbose addNamed json-stringify-safe@>=5.0.1 <5.1.0 990 silly addNamed semver.valid null 991 silly addNamed semver.validRange >=5.0.1 <5.1.0 992 silly addNameRange { name: 'json-stringify-safe', 992 silly addNameRange range: '>=5.0.1 <5.1.0', 992 silly addNameRange hasData: false } 993 silly mapToRegistry name json-stringify-safe 994 silly mapToRegistry using default registry 995 silly mapToRegistry registry https://registry.npmjs.org/ 996 silly mapToRegistry uri https://registry.npmjs.org/json-stringify-safe 997 verbose addNameRange registry:https://registry.npmjs.org/json-stringify-safe not in flight; fetching 998 silly cache add args [ 'mime-types@~2.1.7', null ] 999 verbose cache add spec mime-types@~2.1.7 1000 silly cache add parsed spec { raw: 'mime-types@~2.1.7', 1000 silly cache add scope: null, 1000 silly cache add name: 'mime-types', 1000 silly cache add rawSpec: '~2.1.7', 1000 silly cache add spec: '>=2.1.7 <2.2.0', 1000 silly cache add type: 'range' } 1001 verbose addNamed mime-types@>=2.1.7 <2.2.0 1002 silly addNamed semver.valid null 1003 silly addNamed semver.validRange >=2.1.7 <2.2.0 1004 silly addNameRange { name: 'mime-types', range: '>=2.1.7 <2.2.0', hasData: false } 1005 silly mapToRegistry name mime-types 1006 silly mapToRegistry using default registry 1007 silly mapToRegistry registry https://registry.npmjs.org/ 1008 silly mapToRegistry uri https://registry.npmjs.org/mime-types 1009 verbose addNameRange registry:https://registry.npmjs.org/mime-types not in flight; fetching 1010 silly cache add args [ 'node-uuid@~1.4.7', null ] 1011 verbose cache add spec node-uuid@~1.4.7 1012 silly cache add parsed spec { raw: 'node-uuid@~1.4.7', 1012 silly cache add scope: null, 1012 silly cache add name: 'node-uuid', 1012 silly cache add rawSpec: '~1.4.7', 1012 silly cache add spec: '>=1.4.7 <1.5.0', 1012 silly cache add type: 'range' } 1013 verbose addNamed node-uuid@>=1.4.7 <1.5.0 1014 silly addNamed semver.valid null 1015 silly addNamed semver.validRange >=1.4.7 <1.5.0 1016 silly addNameRange { name: 'node-uuid', range: '>=1.4.7 <1.5.0', hasData: false } 1017 silly mapToRegistry name node-uuid 1018 silly mapToRegistry using default registry 1019 silly mapToRegistry registry https://registry.npmjs.org/ 1020 silly mapToRegistry uri https://registry.npmjs.org/node-uuid 1021 verbose addNameRange registry:https://registry.npmjs.org/node-uuid not in flight; fetching 1022 silly cache add args [ 'oauth-sign@~0.8.1', null ] 1023 verbose cache add spec oauth-sign@~0.8.1 1024 silly cache add parsed spec { raw: 'oauth-sign@~0.8.1', 1024 silly cache add scope: null, 1024 silly cache add name: 'oauth-sign', 1024 silly cache add rawSpec: '~0.8.1', 1024 silly cache add spec: '>=0.8.1 <0.9.0', 1024 silly cache add type: 'range' } 1025 verbose addNamed oauth-sign@>=0.8.1 <0.9.0 1026 silly addNamed semver.valid null 1027 silly addNamed semver.validRange >=0.8.1 <0.9.0 1028 silly addNameRange { name: 'oauth-sign', range: '>=0.8.1 <0.9.0', hasData: false } 1029 silly mapToRegistry name oauth-sign 1030 silly mapToRegistry using default registry 1031 silly mapToRegistry registry https://registry.npmjs.org/ 1032 silly mapToRegistry uri https://registry.npmjs.org/oauth-sign 1033 verbose addNameRange registry:https://registry.npmjs.org/oauth-sign not in flight; fetching 1034 silly cache add args [ 'qs@~6.1.0', null ] 1035 verbose cache add spec qs@~6.1.0 1036 silly cache add parsed spec { raw: 'qs@~6.1.0', 1036 silly cache add scope: null, 1036 silly cache add name: 'qs', 1036 silly cache add rawSpec: '~6.1.0', 1036 silly cache add spec: '>=6.1.0 <6.2.0', 1036 silly cache add type: 'range' } 1037 verbose addNamed qs@>=6.1.0 <6.2.0 1038 silly addNamed semver.valid null 1039 silly addNamed semver.validRange >=6.1.0 <6.2.0 1040 silly addNameRange { name: 'qs', range: '>=6.1.0 <6.2.0', hasData: false } 1041 silly mapToRegistry name qs 1042 silly mapToRegistry using default registry 1043 silly mapToRegistry registry https://registry.npmjs.org/ 1044 silly mapToRegistry uri https://registry.npmjs.org/qs 1045 verbose addNameRange registry:https://registry.npmjs.org/qs not in flight; fetching 1046 silly cache add args [ 'stringstream@~0.0.4', null ] 1047 verbose cache add spec stringstream@~0.0.4 1048 silly cache add parsed spec { raw: 'stringstream@~0.0.4', 1048 silly cache add scope: null, 1048 silly cache add name: 'stringstream', 1048 silly cache add rawSpec: '~0.0.4', 1048 silly cache add spec: '>=0.0.4 <0.1.0', 1048 silly cache add type: 'range' } 1049 verbose addNamed stringstream@>=0.0.4 <0.1.0 1050 silly addNamed semver.valid null 1051 silly addNamed semver.validRange >=0.0.4 <0.1.0 1052 silly addNameRange { name: 'stringstream', range: '>=0.0.4 <0.1.0', hasData: false } 1053 silly mapToRegistry name stringstream 1054 silly mapToRegistry using default registry 1055 silly mapToRegistry registry https://registry.npmjs.org/ 1056 silly mapToRegistry uri https://registry.npmjs.org/stringstream 1057 verbose addNameRange registry:https://registry.npmjs.org/stringstream not in flight; fetching 1058 silly cache add args [ 'tough-cookie@~2.2.0', null ] 1059 verbose cache add spec tough-cookie@~2.2.0 1060 silly cache add parsed spec { raw: 'tough-cookie@~2.2.0', 1060 silly cache add scope: null, 1060 silly cache add name: 'tough-cookie', 1060 silly cache add rawSpec: '~2.2.0', 1060 silly cache add spec: '>=2.2.0 <2.3.0', 1060 silly cache add type: 'range' } 1061 verbose addNamed tough-cookie@>=2.2.0 <2.3.0 1062 silly addNamed semver.valid null 1063 silly addNamed semver.validRange >=2.2.0 <2.3.0 1064 silly addNameRange { name: 'tough-cookie', range: '>=2.2.0 <2.3.0', hasData: false } 1065 silly mapToRegistry name tough-cookie 1066 silly mapToRegistry using default registry 1067 silly mapToRegistry registry https://registry.npmjs.org/ 1068 silly mapToRegistry uri https://registry.npmjs.org/tough-cookie 1069 verbose addNameRange registry:https://registry.npmjs.org/tough-cookie not in flight; fetching 1070 silly cache add args [ 'tunnel-agent@~0.4.1', null ] 1071 verbose cache add spec tunnel-agent@~0.4.1 1072 silly cache add parsed spec { raw: 'tunnel-agent@~0.4.1', 1072 silly cache add scope: null, 1072 silly cache add name: 'tunnel-agent', 1072 silly cache add rawSpec: '~0.4.1', 1072 silly cache add spec: '>=0.4.1 <0.5.0', 1072 silly cache add type: 'range' } 1073 verbose addNamed tunnel-agent@>=0.4.1 <0.5.0 1074 silly addNamed semver.valid null 1075 silly addNamed semver.validRange >=0.4.1 <0.5.0 1076 silly addNameRange { name: 'tunnel-agent', range: '>=0.4.1 <0.5.0', hasData: false } 1077 silly mapToRegistry name tunnel-agent 1078 silly mapToRegistry using default registry 1079 silly mapToRegistry registry https://registry.npmjs.org/ 1080 silly mapToRegistry uri https://registry.npmjs.org/tunnel-agent 1081 verbose addNameRange registry:https://registry.npmjs.org/tunnel-agent not in flight; fetching 1082 silly cache add args [ 'aws-sign2@~0.6.0', null ] 1083 verbose cache add spec aws-sign2@~0.6.0 1084 silly cache add parsed spec { raw: 'aws-sign2@~0.6.0', 1084 silly cache add scope: null, 1084 silly cache add name: 'aws-sign2', 1084 silly cache add rawSpec: '~0.6.0', 1084 silly cache add spec: '>=0.6.0 <0.7.0', 1084 silly cache add type: 'range' } 1085 verbose addNamed aws-sign2@>=0.6.0 <0.7.0 1086 silly addNamed semver.valid null 1087 silly addNamed semver.validRange >=0.6.0 <0.7.0 1088 silly addNameRange { name: 'aws-sign2', range: '>=0.6.0 <0.7.0', hasData: false } 1089 silly mapToRegistry name aws-sign2 1090 silly mapToRegistry using default registry 1091 silly mapToRegistry registry https://registry.npmjs.org/ 1092 silly mapToRegistry uri https://registry.npmjs.org/aws-sign2 1093 verbose addNameRange registry:https://registry.npmjs.org/aws-sign2 not in flight; fetching 1094 silly cache add args [ 'aws4@^1.2.1', null ] 1095 verbose cache add spec aws4@^1.2.1 1096 silly cache add parsed spec { raw: 'aws4@^1.2.1', 1096 silly cache add scope: null, 1096 silly cache add name: 'aws4', 1096 silly cache add rawSpec: '^1.2.1', 1096 silly cache add spec: '>=1.2.1 <2.0.0', 1096 silly cache add type: 'range' } 1097 verbose addNamed aws4@>=1.2.1 <2.0.0 1098 silly addNamed semver.valid null 1099 silly addNamed semver.validRange >=1.2.1 <2.0.0 1100 silly addNameRange { name: 'aws4', range: '>=1.2.1 <2.0.0', hasData: false } 1101 silly mapToRegistry name aws4 1102 silly mapToRegistry using default registry 1103 silly mapToRegistry registry https://registry.npmjs.org/ 1104 silly mapToRegistry uri https://registry.npmjs.org/aws4 1105 verbose addNameRange registry:https://registry.npmjs.org/aws4 not in flight; fetching 1106 verbose request uri https://registry.npmjs.org/caseless 1107 verbose request no auth needed 1108 info attempt registry request try #1 at 10:35:09 AM 1109 verbose etag "31X3RJHEJY3DII8ZZ4JC45YBC" 1110 http request GET https://registry.npmjs.org/caseless 1111 verbose request uri https://registry.npmjs.org/combined-stream 1112 verbose request no auth needed 1113 info attempt registry request try #1 at 10:35:09 AM 1114 verbose etag "B4WTGKY32M1VDZX0V45HEIVUL" 1115 http request GET https://registry.npmjs.org/combined-stream 1116 verbose request uri https://registry.npmjs.org/form-data 1117 verbose request no auth needed 1118 info attempt registry request try #1 at 10:35:09 AM 1119 verbose etag "3XJMLBBZR4G7BWE1WFWH5HP31" 1120 http request GET https://registry.npmjs.org/form-data 1121 verbose request uri https://registry.npmjs.org/forever-agent 1122 verbose request no auth needed 1123 info attempt registry request try #1 at 10:35:09 AM 1124 verbose etag "KOVEDDJWRQPH3ODRNBYVYSN8" 1125 http request GET https://registry.npmjs.org/forever-agent 1126 verbose request uri https://registry.npmjs.org/har-validator 1127 verbose request no auth needed 1128 info attempt registry request try #1 at 10:35:10 AM 1129 verbose etag "E24Z34QP46JL55KHDGBFOCAFD" 1130 http request GET https://registry.npmjs.org/har-validator 1131 verbose request uri https://registry.npmjs.org/extend 1132 verbose request no auth needed 1133 info attempt registry request try #1 at 10:35:10 AM 1134 verbose etag "E6RVQQEEWSRD0L7UTZBKWFVHR" 1135 http request GET https://registry.npmjs.org/extend 1136 verbose request uri https://registry.npmjs.org/http-signature 1137 verbose request no auth needed 1138 info attempt registry request try #1 at 10:35:10 AM 1139 verbose etag "3LOY4BPPOLHY6BXJ6EAARO7S9" 1140 http request GET https://registry.npmjs.org/http-signature 1141 verbose request uri https://registry.npmjs.org/isstream 1142 verbose request no auth needed 1143 info attempt registry request try #1 at 10:35:10 AM 1144 verbose etag "45MB8HVQTANV1MBJA3FC9L1W2" 1145 http request GET https://registry.npmjs.org/isstream 1146 verbose request uri https://registry.npmjs.org/json-stringify-safe 1147 verbose request no auth needed 1148 info attempt registry request try #1 at 10:35:10 AM 1149 verbose etag "ESWQ9K6ANCER56BF1DGSCJSSK" 1150 http request GET https://registry.npmjs.org/json-stringify-safe 1151 verbose request uri https://registry.npmjs.org/hawk 1152 verbose request no auth needed 1153 info attempt registry request try #1 at 10:35:10 AM 1154 verbose etag "1OV5I0C68AA61JNUNABG09KZL" 1155 http request GET https://registry.npmjs.org/hawk 1156 verbose request uri https://registry.npmjs.org/is-typedarray 1157 verbose request no auth needed 1158 info attempt registry request try #1 at 10:35:10 AM 1159 verbose etag "A6APATMKGAWT16SSARJSIFFQD" 1160 http request GET https://registry.npmjs.org/is-typedarray 1161 verbose request uri https://registry.npmjs.org/node-uuid 1162 verbose request no auth needed 1163 info attempt registry request try #1 at 10:35:10 AM 1164 verbose etag "CPA49P0ESTDYSR0LXKY5OR327" 1165 http request GET https://registry.npmjs.org/node-uuid 1166 verbose request uri https://registry.npmjs.org/mime-types 1167 verbose request no auth needed 1168 info attempt registry request try #1 at 10:35:10 AM 1169 verbose etag "6DRB8UMPN10CQEDW0PW2KP5BA" 1170 http request GET https://registry.npmjs.org/mime-types 1171 verbose request uri https://registry.npmjs.org/oauth-sign 1172 verbose request no auth needed 1173 info attempt registry request try #1 at 10:35:10 AM 1174 verbose etag "9P5ESQ0UNHJTR4Z0BAF8IOD2W" 1175 http request GET https://registry.npmjs.org/oauth-sign 1176 verbose request uri https://registry.npmjs.org/stringstream 1177 verbose request no auth needed 1178 info attempt registry request try #1 at 10:35:10 AM 1179 verbose etag "EBUPD6LZKZQ0XKY707YFHY8YL" 1180 http request GET https://registry.npmjs.org/stringstream 1181 verbose request uri https://registry.npmjs.org/qs 1182 verbose request no auth needed 1183 info attempt registry request try #1 at 10:35:10 AM 1184 verbose etag "CROIK4FKTKIZO5GSW56WBW53A" 1185 http request GET https://registry.npmjs.org/qs 1186 verbose request uri https://registry.npmjs.org/tunnel-agent 1187 verbose request no auth needed 1188 info attempt registry request try #1 at 10:35:10 AM 1189 verbose etag "5431PXAZURN09OWZMSA9JZ82Z" 1190 http request GET https://registry.npmjs.org/tunnel-agent 1191 verbose request uri https://registry.npmjs.org/bl 1192 verbose request no auth needed 1193 info attempt registry request try #1 at 10:35:10 AM 1194 verbose etag "40FP6KUDH52O0QFN62E3494DI" 1195 http request GET https://registry.npmjs.org/bl 1196 verbose request uri https://registry.npmjs.org/aws-sign2 1197 verbose request no auth needed 1198 info attempt registry request try #1 at 10:35:10 AM 1199 verbose etag "27R48E29FV1E9H5GP3QGA5YV3" 1200 http request GET https://registry.npmjs.org/aws-sign2 1201 verbose request uri https://registry.npmjs.org/tough-cookie 1202 verbose request no auth needed 1203 info attempt registry request try #1 at 10:35:10 AM 1204 verbose etag "6P2CQR2FW4QN9JVY2T39GOZRT" 1205 http request GET https://registry.npmjs.org/tough-cookie 1206 verbose request uri https://registry.npmjs.org/aws4 1207 verbose request no auth needed 1208 info attempt registry request try #1 at 10:35:10 AM 1209 verbose etag "D6DJFE8IJHA1MFLN54SUMZUOU" 1210 http request GET https://registry.npmjs.org/aws4 1211 silly gunzTarPerm extractEntry js/release/settle.js 1212 silly gunzTarPerm modified mode [ 'js/release/settle.js', 436, 438 ] 1213 http 304 https://registry.npmjs.org/color-name 1214 silly get cb [ 304, 1214 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1214 silly get via: '1.1 varnish', 1214 silly get 'cache-control': 'max-age=300', 1214 silly get etag: '"9XAYPUAP978784IWZSSO4BOH6"', 1214 silly get age: '253', 1214 silly get connection: 'keep-alive', 1214 silly get 'x-served-by': 'cache-lcy1126-LCY', 1214 silly get 'x-cache': 'HIT', 1214 silly get 'x-cache-hits': '5', 1214 silly get 'x-timer': 'S1461836110.206864,VS0,VE0', 1214 silly get vary: 'Accept-Encoding' } ] 1215 verbose etag https://registry.npmjs.org/color-name from cache 1216 verbose get saving color-name to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\color-name\.cache.json 1217 silly gunzTarPerm extractEntry js/release/cancel.js 1218 silly gunzTarPerm modified mode [ 'js/release/cancel.js', 436, 438 ] 1219 silly addNameRange number 2 { name: 'color-name', range: '>=1.0.0 <2.0.0', hasData: true } 1220 silly addNameRange versions [ 'color-name', 1220 silly addNameRange [ '0.0.1', '0.0.2', '1.0.0', '1.0.1', '1.1.0', '1.1.1' ] ] 1221 verbose addNamed color-name@1.1.1 1222 silly addNamed semver.valid 1.1.1 1223 silly addNamed semver.validRange 1.1.1 1224 silly cache afterAdd color-name@1.1.1 1225 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color-name\1.1.1\package\package.json not in flight; writing 1226 info preinstall tar@2.2.1 1227 http 304 https://registry.npmjs.org/combined-stream 1228 silly get cb [ 304, 1228 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1228 silly get via: '1.1 varnish', 1228 silly get 'cache-control': 'max-age=300', 1228 silly get etag: '"B4WTGKY32M1VDZX0V45HEIVUL"', 1228 silly get age: '48', 1228 silly get connection: 'keep-alive', 1228 silly get 'x-served-by': 'cache-lcy1130-LCY', 1228 silly get 'x-cache': 'HIT', 1228 silly get 'x-cache-hits': '3', 1228 silly get 'x-timer': 'S1461836110.260370,VS0,VE0', 1228 silly get vary: 'Accept-Encoding' } ] 1229 verbose etag https://registry.npmjs.org/combined-stream from cache 1230 verbose get saving combined-stream to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\combined-stream\.cache.json 1231 http 304 https://registry.npmjs.org/json-stringify-safe 1232 silly get cb [ 304, 1232 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1232 silly get via: '1.1 varnish', 1232 silly get 'cache-control': 'max-age=300', 1232 silly get etag: '"ESWQ9K6ANCER56BF1DGSCJSSK"', 1232 silly get age: '63', 1232 silly get connection: 'keep-alive', 1232 silly get 'x-served-by': 'cache-lcy1128-LCY', 1232 silly get 'x-cache': 'HIT', 1232 silly get 'x-cache-hits': '8', 1232 silly get 'x-timer': 'S1461836110.259910,VS0,VE0', 1232 silly get vary: 'Accept-Encoding' } ] 1233 verbose etag https://registry.npmjs.org/json-stringify-safe from cache 1234 verbose get saving json-stringify-safe to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\json-stringify-safe\.cache.json 1235 http 304 https://registry.npmjs.org/caseless 1236 silly get cb [ 304, 1236 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1236 silly get via: '1.1 varnish', 1236 silly get 'cache-control': 'max-age=300', 1236 silly get etag: '"31X3RJHEJY3DII8ZZ4JC45YBC"', 1236 silly get age: '48', 1236 silly get connection: 'keep-alive', 1236 silly get 'x-served-by': 'cache-lcy1133-LCY', 1236 silly get 'x-cache': 'HIT', 1236 silly get 'x-cache-hits': '5', 1236 silly get 'x-timer': 'S1461836110.259841,VS0,VE0', 1236 silly get vary: 'Accept-Encoding' } ] 1237 verbose etag https://registry.npmjs.org/caseless from cache 1238 verbose get saving caseless to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\caseless\.cache.json 1239 http 304 https://registry.npmjs.org/isstream 1240 silly get cb [ 304, 1240 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1240 silly get via: '1.1 varnish', 1240 silly get 'cache-control': 'max-age=300', 1240 silly get etag: '"45MB8HVQTANV1MBJA3FC9L1W2"', 1240 silly get age: '44', 1240 silly get connection: 'keep-alive', 1240 silly get 'x-served-by': 'cache-lcy1131-LCY', 1240 silly get 'x-cache': 'HIT', 1240 silly get 'x-cache-hits': '5', 1240 silly get 'x-timer': 'S1461836110.259572,VS0,VE0', 1240 silly get vary: 'Accept-Encoding' } ] 1241 verbose etag https://registry.npmjs.org/isstream from cache 1242 verbose get saving isstream to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\isstream\.cache.json 1243 http 304 https://registry.npmjs.org/http-signature 1244 silly get cb [ 304, 1244 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1244 silly get via: '1.1 varnish', 1244 silly get 'cache-control': 'max-age=300', 1244 silly get etag: '"3LOY4BPPOLHY6BXJ6EAARO7S9"', 1244 silly get age: '101', 1244 silly get connection: 'keep-alive', 1244 silly get 'x-served-by': 'cache-lcy1130-LCY', 1244 silly get 'x-cache': 'HIT', 1244 silly get 'x-cache-hits': '13', 1244 silly get 'x-timer': 'S1461836110.260869,VS0,VE0', 1244 silly get vary: 'Accept-Encoding' } ] 1245 verbose etag https://registry.npmjs.org/http-signature from cache 1246 verbose get saving http-signature to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\http-signature\.cache.json 1247 http 304 https://registry.npmjs.org/har-validator 1248 silly get cb [ 304, 1248 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1248 silly get via: '1.1 varnish', 1248 silly get 'cache-control': 'max-age=300', 1248 silly get etag: '"E24Z34QP46JL55KHDGBFOCAFD"', 1248 silly get age: '261', 1248 silly get connection: 'keep-alive', 1248 silly get 'x-served-by': 'cache-lcy1129-LCY', 1248 silly get 'x-cache': 'HIT', 1248 silly get 'x-cache-hits': '25', 1248 silly get 'x-timer': 'S1461836110.259708,VS0,VE0', 1248 silly get vary: 'Accept-Encoding' } ] 1249 verbose etag https://registry.npmjs.org/har-validator from cache 1250 verbose get saving har-validator to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\har-validator\.cache.json 1251 http 304 https://registry.npmjs.org/form-data 1252 silly get cb [ 304, 1252 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1252 silly get via: '1.1 varnish', 1252 silly get 'cache-control': 'max-age=300', 1252 silly get etag: '"3XJMLBBZR4G7BWE1WFWH5HP31"', 1252 silly get age: '274', 1252 silly get connection: 'keep-alive', 1252 silly get 'x-served-by': 'cache-lcy1123-LCY', 1252 silly get 'x-cache': 'HIT', 1252 silly get 'x-cache-hits': '45', 1252 silly get 'x-timer': 'S1461836110.259919,VS0,VE0', 1252 silly get vary: 'Accept-Encoding' } ] 1253 verbose etag https://registry.npmjs.org/form-data from cache 1254 verbose get saving form-data to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\form-data\.cache.json 1255 http 304 https://registry.npmjs.org/node-uuid 1256 silly get cb [ 304, 1256 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1256 silly get via: '1.1 varnish', 1256 silly get 'cache-control': 'max-age=300', 1256 silly get etag: '"CPA49P0ESTDYSR0LXKY5OR327"', 1256 silly get age: '143', 1256 silly get connection: 'keep-alive', 1256 silly get 'x-served-by': 'cache-lcy1135-LCY', 1256 silly get 'x-cache': 'HIT', 1256 silly get 'x-cache-hits': '14', 1256 silly get 'x-timer': 'S1461836110.257715,VS0,VE0', 1256 silly get vary: 'Accept-Encoding' } ] 1257 verbose etag https://registry.npmjs.org/node-uuid from cache 1258 verbose get saving node-uuid to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\node-uuid\.cache.json 1259 http 304 https://registry.npmjs.org/extend 1260 silly get cb [ 304, 1260 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1260 silly get via: '1.1 varnish', 1260 silly get 'cache-control': 'max-age=300', 1260 silly get etag: '"E6RVQQEEWSRD0L7UTZBKWFVHR"', 1260 silly get age: '83', 1260 silly get connection: 'keep-alive', 1260 silly get 'x-served-by': 'cache-lcy1129-LCY', 1260 silly get 'x-cache': 'HIT', 1260 silly get 'x-cache-hits': '8', 1260 silly get 'x-timer': 'S1461836110.260836,VS0,VE0', 1260 silly get vary: 'Accept-Encoding' } ] 1261 verbose etag https://registry.npmjs.org/extend from cache 1262 verbose get saving extend to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\extend\.cache.json 1263 http 304 https://registry.npmjs.org/is-typedarray 1264 silly get cb [ 304, 1264 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1264 silly get via: '1.1 varnish', 1264 silly get 'cache-control': 'max-age=300', 1264 silly get etag: '"A6APATMKGAWT16SSARJSIFFQD"', 1264 silly get age: '119', 1264 silly get connection: 'keep-alive', 1264 silly get 'x-served-by': 'cache-lcy1128-LCY', 1264 silly get 'x-cache': 'HIT', 1264 silly get 'x-cache-hits': '8', 1264 silly get 'x-timer': 'S1461836110.257323,VS0,VE0', 1264 silly get vary: 'Accept-Encoding' } ] 1265 verbose etag https://registry.npmjs.org/is-typedarray from cache 1266 verbose get saving is-typedarray to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\is-typedarray\.cache.json 1267 http 304 https://registry.npmjs.org/mime-types 1268 silly get cb [ 304, 1268 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1268 silly get via: '1.1 varnish', 1268 silly get 'cache-control': 'max-age=300', 1268 silly get etag: '"6DRB8UMPN10CQEDW0PW2KP5BA"', 1268 silly get age: '62', 1268 silly get connection: 'keep-alive', 1268 silly get 'x-served-by': 'cache-lcy1122-LCY', 1268 silly get 'x-cache': 'HIT', 1268 silly get 'x-cache-hits': '5', 1268 silly get 'x-timer': 'S1461836110.284273,VS0,VE0', 1268 silly get vary: 'Accept-Encoding' } ] 1269 verbose etag https://registry.npmjs.org/mime-types from cache 1270 verbose get saving mime-types to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\mime-types\.cache.json 1271 http 304 https://registry.npmjs.org/hawk 1272 silly get cb [ 304, 1272 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1272 silly get via: '1.1 varnish', 1272 silly get 'cache-control': 'max-age=300', 1272 silly get etag: '"1OV5I0C68AA61JNUNABG09KZL"', 1272 silly get age: '70', 1272 silly get connection: 'keep-alive', 1272 silly get 'x-served-by': 'cache-lcy1126-LCY', 1272 silly get 'x-cache': 'HIT', 1272 silly get 'x-cache-hits': '13', 1272 silly get 'x-timer': 'S1461836110.284637,VS0,VE0', 1272 silly get vary: 'Accept-Encoding' } ] 1273 verbose etag https://registry.npmjs.org/hawk from cache 1274 verbose get saving hawk to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\hawk\.cache.json 1275 http 304 https://registry.npmjs.org/tunnel-agent 1276 silly get cb [ 304, 1276 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1276 silly get via: '1.1 varnish', 1276 silly get 'cache-control': 'max-age=300', 1276 silly get etag: '"5431PXAZURN09OWZMSA9JZ82Z"', 1276 silly get age: '159', 1276 silly get connection: 'keep-alive', 1276 silly get 'x-served-by': 'cache-lcy1124-LCY', 1276 silly get 'x-cache': 'HIT', 1276 silly get 'x-cache-hits': '19', 1276 silly get 'x-timer': 'S1461836110.285413,VS0,VE0', 1276 silly get vary: 'Accept-Encoding' } ] 1277 verbose etag https://registry.npmjs.org/tunnel-agent from cache 1278 verbose get saving tunnel-agent to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\tunnel-agent\.cache.json 1279 http 304 https://registry.npmjs.org/stringstream 1280 silly get cb [ 304, 1280 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1280 silly get via: '1.1 varnish', 1280 silly get 'cache-control': 'max-age=300', 1280 silly get etag: '"EBUPD6LZKZQ0XKY707YFHY8YL"', 1280 silly get age: '255', 1280 silly get connection: 'keep-alive', 1280 silly get 'x-served-by': 'cache-lcy1133-LCY', 1280 silly get 'x-cache': 'HIT', 1280 silly get 'x-cache-hits': '21', 1280 silly get 'x-timer': 'S1461836110.285027,VS0,VE0', 1280 silly get vary: 'Accept-Encoding' } ] 1281 verbose etag https://registry.npmjs.org/stringstream from cache 1282 verbose get saving stringstream to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\stringstream\.cache.json 1283 http 304 https://registry.npmjs.org/bl 1284 silly get cb [ 304, 1284 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1284 silly get via: '1.1 varnish', 1284 silly get 'cache-control': 'max-age=300', 1284 silly get etag: '"40FP6KUDH52O0QFN62E3494DI"', 1284 silly get age: '256', 1284 silly get connection: 'keep-alive', 1284 silly get 'x-served-by': 'cache-lcy1124-LCY', 1284 silly get 'x-cache': 'HIT', 1284 silly get 'x-cache-hits': '30', 1284 silly get 'x-timer': 'S1461836110.284629,VS0,VE0', 1284 silly get vary: 'Accept-Encoding' } ] 1285 verbose etag https://registry.npmjs.org/bl from cache 1286 verbose get saving bl to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\bl\.cache.json 1287 http 304 https://registry.npmjs.org/oauth-sign 1288 silly get cb [ 304, 1288 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1288 silly get via: '1.1 varnish', 1288 silly get 'cache-control': 'max-age=300', 1288 silly get etag: '"9P5ESQ0UNHJTR4Z0BAF8IOD2W"', 1288 silly get age: '154', 1288 silly get connection: 'keep-alive', 1288 silly get 'x-served-by': 'cache-lcy1124-LCY', 1288 silly get 'x-cache': 'HIT', 1288 silly get 'x-cache-hits': '19', 1288 silly get 'x-timer': 'S1461836110.284315,VS0,VE0', 1288 silly get vary: 'Accept-Encoding' } ] 1289 verbose etag https://registry.npmjs.org/oauth-sign from cache 1290 verbose get saving oauth-sign to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\oauth-sign\.cache.json 1291 http 304 https://registry.npmjs.org/aws-sign2 1292 silly get cb [ 304, 1292 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1292 silly get via: '1.1 varnish', 1292 silly get 'cache-control': 'max-age=300', 1292 silly get etag: '"27R48E29FV1E9H5GP3QGA5YV3"', 1292 silly get age: '243', 1292 silly get connection: 'keep-alive', 1292 silly get 'x-served-by': 'cache-lcy1129-LCY', 1292 silly get 'x-cache': 'HIT', 1292 silly get 'x-cache-hits': '23', 1292 silly get 'x-timer': 'S1461836110.283882,VS0,VE0', 1292 silly get vary: 'Accept-Encoding' } ] 1293 verbose etag https://registry.npmjs.org/aws-sign2 from cache 1294 verbose get saving aws-sign2 to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\aws-sign2\.cache.json 1295 http 304 https://registry.npmjs.org/tough-cookie 1296 silly get cb [ 304, 1296 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1296 silly get via: '1.1 varnish', 1296 silly get 'cache-control': 'max-age=300', 1296 silly get etag: '"6P2CQR2FW4QN9JVY2T39GOZRT"', 1296 silly get age: '277', 1296 silly get connection: 'keep-alive', 1296 silly get 'x-served-by': 'cache-lcy1124-LCY', 1296 silly get 'x-cache': 'HIT', 1296 silly get 'x-cache-hits': '18', 1296 silly get 'x-timer': 'S1461836110.284100,VS0,VE0', 1296 silly get vary: 'Accept-Encoding' } ] 1297 verbose etag https://registry.npmjs.org/tough-cookie from cache 1298 verbose get saving tough-cookie to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\tough-cookie\.cache.json 1299 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\color-name\1.1.1\package\package.json written 1300 silly install resolved [ { name: 'color-name', 1300 silly install resolved version: '1.1.1', 1300 silly install resolved description: 'A list of color names and it’s values', 1300 silly install resolved main: 'index.js', 1300 silly install resolved scripts: { test: 'node test.js' }, 1300 silly install resolved files: [ 'index.js' ], 1300 silly install resolved repository: { type: 'git', url: 'git@github.com:dfcreative/color-name.git' }, 1300 silly install resolved keywords: [ 'color-name', 'color', 'color-keyword', 'keyword' ], 1300 silly install resolved author: { name: 'DY', email: 'dfcreative@gmail.com' }, 1300 silly install resolved license: 'MIT', 1300 silly install resolved bugs: { url: 'https://github.com/dfcreative/color-name/issues' }, 1300 silly install resolved homepage: 'https://github.com/dfcreative/color-name', 1300 silly install resolved readme: 'A JSON with color names and it’s values. Based on http://dev.w3.org/csswg/css-color/#named-colors.\r\n\r\n[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/)\r\n\r\n\r\n```js\r\nvar colors = require(\'color-name\');\r\ncolors.red //[255,0,0]\r\n```\r\n\r\n', 1300 silly install resolved readmeFilename: 'README.md', 1300 silly install resolved _id: 'color-name@1.1.1', 1300 silly install resolved _shasum: '4b1415304cf50028ea81643643bd82ea05803689', 1300 silly install resolved _resolved: 'https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz', 1300 silly install resolved _from: 'color-name@>=1.0.0 <2.0.0' } ] 1301 info install color-name@1.1.1 into E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string 1302 info installOne color-name@1.1.1 1303 verbose installOne of color-name to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string not in flight; installing 1304 silly prepareForInstallMany adding block-stream@* from tar dependencies 1305 silly prepareForInstallMany adding fstream@^1.0.2 from tar dependencies 1306 silly prepareForInstallMany adding inherits@2 from tar dependencies 1307 http 200 https://registry.npmjs.org/forever-agent 1308 silly get cb [ 200, 1308 silly get { server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)', 1308 silly get etag: '"AN8DYHW8FVWM228PCRXS53C8O"', 1308 silly get 'content-type': 'application/json', 1308 silly get 'content-encoding': 'gzip', 1308 silly get 'cache-control': 'max-age=300', 1308 silly get 'content-length': '1416', 1308 silly get 'accept-ranges': 'bytes', 1308 silly get date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1308 silly get via: '1.1 varnish', 1308 silly get age: '35', 1308 silly get connection: 'keep-alive', 1308 silly get 'x-served-by': 'cache-lcy1125-LCY', 1308 silly get 'x-cache': 'HIT', 1308 silly get 'x-cache-hits': '6', 1308 silly get 'x-timer': 'S1461836110.261635,VS0,VE0', 1308 silly get vary: 'Accept-Encoding' } ] 1309 verbose get saving forever-agent to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\forever-agent\.cache.json 1310 silly cache add args [ 'inherits@2', null ] 1311 verbose cache add spec inherits@2 1312 silly cache add parsed spec { raw: 'inherits@2', 1312 silly cache add scope: null, 1312 silly cache add name: 'inherits', 1312 silly cache add rawSpec: '2', 1312 silly cache add spec: '>=2.0.0 <3.0.0', 1312 silly cache add type: 'range' } 1313 verbose addNamed inherits@>=2.0.0 <3.0.0 1314 silly addNamed semver.valid null 1315 silly addNamed semver.validRange >=2.0.0 <3.0.0 1316 silly addNameRange { name: 'inherits', range: '>=2.0.0 <3.0.0', hasData: false } 1317 silly mapToRegistry name inherits 1318 silly mapToRegistry using default registry 1319 silly mapToRegistry registry https://registry.npmjs.org/ 1320 silly mapToRegistry uri https://registry.npmjs.org/inherits 1321 verbose addNameRange registry:https://registry.npmjs.org/inherits not in flight; fetching 1322 silly cache add args [ 'block-stream@*', null ] 1323 verbose cache add spec block-stream@* 1324 silly cache add parsed spec { raw: 'block-stream@*', 1324 silly cache add scope: null, 1324 silly cache add name: 'block-stream', 1324 silly cache add rawSpec: '*', 1324 silly cache add spec: '*', 1324 silly cache add type: 'range' } 1325 verbose addNamed block-stream@* 1326 silly addNamed semver.valid null 1327 silly addNamed semver.validRange * 1328 silly addNameRange { name: 'block-stream', range: '*', hasData: false } 1329 silly mapToRegistry name block-stream 1330 silly mapToRegistry using default registry 1331 silly mapToRegistry registry https://registry.npmjs.org/ 1332 silly mapToRegistry uri https://registry.npmjs.org/block-stream 1333 verbose addNameRange registry:https://registry.npmjs.org/block-stream not in flight; fetching 1334 silly cache add args [ 'fstream@^1.0.2', null ] 1335 verbose cache add spec fstream@^1.0.2 1336 silly cache add parsed spec { raw: 'fstream@^1.0.2', 1336 silly cache add scope: null, 1336 silly cache add name: 'fstream', 1336 silly cache add rawSpec: '^1.0.2', 1336 silly cache add spec: '>=1.0.2 <2.0.0', 1336 silly cache add type: 'range' } 1337 verbose addNamed fstream@>=1.0.2 <2.0.0 1338 silly addNamed semver.valid null 1339 silly addNamed semver.validRange >=1.0.2 <2.0.0 1340 silly addNameRange { name: 'fstream', range: '>=1.0.2 <2.0.0', hasData: false } 1341 silly mapToRegistry name fstream 1342 silly mapToRegistry using default registry 1343 silly mapToRegistry registry https://registry.npmjs.org/ 1344 silly mapToRegistry uri https://registry.npmjs.org/fstream 1345 verbose addNameRange registry:https://registry.npmjs.org/fstream not in flight; fetching 1346 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\color-name-6a0de41c93cb1d2d.lock for E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name 1347 http 304 https://registry.npmjs.org/aws4 1348 silly get cb [ 304, 1348 silly get { date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1348 silly get via: '1.1 varnish', 1348 silly get 'cache-control': 'max-age=300', 1348 silly get etag: '"D6DJFE8IJHA1MFLN54SUMZUOU"', 1348 silly get age: '213', 1348 silly get connection: 'keep-alive', 1348 silly get 'x-served-by': 'cache-lcy1132-LCY', 1348 silly get 'x-cache': 'HIT', 1348 silly get 'x-cache-hits': '13', 1348 silly get 'x-timer': 'S1461836110.560312,VS0,VE0', 1348 silly get vary: 'Accept-Encoding' } ] 1349 verbose etag https://registry.npmjs.org/aws4 from cache 1350 verbose get saving aws4 to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\aws4\.cache.json 1351 http 200 https://registry.npmjs.org/qs 1352 silly get cb [ 200, 1352 silly get { server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)', 1352 silly get etag: '"B0T1YHZIW2HJ8JNLNUVBOJNBN"', 1352 silly get 'content-type': 'application/json', 1352 silly get 'content-encoding': 'gzip', 1352 silly get 'cache-control': 'max-age=300', 1352 silly get 'content-length': '12393', 1352 silly get 'accept-ranges': 'bytes', 1352 silly get date: 'Thu, 28 Apr 2016 09:35:10 GMT', 1352 silly get via: '1.1 varnish', 1352 silly get age: '110', 1352 silly get connection: 'keep-alive', 1352 silly get 'x-served-by': 'cache-lcy1128-LCY', 1352 silly get 'x-cache': 'HIT', 1352 silly get 'x-cache-hits': '16', 1352 silly get 'x-timer': 'S1461836110.284081,VS0,VE0', 1352 silly get vary: 'Accept-Encoding' } ] 1353 verbose get saving qs to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\qs\.cache.json 1354 silly install write writing color-name 1.1.1 to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name 1355 silly cache addNamed cb color-name@1.1.1 1356 verbose unbuild node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name 1357 silly addNameRange number 2 { name: 'isstream', range: '>=0.1.2 <0.2.0', hasData: true } 1358 silly addNameRange versions [ 'isstream', [ '0.0.0', '0.1.0', '0.1.1', '0.1.2' ] ] 1359 verbose addNamed isstream@0.1.2 1360 silly addNamed semver.valid 0.1.2 1361 silly addNamed semver.validRange 0.1.2 1362 silly addNameRange number 2 { name: 'caseless', range: '>=0.11.0 <0.12.0', hasData: true } 1363 silly addNameRange versions [ 'caseless', 1363 silly addNameRange [ '0.1.0', 1363 silly addNameRange '0.2.0', 1363 silly addNameRange '0.3.0', 1363 silly addNameRange '0.4.0', 1363 silly addNameRange '0.5.0', 1363 silly addNameRange '0.6.0', 1363 silly addNameRange '0.7.0', 1363 silly addNameRange '0.8.0', 1363 silly addNameRange '0.9.0', 1363 silly addNameRange '0.10.0', 1363 silly addNameRange '0.11.0' ] ] 1364 verbose addNamed caseless@0.11.0 1365 silly addNamed semver.valid 0.11.0 1366 silly addNamed semver.validRange 0.11.0 1367 silly addNameRange number 2 { name: 'combined-stream', 1367 silly addNameRange range: '>=1.0.5 <1.1.0', 1367 silly addNameRange hasData: true } 1368 silly addNameRange versions [ 'combined-stream', 1368 silly addNameRange [ '0.0.0', 1368 silly addNameRange '0.0.1', 1368 silly addNameRange '0.0.2', 1368 silly addNameRange '0.0.3', 1368 silly addNameRange '0.0.4', 1368 silly addNameRange '0.0.5', 1368 silly addNameRange '0.0.7', 1368 silly addNameRange '1.0.0', 1368 silly addNameRange '1.0.1', 1368 silly addNameRange '1.0.2', 1368 silly addNameRange '1.0.3', 1368 silly addNameRange '1.0.4', 1368 silly addNameRange '1.0.5' ] ] 1369 verbose addNamed combined-stream@1.0.5 1370 silly addNamed semver.valid 1.0.5 1371 silly addNamed semver.validRange 1.0.5 1372 silly addNameRange number 2 { name: 'har-validator', range: '>=2.0.6 <2.1.0', hasData: true } 1373 silly addNameRange versions [ 'har-validator', 1373 silly addNameRange [ '1.0.0', 1373 silly addNameRange '1.0.1', 1373 silly addNameRange '1.0.2', 1373 silly addNameRange '1.1.0', 1373 silly addNameRange '1.1.1', 1373 silly addNameRange '1.1.2', 1373 silly addNameRange '1.1.3', 1373 silly addNameRange '1.2.0', 1373 silly addNameRange '1.3.0', 1373 silly addNameRange '1.3.1', 1373 silly addNameRange '1.4.0', 1373 silly addNameRange '1.5.0', 1373 silly addNameRange '1.5.1', 1373 silly addNameRange '1.6.0', 1373 silly addNameRange '1.6.1', 1373 silly addNameRange '1.7.0', 1373 silly addNameRange '1.7.1', 1373 silly addNameRange '1.8.0', 1373 silly addNameRange '2.0.0', 1373 silly addNameRange '2.0.1', 1373 silly addNameRange '2.0.2', 1373 silly addNameRange '2.0.3', 1373 silly addNameRange '2.0.4', 1373 silly addNameRange '2.0.5', 1373 silly addNameRange '2.0.6', 1373 silly addNameRange '2.1.0', 1373 silly addNameRange '2.1.1', 1373 silly addNameRange '2.1.2', 1373 silly addNameRange '2.1.3' ] ] 1374 verbose addNamed har-validator@2.0.6 1375 silly addNamed semver.valid 2.0.6 1376 silly addNamed semver.validRange 2.0.6 1377 silly addNameRange number 2 { name: 'json-stringify-safe', 1377 silly addNameRange range: '>=5.0.1 <5.1.0', 1377 silly addNameRange hasData: true } 1378 silly addNameRange versions [ 'json-stringify-safe', 1378 silly addNameRange [ '2.0.0', '3.0.0', '4.0.0', '5.0.0', '5.0.1' ] ] 1379 verbose addNamed json-stringify-safe@5.0.1 1380 silly addNamed semver.valid 5.0.1 1381 silly addNamed semver.validRange 5.0.1 1382 silly addNameRange number 2 { name: 'node-uuid', range: '>=1.4.7 <1.5.0', hasData: true } 1383 silly addNameRange versions [ 'node-uuid', 1383 silly addNameRange [ '1.2.0', 1383 silly addNameRange '1.3.0', 1383 silly addNameRange '1.3.1', 1383 silly addNameRange '1.3.2', 1383 silly addNameRange '1.1.0', 1383 silly addNameRange '1.0.0', 1383 silly addNameRange '1.3.3', 1383 silly addNameRange '1.4.0', 1383 silly addNameRange '1.4.1', 1383 silly addNameRange '1.4.2', 1383 silly addNameRange '1.4.3', 1383 silly addNameRange '1.4.6', 1383 silly addNameRange '1.4.7' ] ] 1384 verbose addNamed node-uuid@1.4.7 1385 silly addNamed semver.valid 1.4.7 1386 silly addNamed semver.validRange 1.4.7 1387 silly addNameRange number 2 { name: 'http-signature', 1387 silly addNameRange range: '>=1.1.0 <1.2.0', 1387 silly addNameRange hasData: true } 1388 silly addNameRange versions [ 'http-signature', 1388 silly addNameRange [ '0.9.0', 1388 silly addNameRange '0.9.2', 1388 silly addNameRange '0.9.3', 1388 silly addNameRange '0.9.4', 1388 silly addNameRange '0.9.5', 1388 silly addNameRange '0.9.6', 1388 silly addNameRange '0.9.7', 1388 silly addNameRange '0.9.8', 1388 silly addNameRange '0.9.9', 1388 silly addNameRange '0.9.10', 1388 silly addNameRange '0.9.11', 1388 silly addNameRange '0.10.0', 1388 silly addNameRange '0.10.1', 1388 silly addNameRange '0.11.0', 1388 silly addNameRange '1.0.0', 1388 silly addNameRange '1.0.1', 1388 silly addNameRange '1.0.2', 1388 silly addNameRange '1.1.0', 1388 silly addNameRange '1.1.1' ] ] 1389 verbose addNamed http-signature@1.1.1 1390 silly addNamed semver.valid 1.1.1 1391 silly addNamed semver.validRange 1.1.1 1392 silly addNameRange number 2 { name: 'extend', range: '>=3.0.0 <3.1.0', hasData: true } 1393 silly addNameRange versions [ 'extend', 1393 silly addNameRange [ '1.0.0', 1393 silly addNameRange '1.1.0', 1393 silly addNameRange '1.1.1', 1393 silly addNameRange '1.1.3', 1393 silly addNameRange '1.2.0', 1393 silly addNameRange '1.2.1', 1393 silly addNameRange '1.3.0', 1393 silly addNameRange '2.0.0', 1393 silly addNameRange '2.0.1', 1393 silly addNameRange '3.0.0' ] ] 1394 verbose addNamed extend@3.0.0 1395 silly addNamed semver.valid 3.0.0 1396 silly addNamed semver.validRange 3.0.0 1397 silly addNameRange number 2 { name: 'form-data', range: '>=1.0.0-rc3 <1.1.0', hasData: true } 1398 silly addNameRange versions [ 'form-data', 1398 silly addNameRange [ '0.0.0', 1398 silly addNameRange '0.0.2', 1398 silly addNameRange '0.0.3', 1398 silly addNameRange '0.0.4', 1398 silly addNameRange '0.0.5', 1398 silly addNameRange '0.0.6', 1398 silly addNameRange '0.0.7', 1398 silly addNameRange '0.0.8', 1398 silly addNameRange '0.0.9', 1398 silly addNameRange '0.0.10', 1398 silly addNameRange '0.1.0', 1398 silly addNameRange '0.1.1', 1398 silly addNameRange '0.1.2', 1398 silly addNameRange '0.1.3', 1398 silly addNameRange '0.1.4', 1398 silly addNameRange '0.2.0', 1398 silly addNameRange '1.0.0-rc1', 1398 silly addNameRange '1.0.0-rc2', 1398 silly addNameRange '1.0.0-rc3', 1398 silly addNameRange '1.0.0-rc4' ] ] 1399 verbose addNamed form-data@1.0.0-rc4 1400 silly addNamed semver.valid 1.0.0-rc4 1401 silly addNamed semver.validRange 1.0.0-rc4 1402 silly addNameRange number 2 { name: 'is-typedarray', range: '>=1.0.0 <1.1.0', hasData: true } 1403 silly addNameRange versions [ 'is-typedarray', [ '0.0.0', '1.0.0' ] ] 1404 verbose addNamed is-typedarray@1.0.0 1405 silly addNamed semver.valid 1.0.0 1406 silly addNamed semver.validRange 1.0.0 1407 silly addNameRange number 2 { name: 'mime-types', range: '>=2.1.7 <2.2.0', hasData: true } 1408 silly addNameRange versions [ 'mime-types', 1408 silly addNameRange [ '0.1.0', 1408 silly addNameRange '1.0.0', 1408 silly addNameRange '1.0.1', 1408 silly addNameRange '1.0.2', 1408 silly addNameRange '2.0.0', 1408 silly addNameRange '2.0.1', 1408 silly addNameRange '2.0.2', 1408 silly addNameRange '2.0.3', 1408 silly addNameRange '2.0.4', 1408 silly addNameRange '2.0.5', 1408 silly addNameRange '2.0.6', 1408 silly addNameRange '2.0.7', 1408 silly addNameRange '2.0.8', 1408 silly addNameRange '2.0.9', 1408 silly addNameRange '2.0.10', 1408 silly addNameRange '2.0.11', 1408 silly addNameRange '2.0.12', 1408 silly addNameRange '2.0.13', 1408 silly addNameRange '2.0.14', 1408 silly addNameRange '2.1.0', 1408 silly addNameRange '2.1.1', 1408 silly addNameRange '2.1.2', 1408 silly addNameRange '2.1.3', 1408 silly addNameRange '2.1.4', 1408 silly addNameRange '2.1.5', 1408 silly addNameRange '2.1.6', 1408 silly addNameRange '2.1.7', 1408 silly addNameRange '2.1.8', 1408 silly addNameRange '2.1.9', 1408 silly addNameRange '2.1.10' ] ] 1409 verbose addNamed mime-types@2.1.10 1410 silly addNamed semver.valid 2.1.10 1411 silly addNamed semver.validRange 2.1.10 1412 silly addNameRange number 2 { name: 'stringstream', range: '>=0.0.4 <0.1.0', hasData: true } 1413 silly addNameRange versions [ 'stringstream', 1413 silly addNameRange [ '0.0.0', '0.0.1', '0.0.2', '0.0.3', '0.0.4', '0.0.5' ] ] 1414 verbose addNamed stringstream@0.0.5 1415 silly addNamed semver.valid 0.0.5 1416 silly addNamed semver.validRange 0.0.5 1417 silly addNameRange number 2 { name: 'bl', range: '>=1.1.2 <1.2.0', hasData: true } 1418 silly addNameRange versions [ 'bl', 1418 silly addNameRange [ '0.0.0', 1418 silly addNameRange '0.1.0', 1418 silly addNameRange '0.1.1', 1418 silly addNameRange '0.2.0', 1418 silly addNameRange '0.3.0', 1418 silly addNameRange '0.4.0', 1418 silly addNameRange '0.4.1', 1418 silly addNameRange '0.4.2', 1418 silly addNameRange '0.5.0', 1418 silly addNameRange '0.6.0', 1418 silly addNameRange '0.7.0', 1418 silly addNameRange '0.8.0', 1418 silly addNameRange '0.8.1', 1418 silly addNameRange '0.8.2', 1418 silly addNameRange '0.9.0', 1418 silly addNameRange '0.9.1', 1418 silly addNameRange '0.9.2', 1418 silly addNameRange '0.9.3', 1418 silly addNameRange '0.9.4', 1418 silly addNameRange '1.0.0', 1418 silly addNameRange '1.0.1', 1418 silly addNameRange '0.9.5', 1418 silly addNameRange '1.0.2', 1418 silly addNameRange '1.0.3', 1418 silly addNameRange '1.1.1', 1418 silly addNameRange '1.1.2' ] ] 1419 verbose addNamed bl@1.1.2 1420 silly addNamed semver.valid 1.1.2 1421 silly addNamed semver.validRange 1.1.2 1422 silly addNameRange number 2 { name: 'tunnel-agent', range: '>=0.4.1 <0.5.0', hasData: true } 1423 silly addNameRange versions [ 'tunnel-agent', 1423 silly addNameRange [ '0.2.0', '0.3.0', '0.4.0', '0.4.1', '0.4.2' ] ] 1424 verbose addNamed tunnel-agent@0.4.2 1425 silly addNamed semver.valid 0.4.2 1426 silly addNamed semver.validRange 0.4.2 1427 silly addNameRange number 2 { name: 'oauth-sign', range: '>=0.8.1 <0.9.0', hasData: true } 1428 silly addNameRange versions [ 'oauth-sign', 1428 silly addNameRange [ '0.2.0', 1428 silly addNameRange '0.3.0', 1428 silly addNameRange '0.4.0', 1428 silly addNameRange '0.5.0', 1428 silly addNameRange '0.6.0', 1428 silly addNameRange '0.7.0', 1428 silly addNameRange '0.8.0', 1428 silly addNameRange '0.8.1' ] ] 1429 verbose addNamed oauth-sign@0.8.1 1430 silly addNamed semver.valid 0.8.1 1431 silly addNamed semver.validRange 0.8.1 1432 silly addNameRange number 2 { name: 'aws-sign2', range: '>=0.6.0 <0.7.0', hasData: true } 1433 silly addNameRange versions [ 'aws-sign2', [ '0.4.0', '0.5.0', '0.6.0' ] ] 1434 verbose addNamed aws-sign2@0.6.0 1435 silly addNamed semver.valid 0.6.0 1436 silly addNamed semver.validRange 0.6.0 1437 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name is being purged from base E:\cartridge-images 1438 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name 1439 silly addNameRange number 2 { name: 'tough-cookie', range: '>=2.2.0 <2.3.0', hasData: true } 1440 silly addNameRange versions [ 'tough-cookie', 1440 silly addNameRange [ '0.9.0', 1440 silly addNameRange '0.9.1', 1440 silly addNameRange '0.9.3', 1440 silly addNameRange '0.9.4', 1440 silly addNameRange '0.9.5', 1440 silly addNameRange '0.9.6', 1440 silly addNameRange '0.9.7', 1440 silly addNameRange '0.9.8', 1440 silly addNameRange '0.9.9', 1440 silly addNameRange '0.9.11', 1440 silly addNameRange '0.9.12', 1440 silly addNameRange '0.9.13', 1440 silly addNameRange '0.9.14', 1440 silly addNameRange '0.9.15', 1440 silly addNameRange '0.10.0', 1440 silly addNameRange '0.11.0', 1440 silly addNameRange '0.12.0', 1440 silly addNameRange '0.12.1', 1440 silly addNameRange '0.13.0', 1440 silly addNameRange '1.0.0', 1440 silly addNameRange '1.1.0', 1440 silly addNameRange '1.2.0', 1440 silly addNameRange '2.0.0', 1440 silly addNameRange '2.1.0', 1440 silly addNameRange '2.2.0', 1440 silly addNameRange '2.2.1', 1440 silly addNameRange '2.2.2' ] ] 1441 verbose addNamed tough-cookie@2.2.2 1442 silly addNamed semver.valid 2.2.2 1443 silly addNamed semver.validRange 2.2.2 1444 silly gunzTarPerm extractEntry js/release/some.js 1445 silly gunzTarPerm modified mode [ 'js/release/some.js', 436, 438 ] 1446 silly addNameRange number 2 { name: 'hawk', range: '>=3.1.3 <3.2.0', hasData: true } 1447 silly addNameRange versions [ 'hawk', 1447 silly addNameRange [ '0.0.1', 1447 silly addNameRange '0.0.2', 1447 silly addNameRange '0.0.3', 1447 silly addNameRange '0.0.4', 1447 silly addNameRange '0.0.5', 1447 silly addNameRange '0.0.6', 1447 silly addNameRange '0.0.7', 1447 silly addNameRange '0.0.8', 1447 silly addNameRange '0.1.0', 1447 silly addNameRange '0.2.0', 1447 silly addNameRange '0.3.0', 1447 silly addNameRange '0.4.0', 1447 silly addNameRange '0.5.0', 1447 silly addNameRange '0.5.1', 1447 silly addNameRange '0.5.2', 1447 silly addNameRange '0.5.3', 1447 silly addNameRange '0.6.0', 1447 silly addNameRange '0.6.1', 1447 silly addNameRange '0.7.0', 1447 silly addNameRange '0.7.1', 1447 silly addNameRange '0.8.1', 1447 silly addNameRange '0.9.0', 1447 silly addNameRange '0.10.0', 1447 silly addNameRange '0.10.1', 1447 silly addNameRange '0.10.2', 1447 silly addNameRange '0.11.0', 1447 silly addNameRange '0.11.1', 1447 silly addNameRange '0.12.0', 1447 silly addNameRange '0.12.1', 1447 silly addNameRange '0.12.2', 1447 silly addNameRange '0.13.0', 1447 silly addNameRange '0.13.1', 1447 silly addNameRange '0.14.0', 1447 silly addNameRange '0.15.0', 1447 silly addNameRange '1.0.0', 1447 silly addNameRange '1.1.0-pre', 1447 silly addNameRange '1.1.1', 1447 silly addNameRange '1.1.2', 1447 silly addNameRange '2.0.0', 1447 silly addNameRange '2.1.0', 1447 silly addNameRange '2.1.1', 1447 silly addNameRange '2.1.2', 1447 silly addNameRange '2.1.3', 1447 silly addNameRange '2.2.0', 1447 silly addNameRange '2.2.1', 1447 silly addNameRange '2.2.2', 1447 silly addNameRange '2.2.3', 1447 silly addNameRange '2.3.0', 1447 silly addNameRange '2.3.1', 1447 silly addNameRange '3.0.0', 1447 silly addNameRange '3.1.0', 1447 silly addNameRange '3.1.1', 1447 silly addNameRange '4.0.0', 1447 silly addNameRange '3.1.2', 1447 silly addNameRange '4.0.1', 1447 silly addNameRange '4.1.0', 1447 silly addNameRange '4.1.1', 1447 silly addNameRange '3.1.3', 1447 silly addNameRange '4.1.2' ] ] 1448 verbose addNamed hawk@3.1.3 1449 silly addNamed semver.valid 3.1.3 1450 silly addNamed semver.validRange 3.1.3 1451 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\color-name\1.1.1\package.tgz 1452 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name 1453 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name is being purged 1454 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\color\node_modules\color-string\node_modules\color-name 1455 verbose request uri https://registry.npmjs.org/inherits 1456 verbose request no auth needed 1457 info attempt registry request try #1 at 10:35:10 AM 1458 verbose etag "9C23BNETE30UZVYRVML0QUTBX" 1459 http request GET https://registry.npmjs.org/inherits 1460 verbose request uri https://registry.npmjs.org/fstream 1461 verbose request no auth needed 1462 info attempt registry request try #1 at 10:35:10 AM 1463 verbose etag "6T8WS0QTQ30IF9TBO58H8W8MS" 1464 http request GET https://registry.npmjs.org/fstream 1465 verbose request uri https://registry.npmjs.org/block-stream 1466 verbose request no auth needed 1467 info attempt registry request try #1 at 10:35:11 AM 1468 verbose etag "C7OJPKZD1OK2WI9TVJ794V0P5" 1469 http request GET https://registry.npmjs.org/block-stream 1470 silly addNameRange number 2 { name: 'forever-agent', range: '>=0.6.1 <0.7.0', hasData: true } 1471 silly addNameRange versions [ 'forever-agent', 1471 silly addNameRange [ '0.2.0', '0.3.0', '0.4.0', '0.5.0', '0.5.2', '0.6.0', '0.6.1' ] ] 1472 verbose addNamed forever-agent@0.6.1 1473 silly addNamed semver.valid 0.6.1 1474 silly addNamed semver.validRange 0.6.1 1475 silly gunzTarPerm modes [ '777', '666' ] 1476 silly cache afterAdd isstream@0.1.2 1477 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\isstream\0.1.2\package\package.json not in flight; writing 1478 silly cache afterAdd json-stringify-safe@5.0.1 1479 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\json-stringify-safe\5.0.1\package\package.json not in flight; writing 1480 silly cache afterAdd combined-stream@1.0.5 1481 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\combined-stream\1.0.5\package\package.json not in flight; writing 1482 silly cache afterAdd caseless@0.11.0 1483 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\caseless\0.11.0\package\package.json not in flight; writing 1484 silly cache afterAdd http-signature@1.1.1 1485 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\http-signature\1.1.1\package\package.json not in flight; writing 1486 silly cache afterAdd extend@3.0.0 1487 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\extend\3.0.0\package\package.json not in flight; writing 1488 silly cache afterAdd form-data@1.0.0-rc4 1489 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\form-data\1.0.0-rc4\package\package.json not in flight; writing 1490 silly cache afterAdd is-typedarray@1.0.0 1491 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\is-typedarray\1.0.0\package\package.json not in flight; writing 1492 silly cache afterAdd har-validator@2.0.6 1493 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\har-validator\2.0.6\package\package.json not in flight; writing 1494 silly cache afterAdd mime-types@2.1.10 1495 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\mime-types\2.1.10\package\package.json not in flight; writing 1496 silly cache afterAdd node-uuid@1.4.7 1497 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\node-uuid\1.4.7\package\package.json not in flight; writing 1498 silly cache afterAdd bl@1.1.2 1499 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\bl\1.1.2\package\package.json not in flight; writing 1500 silly cache afterAdd stringstream@0.0.5 1501 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\stringstream\0.0.5\package\package.json not in flight; writing 1502 silly cache afterAdd tunnel-agent@0.4.2 1503 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\tunnel-agent\0.4.2\package\package.json not in flight; writing 1504 silly cache afterAdd aws-sign2@0.6.0 1505 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\aws-sign2\0.6.0\package\package.json not in flight; writing 1506 silly cache afterAdd oauth-sign@0.8.1 1507 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\oauth-sign\0.8.1\package\package.json not in flight; writing 1508 silly addNameRange number 2 { name: 'aws4', range: '>=1.2.1 <2.0.0', hasData: true } 1509 silly addNameRange versions [ 'aws4', 1509 silly addNameRange [ '0.0.1', 1509 silly addNameRange '0.1.0', 1509 silly addNameRange '0.1.1', 1509 silly addNameRange '0.1.2', 1509 silly addNameRange '0.1.3', 1509 silly addNameRange '0.1.4', 1509 silly addNameRange '0.1.5', 1509 silly addNameRange '0.1.6', 1509 silly addNameRange '0.1.7', 1509 silly addNameRange '0.1.8', 1509 silly addNameRange '0.1.9', 1509 silly addNameRange '0.1.10', 1509 silly addNameRange '0.1.12', 1509 silly addNameRange '0.2.0', 1509 silly addNameRange '0.2.1', 1509 silly addNameRange '0.2.2', 1509 silly addNameRange '0.2.3', 1509 silly addNameRange '0.3.0', 1509 silly addNameRange '0.4.0', 1509 silly addNameRange '0.4.1', 1509 silly addNameRange '0.4.2', 1509 silly addNameRange '0.5.0', 1509 silly addNameRange '0.5.1', 1509 silly addNameRange '1.0.0', 1509 silly addNameRange '1.0.1', 1509 silly addNameRange '1.0.2', 1509 silly addNameRange '1.0.3', 1509 silly addNameRange '1.0.4', 1509 silly addNameRange '1.1.0', 1509 silly addNameRange '1.2.0', 1509 silly addNameRange '1.2.1', 1509 silly addNameRange '1.3.1', 1509 silly addNameRange '1.3.2' ] ] 1510 verbose addNamed aws4@1.3.2 1511 silly addNamed semver.valid 1.3.2 1512 silly addNamed semver.validRange 1.3.2 1513 silly addNameRange number 2 { name: 'qs', range: '>=6.1.0 <6.2.0', hasData: true } 1514 silly addNameRange versions [ 'qs', 1514 silly addNameRange [ '0.0.1', 1514 silly addNameRange '0.0.2', 1514 silly addNameRange '0.0.3', 1514 silly addNameRange '0.0.4', 1514 silly addNameRange '0.0.5', 1514 silly addNameRange '0.0.6', 1514 silly addNameRange '0.0.7', 1514 silly addNameRange '0.1.0', 1514 silly addNameRange '0.2.0', 1514 silly addNameRange '0.3.0', 1514 silly addNameRange '0.3.1', 1514 silly addNameRange '0.3.2', 1514 silly addNameRange '0.4.0', 1514 silly addNameRange '0.4.1', 1514 silly addNameRange '0.4.2', 1514 silly addNameRange '0.5.0', 1514 silly addNameRange '0.5.1', 1514 silly addNameRange '0.5.2', 1514 silly addNameRange '0.5.3', 1514 silly addNameRange '0.5.4', 1514 silly addNameRange '0.5.5', 1514 silly addNameRange '0.5.6', 1514 silly addNameRange '0.6.0', 1514 silly addNameRange '0.6.1', 1514 silly addNameRange '0.6.2', 1514 silly addNameRange '0.6.3', 1514 silly addNameRange '0.6.4', 1514 silly addNameRange '0.6.5', 1514 silly addNameRange '0.6.6', 1514 silly addNameRange '1.0.0', 1514 silly addNameRange '1.0.1', 1514 silly addNameRange '1.0.2', 1514 silly addNameRange '1.1.0', 1514 silly addNameRange '1.2.0', 1514 silly addNameRange '1.2.1', 1514 silly addNameRange '1.2.2', 1514 silly addNameRange '2.0.0', 1514 silly addNameRange '2.1.0', 1514 silly addNameRange '2.2.0', 1514 silly addNameRange '2.2.1', 1514 silly addNameRange '2.2.2', 1514 silly addNameRange '2.2.3', 1514 silly addNameRange '2.2.4', 1514 silly addNameRange '2.2.5', 1514 silly addNameRange '2.3.0', 1514 silly addNameRange '2.3.1', 1514 silly addNameRange '2.3.2', 1514 silly addNameRange '2.3.3', 1514 silly addNameRange '2.4.0', 1514 silly addNameRange '2.4.1', 1514 silly addNameRange '2.4.2', 1514 silly addNameRange '3.0.0', 1514 silly addNameRange '3.1.0', 1514 silly addNameRange '4.0.0', 1514 silly addNameRange '5.0.0', 1514 silly addNameRange '5.1.0', 1514 silly addNameRange '5.2.0', 1514 silly addNameRange '6.0.0', 1514 silly addNameRange '6.0.1', 1514 silly addNameRange '6.0.2', 1514 silly addNameRange '6.1.0' ] ] 1515 verbose addNamed qs@6.1.0 1516 silly addNamed semver.valid 6.1.0 1517 silly addNamed semver.validRange 6.1.0 1518 silly cache afterAdd tough-cookie@2.2.2 1519 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\tough-cookie\2.2.2\package\package.json not in flight; writing 1520 silly cache afterAdd hawk@3.1.3 1521 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\hawk\3.1.3\package\package.json not in flight; writing 1522 silly gunzTarPerm extractEntry package.json 1523 silly cache afterAdd forever-agent@0.6.1 1524 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\forever-agent\0.6.1\package\package.json not in flight; writing 1525 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\combined-stream\1.0.5\package\package.json written 1526 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\isstream\0.1.2\package\package.json written 1527 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\caseless\0.11.0\package\package.json written 1528 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\http-signature\1.1.1\package\package.json written 1529 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\form-data\1.0.0-rc4\package\package.json written 1530 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\extend\3.0.0\package\package.json written 1531 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\json-stringify-safe\5.0.1\package\package.json written 1532 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\is-typedarray\1.0.0\package\package.json written 1533 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\mime-types\2.1.10\package\package.json written 1534 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\stringstream\0.0.5\package\package.json written 1535 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\bl\1.1.2\package\package.json written 1536 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\har-validator\2.0.6\package\package.json written 1537 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\node-uuid\1.4.7\package\package.json written 1538 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\tunnel-agent\0.4.2\package\package.json written 1539 silly gunzTarPerm extractEntry README.md 1540 silly gunzTarPerm extractEntry LICENSE 1541 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\aws-sign2\0.6.0\package\package.json written 1542 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\tough-cookie\2.2.2\package\package.json written 1543 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\oauth-sign\0.8.1\package\package.json written 1544 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\hawk\3.1.3\package\package.json written 1545 silly cache afterAdd aws4@1.3.2 1546 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\aws4\1.3.2\package\package.json not in flight; writing 1547 silly cache afterAdd qs@6.1.0 1548 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\qs\6.1.0\package\package.json not in flight; writing 1549 http 304 https://registry.npmjs.org/block-stream 1550 silly get cb [ 304, 1550 silly get { date: 'Thu, 28 Apr 2016 09:35:11 GMT', 1550 silly get via: '1.1 varnish', 1550 silly get 'cache-control': 'max-age=300', 1550 silly get etag: '"C7OJPKZD1OK2WI9TVJ794V0P5"', 1550 silly get age: '150', 1550 silly get connection: 'keep-alive', 1550 silly get 'x-served-by': 'cache-lcy1129-LCY', 1550 silly get 'x-cache': 'HIT', 1550 silly get 'x-cache-hits': '2', 1550 silly get 'x-timer': 'S1461836111.030906,VS0,VE0', 1550 silly get vary: 'Accept-Encoding' } ] 1551 verbose etag https://registry.npmjs.org/block-stream from cache 1552 verbose get saving block-stream to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\block-stream\.cache.json 1553 http 304 https://registry.npmjs.org/inherits 1554 silly get cb [ 304, 1554 silly get { date: 'Thu, 28 Apr 2016 09:35:11 GMT', 1554 silly get via: '1.1 varnish', 1554 silly get 'cache-control': 'max-age=300', 1554 silly get etag: '"9C23BNETE30UZVYRVML0QUTBX"', 1554 silly get age: '166', 1554 silly get connection: 'keep-alive', 1554 silly get 'x-served-by': 'cache-lcy1132-LCY', 1554 silly get 'x-cache': 'HIT', 1554 silly get 'x-cache-hits': '37', 1554 silly get 'x-timer': 'S1461836111.030936,VS0,VE0', 1554 silly get vary: 'Accept-Encoding' } ] 1555 verbose etag https://registry.npmjs.org/inherits from cache 1556 verbose get saving inherits to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\inherits\.cache.json 1557 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\forever-agent\0.6.1\package\package.json written 1558 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\aws4\1.3.2\package\package.json written 1559 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\qs\6.1.0\package\package.json written 1560 silly install resolved [ { author: 1560 silly install resolved { name: 'Felix Geisendörfer', 1560 silly install resolved email: 'felix@debuggable.com', 1560 silly install resolved url: 'http://debuggable.com/' }, 1560 silly install resolved name: 'combined-stream', 1560 silly install resolved description: 'A stream that emits multiple other streams one after another.', 1560 silly install resolved version: '1.0.5', 1560 silly install resolved homepage: 'https://github.com/felixge/node-combined-stream', 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'git://github.com/felixge/node-combined-stream.git' }, 1560 silly install resolved main: './lib/combined_stream', 1560 silly install resolved scripts: { test: 'node test/run.js' }, 1560 silly install resolved engines: { node: '>= 0.8' }, 1560 silly install resolved dependencies: { 'delayed-stream': '~1.0.0' }, 1560 silly install resolved devDependencies: { far: '~0.0.7' }, 1560 silly install resolved license: 'MIT', 1560 silly install resolved readme: '# combined-stream\n\nA stream that emits multiple other streams one after another.\n\n**NB** Currently `combined-stream` works with streams vesrion 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatability with `combined-stream`.\n\n- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module.\n\n- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another.\n\n## Installation\n\n``` bash\nnpm install combined-stream\n```\n\n## Usage\n\nHere is a simple example that shows how you can use combined-stream to combine\ntwo files into one:\n\n``` javascript\nvar CombinedStream = require(\'combined-stream\');\nvar fs = require(\'fs\');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(fs.createReadStream(\'file1.txt\'));\ncombinedStream.append(fs.createReadStream(\'file2.txt\'));\n\ncombinedStream.pipe(fs.createWriteStream(\'combined.txt\'));\n```\n\nWhile the example above works great, it will pause all source streams until\nthey are needed. If you don\'t want that to happen, you can set `pauseStreams`\nto `false`:\n\n``` javascript\nvar CombinedStream = require(\'combined-stream\');\nvar fs = require(\'fs\');\n\nvar combinedStream = CombinedStream.create({pauseStreams: false});\ncombinedStream.append(fs.createReadStream(\'file1.txt\'));\ncombinedStream.append(fs.createReadStream(\'file2.txt\'));\n\ncombinedStream.pipe(fs.createWriteStream(\'combined.txt\'));\n```\n\nHowever, what if you don\'t have all the source streams yet, or you don\'t want\nto allocate the resources (file descriptors, memory, etc.) for them right away?\nWell, in that case you can simply provide a callback that supplies the stream\nby calling a `next()` function:\n\n``` javascript\nvar CombinedStream = require(\'combined-stream\');\nvar fs = require(\'fs\');\n\nvar combinedStream = CombinedStream.create();\ncombinedStream.append(function(next) {\n next(fs.createReadStream(\'file1.txt\'));\n});\ncombinedStream.append(function(next) {\n next(fs.createReadStream(\'file2.txt\'));\n});\n\ncombinedStream.pipe(fs.createWriteStream(\'combined.txt\'));\n```\n\n## API\n\n### CombinedStream.create([options])\n\nReturns a new combined stream object. Available options are:\n\n* `maxDataSize`\n* `pauseStreams`\n\nThe effect of those options is described below.\n\n### combinedStream.pauseStreams = `true`\n\nWhether to apply back pressure to the underlaying streams. If set to `false`,\nthe underlaying streams will never be paused. If set to `true`, the\nunderlaying streams will be paused right after being appended, as well as when\n`delayedStream.pipe()` wants to throttle.\n\n### combinedStream.maxDataSize = `2 * 1024 * 1024`\n\nThe maximum amount of bytes (or characters) to buffer for all source streams.\nIf this value is exceeded, `combinedStream` emits an `\'error\'` event.\n\n### combinedStream.dataSize = `0`\n\nThe amount of bytes (or characters) currently buffered by `combinedStream`.\n\n### combinedStream.append(stream)\n\nAppends the given `stream` to the combinedStream object. If `pauseStreams` is\nset to `true, this stream will also be paused right away.\n\n`streams` can also be a function that takes one parameter called `next`. `next`\nis a function that must be invoked in order to provide the `next` stream, see\nexample above.\n\nRegardless of how the `stream` is appended, combined-stream always attaches an\n`\'error\'` listener to it, so you don\'t have to do that manually.\n\nSpecial case: `stream` can also be a String or Buffer.\n\n### combinedStream.write(data)\n\nYou should not call this, `combinedStream` takes care of piping the appended\nstreams into itself for you.\n\n### combinedStream.resume()\n\nCauses `combinedStream` to start drain the streams it manages. The function is\nidempotent, and also emits a `\'resume\'` event each time which usually goes to\nthe stream that is currently being drained.\n\n### combinedStream.pause();\n\nIf `combinedStream.pauseStreams` is set to `false`, this does nothing.\nOtherwise a `\'pause\'` event is emitted, this goes to the stream that is\ncurrently being drained, so you can use it to apply back pressure.\n\n### combinedStream.end();\n\nSets `combinedStream.writable` to false, emits an `\'end\'` event, and removes\nall streams from the queue.\n\n### combinedStream.destroy();\n\nSame as `combinedStream.end()`, except it emits a `\'close\'` event instead of\n`\'end\'`.\n\n## License\n\ncombined-stream is licensed under the MIT license.\n', 1560 silly install resolved readmeFilename: 'Readme.md', 1560 silly install resolved bugs: { url: 'https://github.com/felixge/node-combined-stream/issues' }, 1560 silly install resolved _id: 'combined-stream@1.0.5', 1560 silly install resolved _shasum: '938370a57b4a51dea2c77c15d5c5fdf895164009', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz', 1560 silly install resolved _from: 'combined-stream@>=1.0.5 <1.1.0' }, 1560 silly install resolved { name: 'isstream', 1560 silly install resolved version: '0.1.2', 1560 silly install resolved description: 'Determine if an object is a Stream', 1560 silly install resolved main: 'isstream.js', 1560 silly install resolved scripts: { test: 'tar --xform \'s/^package/readable-stream-1.0/\' -zxf readable-stream-1.0.*.tgz && tar --xform \'s/^package/readable-stream-1.1/\' -zxf readable-stream-1.1.*.tgz && node test.js; rm -rf readable-stream-1.?/' }, 1560 silly install resolved repository: { type: 'git', url: 'https://github.com/rvagg/isstream.git' }, 1560 silly install resolved keywords: [ 'stream', 'type', 'streams', 'readable-stream', 'hippo' ], 1560 silly install resolved devDependencies: 1560 silly install resolved { tape: '~2.12.3', 1560 silly install resolved 'core-util-is': '~1.0.0', 1560 silly install resolved isarray: '0.0.1', 1560 silly install resolved string_decoder: '~0.10.x', 1560 silly install resolved inherits: '~2.0.1' }, 1560 silly install resolved author: { name: 'Rod Vagg', email: 'rod@vagg.org' }, 1560 silly install resolved license: 'MIT', 1560 silly install resolved bugs: { url: 'https://github.com/rvagg/isstream/issues' }, 1560 silly install resolved homepage: 'https://github.com/rvagg/isstream', 1560 silly install resolved readme: '# isStream\n\n[![Build Status](https://secure.travis-ci.org/rvagg/isstream.png)](http://travis-ci.org/rvagg/isstream)\n\n**Test if an object is a `Stream`**\n\n[![NPM](https://nodei.co/npm/isstream.svg)](https://nodei.co/npm/isstream/)\n\nThe missing `Stream.isStream(obj)`: determine if an object is standard Node.js `Stream`. Works for Node-core `Stream` objects (for 0.8, 0.10, 0.11, and in theory, older and newer versions) and all versions of **[readable-stream](https://github.com/isaacs/readable-stream)**.\n\n## Usage:\n\n```js\nvar isStream = require(\'isstream\')\nvar Stream = require(\'stream\')\n\nisStream(new Stream()) // true\n\nisStream({}) // false\n\nisStream(new Stream.Readable()) // true\nisStream(new Stream.Writable()) // true\nisStream(new Stream.Duplex()) // true\nisStream(new Stream.Transform()) // true\nisStream(new Stream.PassThrough()) // true\n```\n\n## But wait! There\'s more!\n\nYou can also test for `isReadable(obj)`, `isWritable(obj)` and `isDuplex(obj)` to test for implementations of Streams2 (and Streams3) base classes.\n\n```js\nvar isReadable = require(\'isstream\').isReadable\nvar isWritable = require(\'isstream\').isWritable\nvar isDuplex = require(\'isstream\').isDuplex\nvar Stream = require(\'stream\')\n\nisReadable(new Stream()) // false\nisWritable(new Stream()) // false\nisDuplex(new Stream()) // false\n\nisReadable(new Stream.Readable()) // true\nisReadable(new Stream.Writable()) // false\nisReadable(new Stream.Duplex()) // true\nisReadable(new Stream.Transform()) // true\nisReadable(new Stream.PassThrough()) // true\n\nisWritable(new Stream.Readable()) // false\nisWritable(new Stream.Writable()) // true\nisWritable(new Stream.Duplex()) // true\nisWritable(new Stream.Transform()) // true\nisWritable(new Stream.PassThrough()) // true\n\nisDuplex(new Stream.Readable()) // false\nisDuplex(new Stream.Writable()) // false\nisDuplex(new Stream.Duplex()) // true\nisDuplex(new Stream.Transform()) // true\nisDuplex(new Stream.PassThrough()) // true\n```\n\n*Reminder: when implementing your own streams, please [use **readable-stream** rather than core streams](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html).*\n\n\n## License\n\n**isStream** is Copyright (c) 2015 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'isstream@0.1.2', 1560 silly install resolved _shasum: '47e63f7af55afa6f92e1500e690eb8b8529c099a', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz', 1560 silly install resolved _from: 'isstream@>=0.1.2 <0.2.0' }, 1560 silly install resolved { name: 'caseless', 1560 silly install resolved version: '0.11.0', 1560 silly install resolved description: 'Caseless object set/get/has, very useful when working with HTTP headers.', 1560 silly install resolved main: 'index.js', 1560 silly install resolved scripts: { test: 'node test.js' }, 1560 silly install resolved repository: { type: 'git', url: 'https://github.com/mikeal/caseless' }, 1560 silly install resolved keywords: [ 'headers', 'http', 'caseless' ], 1560 silly install resolved test: 'node test.js', 1560 silly install resolved author: { name: 'Mikeal Rogers', email: 'mikeal.rogers@gmail.com' }, 1560 silly install resolved license: 'Apache-2.0', 1560 silly install resolved bugs: { url: 'https://github.com/mikeal/caseless/issues' }, 1560 silly install resolved devDependencies: { tape: '^2.10.2' }, 1560 silly install resolved readme: '## Caseless -- wrap an object to set and get property with caseless semantics but also preserve caseing.\n\nThis library is incredibly useful when working with HTTP headers. It allows you to get/set/check for headers in a caseless manner while also preserving the caseing of headers the first time they are set.\n\n## Usage\n\n```javascript\nvar headers = {}\n , c = caseless(headers)\n ;\nc.set(\'a-Header\', \'asdf\')\nc.get(\'a-header\') === \'asdf\'\n```\n\n## has(key)\n\nHas takes a name and if it finds a matching header will return that header name with the preserved caseing it was set with.\n\n```javascript\nc.has(\'a-header\') === \'a-Header\'\n```\n\n## set(key, value[, clobber=true])\n\nSet is fairly straight forward except that if the header exists and clobber is disabled it will add `\',\'+value` to the existing header.\n\n```javascript\nc.set(\'a-Header\', \'fdas\')\nc.set(\'a-HEADER\', \'more\', false)\nc.get(\'a-header\') === \'fdsa,more\'\n```\n\n## swap(key)\n\nSwaps the casing of a header with the new one that is passed in.\n\n```javascript\nvar headers = {}\n , c = caseless(headers)\n ;\nc.set(\'a-Header\', \'fdas\')\nc.swap(\'a-HEADER\')\nc.has(\'a-header\') === \'a-HEADER\'\nheaders === {\'a-HEADER\': \'fdas\'}\n```\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved homepage: 'https://github.com/mikeal/caseless', 1560 silly install resolved _id: 'caseless@0.11.0', 1560 silly install resolved _shasum: '715b96ea9841593cc33067923f5ec60ebda4f7d7', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz', 1560 silly install resolved _from: 'caseless@>=0.11.0 <0.12.0' }, 1560 silly install resolved { name: 'http-signature', 1560 silly install resolved description: 'Reference implementation of Joyent\'s HTTP Signature scheme.', 1560 silly install resolved version: '1.1.1', 1560 silly install resolved license: 'MIT', 1560 silly install resolved author: { name: 'Joyent, Inc' }, 1560 silly install resolved contributors: [ [Object], [Object], [Object] ], 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'git://github.com/joyent/node-http-signature.git' }, 1560 silly install resolved homepage: 'https://github.com/joyent/node-http-signature/', 1560 silly install resolved bugs: { url: 'https://github.com/joyent/node-http-signature/issues' }, 1560 silly install resolved keywords: [ 'https', 'request' ], 1560 silly install resolved engines: { node: '>=0.8', npm: '>=1.3.7' }, 1560 silly install resolved main: 'lib/index.js', 1560 silly install resolved scripts: { test: 'tap test/*.js' }, 1560 silly install resolved dependencies: { 'assert-plus': '^0.2.0', jsprim: '^1.2.2', sshpk: '^1.7.0' }, 1560 silly install resolved devDependencies: { 'node-uuid': '^1.4.1', tap: '0.4.2' }, 1560 silly install resolved readme: '# node-http-signature\n\nnode-http-signature is a node.js library that has client and server components\nfor Joyent\'s [HTTP Signature Scheme](http_signing.md).\n\n## Usage\n\nNote the example below signs a request with the same key/cert used to start an\nHTTP server. This is almost certainly not what you actually want, but is just\nused to illustrate the API calls; you will need to provide your own key\nmanagement in addition to this library.\n\n### Client\n\n```js\nvar fs = require(\'fs\');\nvar https = require(\'https\');\nvar httpSignature = require(\'http-signature\');\n\nvar key = fs.readFileSync(\'./key.pem\', \'ascii\');\n\nvar options = {\n host: \'localhost\',\n port: 8443,\n path: \'/\',\n method: \'GET\',\n headers: {}\n};\n\n// Adds a \'Date\' header in, signs it, and adds the\n// \'Authorization\' header in.\nvar req = https.request(options, function(res) {\n console.log(res.statusCode);\n});\n\n\nhttpSignature.sign(req, {\n key: key,\n keyId: \'./cert.pem\'\n});\n\nreq.end();\n```\n\n### Server\n\n```js\nvar fs = require(\'fs\');\nvar https = require(\'https\');\nvar httpSignature = require(\'http-signature\');\n\nvar options = {\n key: fs.readFileSync(\'./key.pem\'),\n cert: fs.readFileSync(\'./cert.pem\')\n};\n\nhttps.createServer(options, function (req, res) {\n var rc = 200;\n var parsed = httpSignature.parseRequest(req);\n var pub = fs.readFileSync(parsed.keyId, \'ascii\');\n if (!httpSignature.verifySignature(parsed, pub))\n rc = 401;\n\n res.writeHead(rc);\n res.end();\n}).listen(8443);\n```\n\n## Installation\n\n npm install http-signature\n\n## License\n\nMIT.\n\n## Bugs\n\nSee .\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'http-signature@1.1.1', 1560 silly install resolved _shasum: 'df72e267066cd0ac67fb76adf8e134a8fbcf91bf', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz', 1560 silly install resolved _from: 'http-signature@>=1.1.0 <1.2.0' }, 1560 silly install resolved { author: 1560 silly install resolved { name: 'Felix Geisendörfer', 1560 silly install resolved email: 'felix@debuggable.com', 1560 silly install resolved url: 'http://debuggable.com/' }, 1560 silly install resolved name: 'form-data', 1560 silly install resolved description: 'A library to create readable "multipart/form-data" streams. Can be used to submit forms and file uploads to other web applications.', 1560 silly install resolved version: '1.0.0-rc4', 1560 silly install resolved repository: { type: 'git', url: 'git://github.com/form-data/form-data.git' }, 1560 silly install resolved main: './lib/form_data', 1560 silly install resolved browser: './lib/browser', 1560 silly install resolved scripts: 1560 silly install resolved { pretest: 'rimraf coverage test/tmp', 1560 silly install resolved test: 'istanbul cover --report none test/run.js', 1560 silly install resolved posttest: 'istanbul report', 1560 silly install resolved lint: 'eslint lib/*.js test/*.js test/**/*.js', 1560 silly install resolved predebug: 'rimraf coverage test/tmp', 1560 silly install resolved debug: 'verbose=1 ./test/run.js', 1560 silly install resolved check: 'istanbul check-coverage coverage/coverage*.json', 1560 silly install resolved coverage: 'codacy-coverage < ./coverage/lcov.info; true' }, 1560 silly install resolved 'pre-commit': [ 'lint', 'test', 'check' ], 1560 silly install resolved engines: { node: '>= 0.10' }, 1560 silly install resolved dependencies: 1560 silly install resolved { async: '^1.5.2', 1560 silly install resolved 'combined-stream': '^1.0.5', 1560 silly install resolved 'mime-types': '^2.1.10' }, 1560 silly install resolved license: 'MIT', 1560 silly install resolved devDependencies: 1560 silly install resolved { 'codacy-coverage': '^1.1.3', 1560 silly install resolved coveralls: '^2.11.8', 1560 silly install resolved 'cross-spawn': '^2.1.5', 1560 silly install resolved eslint: '^2.4.0', 1560 silly install resolved fake: '^0.2.2', 1560 silly install resolved far: '^0.0.7', 1560 silly install resolved formidable: '^1.0.17', 1560 silly install resolved istanbul: '^0.4.2', 1560 silly install resolved 'pre-commit': '^1.1.2', 1560 silly install resolved request: '^2.69.0', 1560 silly install resolved rimraf: '^2.5.2' }, 1560 silly install resolved readme: '# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data)\n\nA library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications.\n\nThe API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].\n\n[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface\n[streams2-thing]: http://nodejs.org/api/stream.html#stream_compatibility_with_older_node_versions\n\n[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:0.10-5.x)](https://travis-ci.org/form-data/form-data)\n[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/form-data/master.svg?label=windows:0.10-5.x)](https://ci.appveyor.com/project/alexindigo/form-data)\n[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)\n\n[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data)\n[![Codacy Badge](https://img.shields.io/codacy/43ece80331c246179695e41f81eeffe2.svg)](https://www.codacy.com/app/form-data/form-data)\n[![bitHound Overall Score](https://www.bithound.io/github/form-data/form-data/badges/score.svg)](https://www.bithound.io/github/form-data/form-data)\n\n## Install\n\n```\nnpm install form-data\n```\n\n## Usage\n\nIn this example we are constructing a form with 3 fields that contain a string,\na buffer and a file stream.\n\n``` javascript\nvar FormData = require(\'form-data\');\nvar fs = require(\'fs\');\n\nvar form = new FormData();\nform.append(\'my_field\', \'my value\');\nform.append(\'my_buffer\', new Buffer(10));\nform.append(\'my_file\', fs.createReadStream(\'/foo/bar.jpg\'));\n```\n\nAlso you can use http-response stream:\n\n``` javascript\nvar FormData = require(\'form-data\');\nvar http = require(\'http\');\n\nvar form = new FormData();\n\nhttp.request(\'http://nodejs.org/images/logo.png\', function(response) {\n form.append(\'my_field\', \'my value\');\n form.append(\'my_buffer\', new Buffer(10));\n form.append(\'my_logo\', response);\n});\n```\n\nOr @mikeal\'s [request](https://github.com/request/request) stream:\n\n``` javascript\nvar FormData = require(\'form-data\');\nvar request = require(\'request\');\n\nvar form = new FormData();\n\nform.append(\'my_field\', \'my value\');\nform.append(\'my_buffer\', new Buffer(10));\nform.append(\'my_logo\', request(\'http://nodejs.org/images/logo.png\'));\n```\n\nIn order to submit this form to a web application, call ```submit(url, [callback])``` method:\n\n``` javascript\nform.submit(\'http://example.org/\', function(err, res) {\n // res – response object (http.IncomingMessage) //\n res.resume();\n});\n\n```\n\nFor more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.\n\n### Alternative submission methods\n\nYou can use node\'s http client interface:\n\n``` javascript\nvar http = require(\'http\');\n\nvar request = http.request({\n method: \'post\',\n host: \'example.org\',\n path: \'/upload\',\n headers: form.getHeaders()\n});\n\nform.pipe(request);\n\nrequest.on(\'response\', function(res) {\n console.log(res.statusCode);\n});\n```\n\nOr if you would prefer the `\'Content-Length\'` header to be set for you:\n\n``` javascript\nform.submit(\'example.org/upload\', function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nTo use custom headers and pre-known length in parts:\n\n``` javascript\nvar CRLF = \'\\r\\n\';\nvar form = new FormData();\n\nvar options = {\n header: CRLF + \'--\' + form.getBoundary() + CRLF + \'X-Custom-Header: 123\' + CRLF + CRLF,\n knownLength: 1\n};\n\nform.append(\'my_buffer\', buffer, options);\n\nform.submit(\'http://example.com/\', function(err, res) {\n if (err) throw err;\n console.log(\'Done\');\n});\n```\n\nForm-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal\'s request```), for some other types of streams you\'d need to provide "file"-related information manually:\n\n``` javascript\nsomeModule.stream(function(err, stdout, stderr) {\n if (err) throw err;\n\n var form = new FormData();\n\n form.append(\'file\', stdout, {\n filename: \'unicycle.jpg\',\n contentType: \'image/jpg\',\n knownLength: 19806\n });\n\n form.submit(\'http://example.com/\', function(err, res) {\n if (err) throw err;\n console.log(\'Done\');\n });\n});\n```\n\nFor edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:\n\n``` javascript\nform.submit({\n host: \'example.com\',\n path: \'/probably.php?extra=params\',\n auth: \'username:password\'\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\nIn case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:\n\n``` javascript\nform.submit({\n host: \'example.com\',\n path: \'/surelynot.php\',\n headers: {\'x-test-header\': \'test-header-value\'}\n}, function(err, res) {\n console.log(res.statusCode);\n});\n```\n\n### Integration with other libraries\n\n#### Request\n\nForm submission using [request](https://github.com/request/request):\n\n```javascript\nvar formData = {\n my_field: \'my_value\',\n my_file: fs.createReadStream(__dirname + \'/unicycle.jpg\'),\n};\n\nrequest.post({url:\'http://service.com/upload\', formData: formData}, function(err, httpResponse, body) {\n if (err) {\n return console.error(\'upload failed:\', err);\n }\n console.log(\'Upload successful! Server responded with:\', body);\n});\n```\n\nFor more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).\n\n#### node-fetch\n\nYou can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):\n\n```javascript\nvar form = new FormData();\n\nform.append(\'a\', 1);\n\nfetch(\'http://example.com\', { method: \'POST\', body: form })\n .then(function(res) {\n return res.json();\n }).then(function(json) {\n console.log(json);\n });\n```\n\n## Notes\n\n- ```getLengthSync()``` method DOESN\'T calculate length for streams, use ```knownLength``` options as workaround.\n- If it feels like FormData hangs after submit and you\'re on ```node-0.10```, please check [Compatibility with Older Node Versions][streams2-thing]\n\n## License\n\nForm-Data is licensed under the MIT license.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/form-data/form-data/issues' }, 1560 silly install resolved homepage: 'https://github.com/form-data/form-data', 1560 silly install resolved _id: 'form-data@1.0.0-rc4', 1560 silly install resolved _shasum: '05ac6bc22227b43e4461f488161554699d4f8b5e', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz', 1560 silly install resolved _from: 'form-data@>=1.0.0-rc3 <1.1.0' }, 1560 silly install resolved { name: 'extend', 1560 silly install resolved author: 1560 silly install resolved { name: 'Stefan Thomas', 1560 silly install resolved email: 'justmoon@members.fsf.org', 1560 silly install resolved url: 'http://www.justmoon.net' }, 1560 silly install resolved version: '3.0.0', 1560 silly install resolved description: 'Port of jQuery.extend for node.js and the browser', 1560 silly install resolved main: 'index', 1560 silly install resolved scripts: 1560 silly install resolved { test: 'npm run lint && node test/index.js && npm run coverage-quiet', 1560 silly install resolved coverage: 'covert test/index.js', 1560 silly install resolved 'coverage-quiet': 'covert test/index.js --quiet', 1560 silly install resolved lint: 'npm run jscs && npm run eslint', 1560 silly install resolved jscs: 'jscs *.js */*.js', 1560 silly install resolved eslint: 'eslint *.js */*.js' }, 1560 silly install resolved contributors: [ [Object] ], 1560 silly install resolved keywords: [ 'extend', 'clone', 'merge' ], 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'https://github.com/justmoon/node-extend.git' }, 1560 silly install resolved dependencies: {}, 1560 silly install resolved devDependencies: 1560 silly install resolved { tape: '^4.0.0', 1560 silly install resolved covert: '^1.1.0', 1560 silly install resolved jscs: '^1.13.1', 1560 silly install resolved eslint: '^0.24.0' }, 1560 silly install resolved license: 'MIT', 1560 silly install resolved readme: '[![Build Status][travis-svg]][travis-url]\n[![dependency status][deps-svg]][deps-url]\n[![dev dependency status][dev-deps-svg]][dev-deps-url]\n\n# extend() for Node.js [![Version Badge][npm-version-png]][npm-url]\n\n`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true.\n\n## Installation\n\nThis package is available on [npm][npm-url] as: `extend`\n\n``` sh\nnpm install extend\n```\n\n## Usage\n\n**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)**\n\n*Extend one object with one or more others, returning the modified object.*\n\nKeep in mind that the target object will be modified, and will be returned from extend().\n\nIf a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s).\nUndefined properties are not copied. However, properties inherited from the object\'s prototype will be copied over.\nWarning: passing `false` as the first argument is not supported.\n\n### Arguments\n\n* `deep` *Boolean* (optional)\nIf set, the merge becomes recursive (i.e. deep copy).\n* `target`\t*Object*\nThe object to extend.\n* `object1`\t*Object*\nThe object that will be merged into the first.\n* `objectN` *Object* (Optional)\nMore objects to merge into the first.\n\n## License\n\n`node-extend` is licensed under the [MIT License][mit-license-url].\n\n## Acknowledgements\n\nAll credit to the jQuery authors for perfecting this amazing utility.\n\nPorted to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb].\n\n[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg\n[travis-url]: https://travis-ci.org/justmoon/node-extend\n[npm-url]: https://npmjs.org/package/extend\n[mit-license-url]: http://opensource.org/licenses/MIT\n[github-justmoon]: https://github.com/justmoon\n[github-insin]: https://github.com/insin\n[github-ljharb]: https://github.com/ljharb\n[npm-version-png]: http://vb.teelaun.ch/justmoon/node-extend.svg\n[deps-svg]: https://david-dm.org/justmoon/node-extend.svg\n[deps-url]: https://david-dm.org/justmoon/node-extend\n[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg\n[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies\n\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/justmoon/node-extend/issues' }, 1560 silly install resolved homepage: 'https://github.com/justmoon/node-extend', 1560 silly install resolved _id: 'extend@3.0.0', 1560 silly install resolved _shasum: '5a474353b9f3353ddd8176dfd37b91c83a46f1d4', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/extend/-/extend-3.0.0.tgz', 1560 silly install resolved _from: 'extend@>=3.0.0 <3.1.0' }, 1560 silly install resolved { name: 'json-stringify-safe', 1560 silly install resolved version: '5.0.1', 1560 silly install resolved description: 'Like JSON.stringify, but doesn\'t blow up on circular refs.', 1560 silly install resolved keywords: [ 'json', 'stringify', 'circular', 'safe' ], 1560 silly install resolved homepage: 'https://github.com/isaacs/json-stringify-safe', 1560 silly install resolved bugs: { url: 'https://github.com/isaacs/json-stringify-safe/issues' }, 1560 silly install resolved author: 1560 silly install resolved { name: 'Isaac Z. Schlueter', 1560 silly install resolved email: 'i@izs.me', 1560 silly install resolved url: 'http://blog.izs.me' }, 1560 silly install resolved contributors: [ [Object] ], 1560 silly install resolved license: 'ISC', 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'git://github.com/isaacs/json-stringify-safe' }, 1560 silly install resolved main: 'stringify.js', 1560 silly install resolved scripts: { test: 'node test.js' }, 1560 silly install resolved devDependencies: 1560 silly install resolved { mocha: '>= 2.1.0 < 3', 1560 silly install resolved must: '>= 0.12 < 0.13', 1560 silly install resolved sinon: '>= 1.12.2 < 2' }, 1560 silly install resolved readme: '# json-stringify-safe\n\nLike JSON.stringify, but doesn\'t throw on circular references.\n\n## Usage\n\nTakes the same arguments as `JSON.stringify`.\n\n```javascript\nvar stringify = require(\'json-stringify-safe\');\nvar circularObj = {};\ncircularObj.circularRef = circularObj;\ncircularObj.list = [ circularObj, circularObj ];\nconsole.log(stringify(circularObj, null, 2));\n```\n\nOutput:\n\n```json\n{\n "circularRef": "[Circular]",\n "list": [\n "[Circular]",\n "[Circular]"\n ]\n}\n```\n\n## Details\n\n```\nstringify(obj, serializer, indent, decycler)\n```\n\nThe first three arguments are the same as to JSON.stringify. The last\nis an argument that\'s only used when the object has been seen already.\n\nThe default `decycler` function returns the string `\'[Circular]\'`.\nIf, for example, you pass in `function(k,v){}` (return nothing) then it\nwill prune cycles. If you pass in `function(k,v){ return {foo: \'bar\'}}`,\nthen cyclical objects will always be represented as `{"foo":"bar"}` in\nthe result.\n\n```\nstringify.getSerialize(serializer, decycler)\n```\n\nReturns a serializer that can be used elsewhere. This is the actual\nfunction that\'s passed to JSON.stringify.\n\n**Note** that the function returned from `getSerialize` is stateful for now, so\ndo **not** use it more than once.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'json-stringify-safe@5.0.1', 1560 silly install resolved _shasum: '1296a2d58fd45f19a0f6ce01d65701e2c735b6eb', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz', 1560 silly install resolved _from: 'json-stringify-safe@>=5.0.1 <5.1.0' }, 1560 silly install resolved { name: 'is-typedarray', 1560 silly install resolved version: '1.0.0', 1560 silly install resolved description: 'Detect whether or not an object is a Typed Array', 1560 silly install resolved main: 'index.js', 1560 silly install resolved scripts: { test: 'node test' }, 1560 silly install resolved author: 1560 silly install resolved { name: 'Hugh Kennedy', 1560 silly install resolved email: 'hughskennedy@gmail.com', 1560 silly install resolved url: 'http://hughsk.io/' }, 1560 silly install resolved license: 'MIT', 1560 silly install resolved dependencies: {}, 1560 silly install resolved devDependencies: { tape: '^2.13.1' }, 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'git://github.com/hughsk/is-typedarray.git' }, 1560 silly install resolved keywords: [ 'typed', 'array', 'detect', 'is', 'util' ], 1560 silly install resolved bugs: { url: 'https://github.com/hughsk/is-typedarray/issues' }, 1560 silly install resolved homepage: 'https://github.com/hughsk/is-typedarray', 1560 silly install resolved readme: '# is-typedarray [![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges)\n\nDetect whether or not an object is a\n[Typed Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays).\n\n## Usage\n\n[![NPM](https://nodei.co/npm/is-typedarray.png)](https://nodei.co/npm/is-typedarray/)\n\n### isTypedArray(array)\n\nReturns `true` when array is a Typed Array, and `false` when it is not.\n\n## License\n\nMIT. See [LICENSE.md](http://github.com/hughsk/is-typedarray/blob/master/LICENSE.md) for details.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'is-typedarray@1.0.0', 1560 silly install resolved _shasum: 'e479c80858df0c1b11ddda6940f96011fcda4a9a', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz', 1560 silly install resolved _from: 'is-typedarray@>=1.0.0 <1.1.0' }, 1560 silly install resolved { name: 'mime-types', 1560 silly install resolved description: 'The ultimate javascript content-type utility.', 1560 silly install resolved version: '2.1.10', 1560 silly install resolved contributors: [ [Object], [Object], [Object] ], 1560 silly install resolved license: 'MIT', 1560 silly install resolved keywords: [ 'mime', 'types' ], 1560 silly install resolved repository: { type: 'git', url: 'https://github.com/jshttp/mime-types' }, 1560 silly install resolved dependencies: { 'mime-db': '~1.22.0' }, 1560 silly install resolved devDependencies: { istanbul: '0.4.2', mocha: '1.21.5' }, 1560 silly install resolved files: [ 'HISTORY.md', 'LICENSE', 'index.js' ], 1560 silly install resolved engines: { node: '>= 0.6' }, 1560 silly install resolved scripts: 1560 silly install resolved { test: 'mocha --reporter spec test/test.js', 1560 silly install resolved 'test-cov': 'istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js', 1560 silly install resolved 'test-travis': 'istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js' }, 1560 silly install resolved readme: '# mime-types\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nThe ultimate javascript content-type utility.\n\nSimilar to [node-mime](https://github.com/broofa/node-mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`,\n so do `var type = mime.lookup(\'unrecognized\') || \'application/octet-stream\'`.\n- No `new Mime()` business, so you could do `var lookup = require(\'mime-types\').lookup`.\n- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db)\n- No `.define()` functionality\n\nOtherwise, the API is compatible.\n\n## Install\n\n```sh\n$ npm install mime-types\n```\n\n## Adding Types\n\nAll mime types are based on [mime-db](https://github.com/jshttp/mime-db),\nso open a PR there if you\'d like to add mime types.\n\n## API\n\n```js\nvar mime = require(\'mime-types\')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup(\'json\') // \'application/json\'\nmime.lookup(\'.md\') // \'text/x-markdown\'\nmime.lookup(\'file.html\') // \'text/html\'\nmime.lookup(\'folder/file.js\') // \'application/javascript\'\nmime.lookup(\'folder/.htaccess\') // false\n\nmime.lookup(\'cats\') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType(\'markdown\') // \'text/x-markdown; charset=utf-8\'\nmime.contentType(\'file.json\') // \'application/json; charset=utf-8\'\n\n// from a full path\nmime.contentType(path.extname(\'/path/to/file.json\')) // \'application/json; charset=utf-8\'\n```\n\n### mime.extension(type)\n\nGet the default extension for a content-type.\n\n```js\nmime.extension(\'application/octet-stream\') // \'bin\'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset(\'text/x-markdown\') // \'UTF-8\'\n```\n\n### var type = mime.types[extension]\n\nA map of content-types by extension.\n\n### [extensions...] = mime.extensions[type]\n\nA map of extensions by content-type.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/mime-types.svg\n[npm-url]: https://npmjs.org/package/mime-types\n[node-version-image]: https://img.shields.io/node/v/mime-types.svg\n[node-version-url]: https://nodejs.org/en/download/\n[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-types\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-types\n[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg\n[downloads-url]: https://npmjs.org/package/mime-types\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/jshttp/mime-types/issues' }, 1560 silly install resolved homepage: 'https://github.com/jshttp/mime-types', 1560 silly install resolved _id: 'mime-types@2.1.10', 1560 silly install resolved _shasum: 'b93c7cb4362e16d41072a7e54538fb4d43070837', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz', 1560 silly install resolved _from: 'mime-types@>=2.1.7 <2.2.0' }, 1560 silly install resolved { name: 'stringstream', 1560 silly install resolved version: '0.0.5', 1560 silly install resolved description: 'Encode and decode streams into string streams', 1560 silly install resolved author: 1560 silly install resolved { name: 'Michael Hart', 1560 silly install resolved email: 'michael.hart.au@gmail.com', 1560 silly install resolved url: 'http://github.com/mhart' }, 1560 silly install resolved main: 'stringstream.js', 1560 silly install resolved keywords: [ 'string', 'stream', 'base64', 'gzip' ], 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'https://github.com/mhart/StringStream.git' }, 1560 silly install resolved license: 'MIT', 1560 silly install resolved readme: '# Decode streams into strings The Right Way(tm)\n\n```javascript\nvar fs = require(\'fs\')\nvar zlib = require(\'zlib\')\nvar strs = require(\'stringstream\')\n\nvar utf8Stream = fs.createReadStream(\'massiveLogFile.gz\')\n .pipe(zlib.createGunzip())\n .pipe(strs(\'utf8\'))\n```\n\nNo need to deal with `setEncoding()` weirdness, just compose streams\nlike they were supposed to be!\n\nHandles input and output encoding:\n\n```javascript\n// Stream from utf8 to hex to base64... Why not, ay.\nvar hex64Stream = fs.createReadStream(\'myFile\')\n .pipe(strs(\'utf8\', \'hex\'))\n .pipe(strs(\'hex\', \'base64\'))\n```\n\nAlso deals with `base64` output correctly by aligning each emitted data\nchunk so that there are no dangling `=` characters:\n\n```javascript\nvar stream = fs.createReadStream(\'myFile\').pipe(strs(\'base64\'))\n\nvar base64Str = \'\'\n\nstream.on(\'data\', function(data) { base64Str += data })\nstream.on(\'end\', function() {\n console.log(\'My base64 encoded file is: \' + base64Str) // Wouldn\'t work with setEncoding()\n console.log(\'Original file is: \' + new Buffer(base64Str, \'base64\'))\n})\n```\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/mhart/StringStream/issues' }, 1560 silly install resolved homepage: 'https://github.com/mhart/StringStream', 1560 silly install resolved _id: 'stringstream@0.0.5', 1560 silly install resolved _shasum: '4e484cd4de5a0bbbee18e46307710a8a81621878', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz', 1560 silly install resolved _from: 'stringstream@>=0.0.4 <0.1.0', 1560 silly install resolved scripts: {} }, 1560 silly install resolved { name: 'bl', 1560 silly install resolved version: '1.1.2', 1560 silly install resolved description: 'Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!', 1560 silly install resolved main: 'bl.js', 1560 silly install resolved scripts: { test: 'node test/test.js | faucet' }, 1560 silly install resolved repository: { type: 'git', url: 'https://github.com/rvagg/bl.git' }, 1560 silly install resolved homepage: 'https://github.com/rvagg/bl', 1560 silly install resolved authors: 1560 silly install resolved [ 'Rod Vagg (https://github.com/rvagg)', 1560 silly install resolved 'Matteo Collina (https://github.com/mcollina)', 1560 silly install resolved 'Jarett Cruger (https://github.com/jcrugzz)' ], 1560 silly install resolved keywords: [ 'buffer', 'buffers', 'stream', 'awesomesauce' ], 1560 silly install resolved license: 'MIT', 1560 silly install resolved dependencies: { 'readable-stream': '~2.0.5' }, 1560 silly install resolved devDependencies: { faucet: '0.0.1', hash_file: '~0.1.1', tape: '~4.4.0' }, 1560 silly install resolved readme: '# bl *(BufferList)*\n\n[![Build Status](https://travis-ci.org/rvagg/bl.svg?branch=master)](https://travis-ci.org/rvagg/bl)\n\n**A Node.js Buffer list collector, reader and streamer thingy.**\n\n[![NPM](https://nodei.co/npm/bl.png?downloads=true&downloadRank=true)](https://nodei.co/npm/bl/)\n[![NPM](https://nodei.co/npm-dl/bl.png?months=6&height=3)](https://nodei.co/npm/bl/)\n\n**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them!\n\nThe original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently.\n\n```js\nconst BufferList = require(\'bl\')\n\nvar bl = new BufferList()\nbl.append(new Buffer(\'abcd\'))\nbl.append(new Buffer(\'efg\'))\nbl.append(\'hi\') // bl will also accept & convert Strings\nbl.append(new Buffer(\'j\'))\nbl.append(new Buffer([ 0x3, 0x4 ]))\n\nconsole.log(bl.length) // 12\n\nconsole.log(bl.slice(0, 10).toString(\'ascii\')) // \'abcdefghij\'\nconsole.log(bl.slice(3, 10).toString(\'ascii\')) // \'defghij\'\nconsole.log(bl.slice(3, 6).toString(\'ascii\')) // \'def\'\nconsole.log(bl.slice(3, 8).toString(\'ascii\')) // \'defgh\'\nconsole.log(bl.slice(5, 10).toString(\'ascii\')) // \'fghij\'\n\n// or just use toString!\nconsole.log(bl.toString()) // \'abcdefghij\\u0003\\u0004\'\nconsole.log(bl.toString(\'ascii\', 3, 8)) // \'defgh\'\nconsole.log(bl.toString(\'ascii\', 5, 10)) // \'fghij\'\n\n// other standard Buffer readables\nconsole.log(bl.readUInt16BE(10)) // 0x0304\nconsole.log(bl.readUInt16LE(10)) // 0x0403\n```\n\nGive it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**:\n\n```js\nconst bl = require(\'bl\')\n , fs = require(\'fs\')\n\nfs.createReadStream(\'README.md\')\n .pipe(bl(function (err, data) { // note \'new\' isn\'t strictly required\n // `data` is a complete Buffer object containing the full data\n console.log(data.toString())\n }))\n```\n\nNote that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `\'end\'` instead, like a standard Stream.\n\nOr to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!):\n```js\nconst hyperquest = require(\'hyperquest\')\n , bl = require(\'bl\')\n , url = \'https://raw.github.com/rvagg/bl/master/README.md\'\n\nhyperquest(url).pipe(bl(function (err, data) {\n console.log(data.toString())\n}))\n```\n\nOr, use it as a readable stream to recompose a list of Buffers to an output source:\n\n```js\nconst BufferList = require(\'bl\')\n , fs = require(\'fs\')\n\nvar bl = new BufferList()\nbl.append(new Buffer(\'abcd\'))\nbl.append(new Buffer(\'efg\'))\nbl.append(new Buffer(\'hi\'))\nbl.append(new Buffer(\'j\'))\n\nbl.pipe(fs.createWriteStream(\'gibberish.txt\'))\n```\n\n## API\n\n * new BufferList([ callback ])\n * bl.length\n * bl.append(buffer)\n * bl.get(index)\n * bl.slice([ start[, end ] ])\n * bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ])\n * bl.duplicate()\n * bl.consume(bytes)\n * bl.toString([encoding, [ start, [ end ]]])\n * bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8()\n * Streams\n\n--------------------------------------------------------\n\n### new BufferList([ callback | Buffer | Buffer array | BufferList | BufferList array | String ])\nThe constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream.\n\nNormally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object.\n\n`new` is not strictly required, if you don\'t instantiate a new object, it will be done automatically for you so you can create a new instance simply with:\n\n```js\nvar bl = require(\'bl\')\nvar myinstance = bl()\n\n// equivilant to:\n\nvar BufferList = require(\'bl\')\nvar myinstance = new BufferList()\n```\n\n--------------------------------------------------------\n\n### bl.length\nGet the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list.\n\n--------------------------------------------------------\n\n### bl.append(Buffer | Buffer array | BufferList | BufferList array | String)\n`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained.\n\n--------------------------------------------------------\n\n### bl.get(index)\n`get()` will return the byte at the specified index.\n\n--------------------------------------------------------\n\n### bl.slice([ start, [ end ] ])\n`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively.\n\nIf the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer.\n\n--------------------------------------------------------\n\n### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ])\n`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively.\n\n--------------------------------------------------------\n\n### bl.duplicate()\n`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example:\n\n```js\nvar bl = new BufferList()\n\nbl.append(\'hello\')\nbl.append(\' world\')\nbl.append(\'\\n\')\n\nbl.duplicate().pipe(process.stdout, { end: false })\n\nconsole.log(bl.toString())\n```\n\n--------------------------------------------------------\n\n### bl.consume(bytes)\n`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don\'t need to line up with the sizes of the internal Buffers—initial offsets will be calculated accordingly in order to give you a consistent view of the data.\n\n--------------------------------------------------------\n\n### bl.toString([encoding, [ start, [ end ]]])\n`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information.\n\n--------------------------------------------------------\n\n### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8()\n\nAll of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently.\n\nSee the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work.\n\n--------------------------------------------------------\n\n### Streams\n**bl** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **bl** instance.\n\n--------------------------------------------------------\n\n## Contributors\n\n**bl** is brought to you by the following hackers:\n\n * [Rod Vagg](https://github.com/rvagg)\n * [Matteo Collina](https://github.com/mcollina)\n * [Jarett Cruger](https://github.com/jcrugzz)\n\n=======\n\n\n## License & copyright\n\nCopyright (c) 2013-2014 bl contributors (listed above).\n\nbl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/rvagg/bl/issues' }, 1560 silly install resolved _id: 'bl@1.1.2', 1560 silly install resolved _shasum: 'fdca871a99713aa00d19e3bbba41c44787a65398', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/bl/-/bl-1.1.2.tgz', 1560 silly install resolved _from: 'bl@>=1.1.2 <1.2.0' }, 1560 silly install resolved { version: '2.0.6', 1560 silly install resolved name: 'har-validator', 1560 silly install resolved description: 'Extremely fast HTTP Archive (HAR) validator using JSON Schema', 1560 silly install resolved author: 1560 silly install resolved { name: 'Ahmad Nassri', 1560 silly install resolved email: 'ahmad@ahmadnassri.com', 1560 silly install resolved url: 'https://www.ahmadnassri.com/' }, 1560 silly install resolved homepage: 'https://github.com/ahmadnassri/har-validator', 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'https://github.com/ahmadnassri/har-validator' }, 1560 silly install resolved license: 'ISC', 1560 silly install resolved main: 'lib/index', 1560 silly install resolved bin: { 'har-validator': 'bin/har-validator' }, 1560 silly install resolved keywords: [ 'har', 'http', 'archive', 'validate', 'validator' ], 1560 silly install resolved engines: { node: '>=0.10' }, 1560 silly install resolved files: [ 'bin', 'lib' ], 1560 silly install resolved bugs: { url: 'https://github.com/ahmadnassri/har-validator/issues' }, 1560 silly install resolved scripts: 1560 silly install resolved { pretest: 'standard && echint', 1560 silly install resolved test: 'mocha', 1560 silly install resolved posttest: 'npm run coverage', 1560 silly install resolved coverage: 'istanbul cover --dir coverage _mocha -- -R dot', 1560 silly install resolved codeclimate: 'codeclimate < coverage/lcov.info' }, 1560 silly install resolved echint: { ignore: [Object] }, 1560 silly install resolved devDependencies: 1560 silly install resolved { 'codeclimate-test-reporter': '0.2.1', 1560 silly install resolved echint: '^1.5.1', 1560 silly install resolved istanbul: '^0.4.2', 1560 silly install resolved mocha: '^2.3.4', 1560 silly install resolved 'require-directory': '^2.1.1', 1560 silly install resolved should: '^8.1.1', 1560 silly install resolved standard: '^5.4.1' }, 1560 silly install resolved dependencies: 1560 silly install resolved { chalk: '^1.1.1', 1560 silly install resolved commander: '^2.9.0', 1560 silly install resolved 'is-my-json-valid': '^2.12.4', 1560 silly install resolved 'pinkie-promise': '^2.0.0' }, 1560 silly install resolved readme: '# HAR Validator [![version][npm-version]][npm-url] [![License][npm-license]][license-url]\n\nExtremely fast HTTP Archive ([HAR](http://www.softwareishard.com/blog/har-12-spec/)) validator using JSON Schema.\n\n[![Build Status][travis-image]][travis-url]\n[![Downloads][npm-downloads]][npm-url]\n[![Code Climate][codeclimate-quality]][codeclimate-url]\n[![Coverage Status][codeclimate-coverage]][codeclimate-url]\n[![Dependencies][david-image]][david-url]\n\n## Install\n\n```shell\n# to use in cli\nnpm install --global har-validator\n\n# to use as a module\nnpm install --save har-validator\n```\n\n## Usage\n\n```\n\n Usage: har-validator [options] \n\n Options:\n\n -h, --help output usage information\n -V, --version output the version number\n -s, --schema [name] validate schema name (log, request, response, etc ...)\n\n```\n\n###### Example\n\n```shell\nhar-validator har.json\n\nhar-validator --schema request request.json\n```\n\n## API\n\n**Note**: as of [`v2.0.0`](https://github.com/ahmadnassri/har-validator/releases/tag/v2.0.0) this module defaults to Promise based API. *For backward comptability with `v1.x` an [async/callback API](#callback-api) is provided*\n\n### Validate(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a full [HAR](http://www.softwareishard.com/blog/har-12-spec/) object\n\n```js\nvalidate(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.log(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [log](http://www.softwareishard.com/blog/har-12-spec/#log) object\n\n```js\nvalidate.log(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.cache(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [cache](http://www.softwareishard.com/blog/har-12-spec/#cache) object\n\n```js\nvalidate.cache(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.cacheEntry(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a ["beforeRequest" or "afterRequest"](http://www.softwareishard.com/blog/har-12-spec/#cache) objects\n\n```js\nvalidate.cacheEntry(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.content(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [content](http://www.softwareishard.com/blog/har-12-spec/#content) object\n\n```js\nvalidate.content(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.cookie(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [cookie](http://www.softwareishard.com/blog/har-12-spec/#cookies) object\n\n```js\nvalidate.cookie(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.creator(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [creator](http://www.softwareishard.com/blog/har-12-spec/#creator) object\n\n```js\nvalidate.creator(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.entry(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n an [entry](http://www.softwareishard.com/blog/har-12-spec/#entries) object\n\n```js\nvalidate.entry(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.log(data)\n\nalias of [`Validate(data)`](#validate-data-callback-)\n\n### Validate.page(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [page](http://www.softwareishard.com/blog/har-12-spec/#pages) object\n\n```js\nvalidate.page(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.pageTimings(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [pageTimings](http://www.softwareishard.com/blog/har-12-spec/#pageTimings) object\n\n```js\nvalidate.pageTimings(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.postData(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [postData](http://www.softwareishard.com/blog/har-12-spec/#postData) object\n\n```js\nvalidate.postData(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.record(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [record](http://www.softwareishard.com/blog/har-12-spec/#headers) object\n\n```js\nvalidate.record(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.request(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [request](http://www.softwareishard.com/blog/har-12-spec/#request) object\n\n```js\nvalidate.request(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.response(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [response](http://www.softwareishard.com/blog/har-12-spec/#response) object\n\n```js\nvalidate.cacheEntry(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n### Validate.timings(data)\n\n> Returns a promise that resolves to the valid object.\n\n- **data**: `Object` *(Required)*\n a [timings](http://www.softwareishard.com/blog/har-12-spec/#timings) object\n\n```js\nvalidate.timings(data)\n .then(data => console.log(\'horray!\'))\n .catch(console.error)\n```\n\n----\n\n## Callback API\n\n### Validate(data [, callback])\n\n> Returns `true` or `false`.\n\n```js\nvar HAR = require(\'./har.json\');\nvar validate = require(\'har-validator/lib/async\');\n\nvalidate(HAR, function (e, valid) {\n if (e) console.log(e.errors)\n\n if (valid) console.log(\'horray!\');\n});\n\n```\nThe async API provides exactly the same methods as the [Promise API](#promise-api)\n\n----\n\n## Support\n\nDonations are welcome to help support the continuous development of this project.\n\n[![Gratipay][gratipay-image]][gratipay-url]\n[![PayPal][paypal-image]][paypal-url]\n[![Flattr][flattr-image]][flattr-url]\n[![Bitcoin][bitcoin-image]][bitcoin-url]\n\n## License\n\n[ISC License](LICENSE) © [Ahmad Nassri](https://www.ahmadnassri.com/)\n\n[license-url]: https://github.com/ahmadnassri/har-validator/blob/master/LICENSE\n\n[travis-url]: https://travis-ci.org/ahmadnassri/har-validator\n[travis-image]: https://img.shields.io/travis/ahmadnassri/har-validator.svg?style=flat-square\n\n[npm-url]: https://www.npmjs.com/package/har-validator\n[npm-license]: https://img.shields.io/npm/l/har-validator.svg?style=flat-square\n[npm-version]: https://img.shields.io/npm/v/har-validator.svg?style=flat-square\n[npm-downloads]: https://img.shields.io/npm/dm/har-validator.svg?style=flat-square\n\n[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/har-validator\n[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/har-validator.svg?style=flat-square\n[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/har-validator.svg?style=flat-square\n\n[david-url]: https://david-dm.org/ahmadnassri/har-validator\n[david-image]: https://img.shields.io/david/ahmadnassri/har-validator.svg?style=flat-square\n\n[gratipay-url]: https://www.gratipay.com/ahmadnassri/\n[gratipay-image]: https://img.shields.io/gratipay/ahmadnassri.svg?style=flat-square\n\n[paypal-url]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UJ2B2BTK9VLRS&on0=project&os0=har-validator\n[paypal-image]: http://img.shields.io/badge/paypal-donate-green.svg?style=flat-square\n\n[flattr-url]: https://flattr.com/submit/auto?user_id=ahmadnassri&url=https://github.com/ahmadnassri/har-validator&title=har-validator&language=&tags=github&category=software\n[flattr-image]: http://img.shields.io/badge/flattr-donate-green.svg?style=flat-square\n\n[bitcoin-image]: http://img.shields.io/badge/bitcoin-1Nb46sZRVG3or7pNaDjthcGJpWhvoPpCxy-green.svg?style=flat-square\n[bitcoin-url]: https://www.coinbase.com/checkouts/ae383ae6bb931a2fa5ad11cec115191e?name=har-validator\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'har-validator@2.0.6', 1560 silly install resolved _shasum: 'cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz', 1560 silly install resolved _from: 'har-validator@>=2.0.6 <2.1.0' }, 1560 silly install resolved { author: { name: 'Robert Kieffer', email: 'robert@broofa.com' }, 1560 silly install resolved bin: { uuid: './bin/uuid' }, 1560 silly install resolved bugs: { url: 'https://github.com/broofa/node-uuid/issues' }, 1560 silly install resolved contributors: [ [Object], [Object] ], 1560 silly install resolved dependencies: {}, 1560 silly install resolved description: 'Rigorous implementation of RFC4122 (v1 and v4) UUIDs.', 1560 silly install resolved devDependencies: { nyc: '^2.2.0' }, 1560 silly install resolved directories: {}, 1560 silly install resolved homepage: 'https://github.com/broofa/node-uuid', 1560 silly install resolved installable: true, 1560 silly install resolved keywords: [ 'guid', 'rfc4122', 'uuid' ], 1560 silly install resolved lib: '.', 1560 silly install resolved licenses: [ [Object] ], 1560 silly install resolved main: './uuid.js', 1560 silly install resolved maintainers: [ [Object] ], 1560 silly install resolved name: 'node-uuid', 1560 silly install resolved optionalDependencies: {}, 1560 silly install resolved repository: { type: 'git', url: 'https://github.com/broofa/node-uuid.git' }, 1560 silly install resolved scripts: 1560 silly install resolved { coverage: 'nyc npm test && nyc report', 1560 silly install resolved test: 'node test/test.js' }, 1560 silly install resolved url: 'http://github.com/broofa/node-uuid', 1560 silly install resolved version: '1.4.7', 1560 silly install resolved readme: '# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) (\'broofa/node-uuid\').\n* Cryptographically strong random # generation\n * `crypto.randomBytes(n)` in node.js\n * `window.crypto.getRandomValues(ta)` in [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues#Browser_Compatibility)\n* 1.1K minified and gzip\'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n* Comes with a Command Line Interface for generating uuids on the command line\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require(\'node-uuid\');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> \'6c84fb90-12c4-11e1-840d-7b25c5ee775a\'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> \'110ec58a-a0f2-4ac4-8393-c866d813b8d1\'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date(\'2011-11-01\').getTime(),\n nsecs: 5678\n}); // -> "710b962e-041c-11e1-9234-0123456789ab"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> \'02a2ce90-1432-11e1-8558-0b488e4fc115\'\nuuid.unparse(buffer, 16) // -> \'02a31cb0-1432-11e1-8558-0b488e4fc115\'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or \'new Buffer\' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse(\'797ff043-11eb-11e1-80d6-510998755d10\'); // -> \nvar string = uuid.unparse(bytes); // -> \'797ff043-11eb-11e1-80d6-510998755d10\'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it\'s previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> \'6c84fb90-12c4-11e1-840d-7b25c5ee775a\'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Command Line Interface\n\nTo use the executable, it\'s probably best to install this library globally.\n\n`npm install -g node-uuid`\n\nUsage:\n\n```\nUSAGE: uuid [version] [options]\n\n\noptions:\n\n--help Display this message and exit\n```\n\n`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied.\n\n### Examples\n\n```\n> uuid\n3a91f950-dec8-4688-ba14-5b7bbfc7a563\n```\n\n```\n> uuid v1\n9d0b43e0-7696-11e3-964b-250efa37a98e\n```\n\n```\n> uuid v4\n6790ac7c-24ac-4f98-8464-42f6d98a53ae\n```\n\n## Testing\n\nIn node.js\n\n```\nnpm test\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.6\n\n* Properly detect node crypto and whatwg crypto\n* Workaround phantomjs/browserify bug\n* Explicit check for `window` rather implicit this-global\n* Issue warning if Math.random() is being used\n* "use strict";\n* A few jshint / stylistic updates (=== and such)\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'node-uuid@1.4.7', 1560 silly install resolved _shasum: '6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz', 1560 silly install resolved _from: 'node-uuid@>=1.4.7 <1.5.0' }, 1560 silly install resolved { author: 1560 silly install resolved { name: 'Mikeal Rogers', 1560 silly install resolved email: 'mikeal.rogers@gmail.com', 1560 silly install resolved url: 'http://www.futurealoof.com' }, 1560 silly install resolved name: 'tunnel-agent', 1560 silly install resolved license: 'Apache-2.0', 1560 silly install resolved description: 'HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.', 1560 silly install resolved version: '0.4.2', 1560 silly install resolved repository: { url: 'https://github.com/mikeal/tunnel-agent' }, 1560 silly install resolved main: 'index.js', 1560 silly install resolved dependencies: {}, 1560 silly install resolved devDependencies: {}, 1560 silly install resolved optionalDependencies: {}, 1560 silly install resolved engines: { node: '*' }, 1560 silly install resolved readme: 'tunnel-agent\n============\n\nHTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/mikeal/tunnel-agent/issues' }, 1560 silly install resolved homepage: 'https://github.com/mikeal/tunnel-agent', 1560 silly install resolved _id: 'tunnel-agent@0.4.2', 1560 silly install resolved _shasum: '1104e3f36ac87125c287270067d582d18133bfee', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.2.tgz', 1560 silly install resolved _from: 'tunnel-agent@>=0.4.1 <0.5.0', 1560 silly install resolved scripts: {} }, 1560 silly install resolved { author: 1560 silly install resolved { name: 'Mikeal Rogers', 1560 silly install resolved email: 'mikeal.rogers@gmail.com', 1560 silly install resolved url: 'http://www.futurealoof.com' }, 1560 silly install resolved name: 'aws-sign2', 1560 silly install resolved description: 'AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.', 1560 silly install resolved version: '0.6.0', 1560 silly install resolved repository: { url: 'https://github.com/mikeal/aws-sign' }, 1560 silly install resolved license: 'Apache-2.0', 1560 silly install resolved main: 'index.js', 1560 silly install resolved dependencies: {}, 1560 silly install resolved devDependencies: {}, 1560 silly install resolved optionalDependencies: {}, 1560 silly install resolved engines: { node: '*' }, 1560 silly install resolved readme: 'aws-sign\n========\n\nAWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/mikeal/aws-sign/issues' }, 1560 silly install resolved homepage: 'https://github.com/mikeal/aws-sign', 1560 silly install resolved _id: 'aws-sign2@0.6.0', 1560 silly install resolved _shasum: '14342dd38dbcc94d0e5b87d763cd63612c0e794f', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz', 1560 silly install resolved _from: 'aws-sign2@>=0.6.0 <0.7.0' }, 1560 silly install resolved { author: 1560 silly install resolved { name: 'Jeremy Stashewsky', 1560 silly install resolved email: 'jstashewsky@salesforce.com' }, 1560 silly install resolved contributors: [ [Object], [Object], [Object], [Object], [Object], [Object] ], 1560 silly install resolved license: 'BSD-3-Clause', 1560 silly install resolved name: 'tough-cookie', 1560 silly install resolved description: 'RFC6265 Cookies and Cookie Jar for node.js', 1560 silly install resolved keywords: 1560 silly install resolved [ 'HTTP', 1560 silly install resolved 'cookie', 1560 silly install resolved 'cookies', 1560 silly install resolved 'set-cookie', 1560 silly install resolved 'cookiejar', 1560 silly install resolved 'jar', 1560 silly install resolved 'RFC6265', 1560 silly install resolved 'RFC2965' ], 1560 silly install resolved version: '2.2.2', 1560 silly install resolved homepage: 'https://github.com/SalesforceEng/tough-cookie', 1560 silly install resolved repository: 1560 silly install resolved { type: 'git', 1560 silly install resolved url: 'git://github.com/SalesforceEng/tough-cookie.git' }, 1560 silly install resolved bugs: { url: 'https://github.com/SalesforceEng/tough-cookie/issues' }, 1560 silly install resolved main: './lib/cookie', 1560 silly install resolved files: [ 'lib' ], 1560 silly install resolved scripts: 1560 silly install resolved { suffixup: 'curl -o public_suffix_list.dat https://publicsuffix.org/list/public_suffix_list.dat && ./generate-pubsuffix.js', 1560 silly install resolved test: 'vows test/*_test.js' }, 1560 silly install resolved engines: { node: '>=0.10.0' }, 1560 silly install resolved devDependencies: { async: '^1.4.2', vows: '^0.8.1' }, 1560 silly install resolved readme: '[RFC6265](https://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js\n\n[![Build Status](https://travis-ci.org/SalesforceEng/tough-cookie.png?branch=master)](https://travis-ci.org/SalesforceEng/tough-cookie)\n\n[![NPM Stats](https://nodei.co/npm/tough-cookie.png?downloads=true&stars=true)](https://npmjs.org/package/tough-cookie)\n![NPM Downloads](https://nodei.co/npm-dl/tough-cookie.png?months=9)\n\n# Synopsis\n\n``` javascript\nvar tough = require(\'tough-cookie\');\nvar Cookie = tough.Cookie;\nvar cookie = Cookie.parse(header);\ncookie.value = \'somethingdifferent\';\nheader = cookie.toString();\n\nvar cookiejar = new tough.CookieJar();\ncookiejar.setCookie(cookie, \'http://currentdomain.example.com/path\', cb);\n// ...\ncookiejar.getCookies(\'http://example.com/otherpath\',function(err,cookies) {\n res.headers[\'cookie\'] = cookies.join(\'; \');\n});\n```\n\n# Installation\n\nIt\'s _so_ easy!\n\n`npm install tough-cookie`\n\nWhy the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken.\n\n# API\n\n## tough\n\nFunctions on the module you get from `require(\'tough-cookie\')`. All can be used as pure functions and don\'t need to be "bound".\n\n**Note**: prior to 1.0.x, several of these functions took a `strict` parameter. This has since been removed from the API as it was no longer necessary.\n\n### `parseDate(string)`\n\nParse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`.\n\n### `formatDate(date)`\n\nFormat a Date into a RFC1123 string (the RFC6265-recommended format).\n\n### `canonicalDomain(str)`\n\nTransforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects).\n\n### `domainMatch(str,domStr[,canonicalize=true])`\n\nAnswers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match".\n\nThe `canonicalize` parameter will run the other two paramters through `canonicalDomain` or not.\n\n### `defaultPath(path)`\n\nGiven a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC.\n\nThe `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node\'s `uri.parse()` output.\n\n### `pathMatch(reqPath,cookiePath)`\n\nAnswers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean.\n\nThis is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`.\n\n### `parse(cookieString[, options])`\n\nalias for `Cookie.parse(cookieString[, options])`\n\n### `fromJSON(string)`\n\nalias for `Cookie.fromJSON(string)`\n\n### `getPublicSuffix(hostname)`\n\nReturns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it.\n\nFor example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`.\n\nFor further information, see http://publicsuffix.org/. This module derives its list from that site.\n\n### `cookieCompare(a,b)`\n\nFor use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). The sort algorithm is, in order of precedence:\n\n* Longest `.path`\n* oldest `.creation` (which has a 1ms precision, same as `Date`)\n* lowest `.creationIndex` (to get beyond the 1ms precision)\n\n``` javascript\nvar cookies = [ /* unsorted array of Cookie objects */ ];\ncookies = cookies.sort(cookieCompare);\n```\n\n**Note**: Since JavaScript\'s `Date` is limited to a 1ms precision, cookies within the same milisecond are entirely possible. This is especially true when using the `now` option to `.setCookie()`. The `.creationIndex` property is a per-process global counter, assigned during construction with `new Cookie()`. This preserves the spirit of the RFC sorting: older cookies go first. This works great for `MemoryCookieStore`, since `Set-Cookie` headers are parsed in order, but may not be so great for distributed systems. Sophisticated `Store`s may wish to set this to some other _logical clock_ such that if cookies A and B are created in the same millisecond, but cookie A is created before cookie B, then `A.creationIndex < B.creationIndex`. If you want to alter the global counter, which you probably _shouldn\'t_ do, it\'s stored in `Cookie.cookiesCreated`.\n\n### `permuteDomain(domain)`\n\nGenerates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores.\n\n### `permutePath(path)`\n\nGenerates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores.\n\n\n## Cookie\n\nExported via `tough.Cookie`.\n\n### `Cookie.parse(cookieString[, options])`\n\nParses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can\'t be parsed.\n\nThe options parameter is not required and currently has only one property:\n\n * _loose_ - boolean - if `true` enable parsing of key-less cookies like `=abc` and `=`, which are not RFC-compliant.\n\nIf options is not an object, it is ignored, which means you can use `Array#map` with it.\n\nHere\'s how to process the Set-Cookie header(s) on a node HTTP/HTTPS response:\n\n``` javascript\nif (res.headers[\'set-cookie\'] instanceof Array)\n cookies = res.headers[\'set-cookie\'].map(Cookie.parse);\nelse\n cookies = [Cookie.parse(res.headers[\'set-cookie\'])];\n```\n\n### Properties\n\nCookie object properties:\n\n * _key_ - string - the name or key of the cookie (default "")\n * _value_ - string - the value of the cookie (default "")\n * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()`\n * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()`\n * _domain_ - string - the `Domain=` attribute of the cookie\n * _path_ - string - the `Path=` of the cookie\n * _secure_ - boolean - the `Secure` cookie flag\n * _httpOnly_ - boolean - the `HttpOnly` cookie flag\n * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside)\n * _creation_ - `Date` - when this cookie was constructed\n * _creationIndex_ - number - set at construction, used to provide greater sort precision (please see `cookieCompare(a,b)` for a full explanation)\n\nAfter a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes:\n\n * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied)\n * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one.\n * _creation_ - `Date` - **modified** from construction to when the cookie was added to the jar\n * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute.\n\n### `Cookie([{properties}])`\n\nReceives an options object that can contain any of the above Cookie properties, uses the default for unspecified properties.\n\n### `.toString()`\n\nencode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`.\n\n### `.cookieString()`\n\nencode to a Cookie header value (i.e. the `.key` and `.value` properties joined with \'=\').\n\n### `.setExpires(String)`\n\nsets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can\'t parse this date string), `.expires` is set to `"Infinity"` (a string) is set.\n\n### `.setMaxAge(number)`\n\nsets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly.\n\n### `.expiryTime([now=Date.now()])`\n\n### `.expiryDate([now=Date.now()])`\n\nexpiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds.\n\nMax-Age takes precedence over Expires (as per the RFC). The `.creation` attribute -- or, by default, the `now` paramter -- is used to offset the `.maxAge` attribute.\n\nIf Expires (`.expires`) is set, that\'s returned.\n\nOtherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents).\n\n### `.TTL([now=Date.now()])`\n\ncompute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply.\n\nThe "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned.\n\n### `.canonicalizedDoman()`\n\n### `.cdomain()`\n\nreturn the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters.\n\n### `.toJSON()`\n\nFor convenience in using `JSON.serialize(cookie)`. Returns a plain-old `Object` that can be JSON-serialized.\n\nAny `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are exported in ISO format (`.toISOString()`).\n\n**NOTE**: Custom `Cookie` properties will be discarded. In tough-cookie 1.x, since there was no `.toJSON` method explicitly defined, all enumerable properties were captured. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array.\n\n### `Cookie.fromJSON(strOrObj)`\n\nDoes the reverse of `cookie.toJSON()`. If passed a string, will `JSON.parse()` that first.\n\nAny `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are parsed via `Date.parse()`, not the tough-cookie `parseDate`, since it\'s JavaScript/JSON-y timestamps being handled at this layer.\n\nReturns `null` upon JSON parsing error.\n\n### `.clone()`\n\nDoes a deep clone of this cookie, exactly implemented as `Cookie.fromJSON(cookie.toJSON())`.\n\n### `.validate()`\n\nStatus: *IN PROGRESS*. Works for a few things, but is by no means comprehensive.\n\nvalidates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct:\n\n``` javascript\nif (cookie.validate() === true) {\n // it\'s tasty\n} else {\n // yuck!\n}\n```\n\n\n## CookieJar\n\nExported via `tough.CookieJar`.\n\n### `CookieJar([store],[options])`\n\nSimply use `new CookieJar()`. If you\'d like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _rejectPublicSuffixes_ - boolean - default `true` - reject cookies with domains like "com" and "co.uk"\n * _looseMode_ - boolean - default `false` - accept malformed cookies like `bar` and `=bar`, which have an implied empty name.\n This is not in the standard, but is used sometimes on the web and is accepted by (most) browsers.\n\nSince eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods.\n\n### `.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))`\n\nAttempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.creation`, `.lastAccessed` and `.hostOnly` properties.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. `Store` errors aren\'t ignored by this option.\n\nAs per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual).\n\n### `.setCookieSync(cookieOrString, currentUrl, [{options}])`\n\nSynchronous version of `setCookie`; only works with synchronous stores (e.g. the default `MemoryCookieStore`).\n\n### `.getCookies(currentUrl, [{options},] cb(err,cookies))`\n\nRetrieve the list of cookies that can be sent in a Cookie header for the current url.\n\nIf an error is encountered, that\'s passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given.\n\nThe `options` object can be omitted and can have the following properties:\n\n * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies.\n * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`.\n * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies\n * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially).\n * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the underlying store (the default `MemoryCookieStore` supports it).\n\nThe `.lastAccessed` property of the returned cookies will have been updated.\n\n### `.getCookiesSync(currentUrl, [{options}])`\n\nSynchronous version of `getCookies`; only works with synchronous stores (e.g. the default `MemoryCookieStore`).\n\n### `.getCookieString(...)`\n\nAccepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`.\n\n### `.getCookieStringSync(...)`\n\nSynchronous version of `getCookieString`; only works with synchronous stores (e.g. the default `MemoryCookieStore`).\n\n### `.getSetCookieStrings(...)`\n\nReturns an array of strings suitable for **Set-Cookie** headers. Accepts the same options as `.getCookies()`. Simply maps the cookie array via `.toString()`.\n\n### `.getSetCookieStringsSync(...)`\n\nSynchronous version of `getSetCookieStrings`; only works with synchronous stores (e.g. the default `MemoryCookieStore`).\n\n### `.serialize(cb(err,serializedObject))`\n\nSerialize the Jar if the underlying store supports `.getAllCookies`.\n\n**NOTE**: Custom `Cookie` properties will be discarded. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array.\n\nSee [Serialization Format].\n\n### `.serializeSync()`\n\nSync version of .serialize\n\n### `.toJSON()`\n\nAlias of .serializeSync() for the convenience of `JSON.stringify(cookiejar)`.\n\n### `CookieJar.deserialize(serialized, [store], cb(err,object))`\n\nA new Jar is created and the serialized Cookies are added to the underlying store. Each `Cookie` is added via `store.putCookie` in the order in which they appear in the serialization.\n\nThe `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created.\n\nAs a convenience, if `serialized` is a string, it is passed through `JSON.parse` first. If that throws an error, this is passed to the callback.\n\n### `CookieJar.deserializeSync(serialized, [store])`\n\nSync version of `.deserialize`. _Note_ that the `store` must be synchronous for this to work.\n\n### `CookieJar.fromJSON(string)`\n\nAlias of `.deserializeSync` to provide consistency with `Cookie.fromJSON()`.\n\n### `.clone([store,]cb(err,newJar))`\n\nProduces a deep clone of this jar. Modifications to the original won\'t affect the clone, and vice versa.\n\nThe `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. Transferring between store types is supported so long as the source implements `.getAllCookies()` and the destination implements `.putCookie()`.\n\n### `.cloneSync([store])`\n\nSynchronous version of `.clone`, returning a new `CookieJar` instance.\n\nThe `store` argument is optional, but must be a _synchronous_ `Store` instance if specified. If not passed, a new instance of `MemoryCookieStore` is used.\n\nThe _source_ and _destination_ must both be synchronous `Store`s. If one or both stores are asynchronous, use `.clone` instead. Recall that `MemoryCookieStore` supports both synchronous and asynchronous API calls.\n\n## Store\n\nBase class for CookieJar stores. Available as `tough.Store`.\n\n## Store API\n\nThe storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores.\n\nStores should inherit from the base `Store` class, which is available as `require(\'tough-cookie\').Store`.\n\nStores are asynchronous by default, but if `store.synchronous` is set to `true`, then the `*Sync` methods on the of the containing `CookieJar` can be used (however, the continuation-passing style\n\nAll `domain` parameters will have been normalized before calling.\n\nThe Cookie store must have all of the following methods.\n\n### `store.findCookie(domain, path, key, cb(err,cookie))`\n\nRetrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned.\n\nCallback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error).\n\n### `store.findCookies(domain, path, cb(err,cookies))`\n\nLocates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above.\n\nIf no cookies are found, the callback MUST be passed an empty array.\n\nThe resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it\'s OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done.\n\nAs of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only).\n\n### `store.putCookie(cookie, cb(err))`\n\nAdds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it\'s possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur.\n\nThe `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties.\n\nPass an error if the cookie cannot be stored.\n\n### `store.updateCookie(oldCookie, newCookie, cb(err))`\n\nUpdate an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store.\n\nThe `.lastAccessed` property will always be different between the two objects (to the precision possible via JavaScript\'s clock). Both `.creation` and `.creationIndex` are guaranteed to be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are selected for automatic deletion (e.g., least-recently-used, which is up to the store to implement).\n\nStores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn\'t define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object.\n\nThe `newCookie` and `oldCookie` objects MUST NOT be modified.\n\nPass an error if the newCookie cannot be stored.\n\n### `store.removeCookie(domain, path, key, cb(err))`\n\nRemove a cookie from the store (see notes on `findCookie` about the uniqueness constraint).\n\nThe implementation MUST NOT pass an error if the cookie doesn\'t exist; only pass an error due to the failure to remove an existing cookie.\n\n### `store.removeCookies(domain, path, cb(err))`\n\nRemoves matching cookies from the store. The `path` parameter is optional, and if missing means all paths in a domain should be removed.\n\nPass an error ONLY if removing any existing cookies failed.\n\n### `store.getAllCookies(cb(err, cookies))`\n\nProduces an `Array` of all cookies during `jar.serialize()`. The items in the array can be true `Cookie` objects or generic `Object`s with the [Serialization Format] data structure.\n\nCookies SHOULD be returned in creation order to preserve sorting via `compareCookies()`. For reference, `MemoryCookieStore` will sort by `.creationIndex` since it uses true `Cookie` objects internally. If you don\'t return the cookies in creation order, they\'ll still be sorted by creation time, but this only has a precision of 1ms. See `compareCookies` for more detail.\n\nPass an error if retrieval fails.\n\n## MemoryCookieStore\n\nInherits from `Store`.\n\nA just-in-memory CookieJar synchronous store implementation, used by default. Despite being a synchronous implementation, it\'s usable with both the synchronous and asynchronous forms of the `CookieJar` API.\n\n# Serialization Format\n\n**NOTE**: if you want to have custom `Cookie` properties serialized, add the property name to `Cookie.serializableProperties`.\n\n```js\n {\n // The version of tough-cookie that serialized this jar.\n version: \'tough-cookie@1.x.y\',\n\n // add the store type, to make humans happy:\n storeType: \'MemoryCookieStore\',\n\n // CookieJar configuration:\n rejectPublicSuffixes: true,\n // ... future items go here\n\n // Gets filled from jar.store.getAllCookies():\n cookies: [\n {\n key: \'string\',\n value: \'string\',\n // ...\n /* other Cookie.serializableProperties go here */\n }\n ]\n }\n```\n\n# Copyright and License\n\n(tl;dr: BSD-3-Clause with some MPL/2.0)\n\n```text\n Copyright (c) 2015, Salesforce.com, Inc.\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of Salesforce.com nor the names of its contributors may\n be used to endorse or promote products derived from this software without\n specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE.\n```\n\nPortions may be licensed under different licenses (in particular `public_suffix_list.dat` is MPL/2.0); please read that file and the LICENSE file for full details.\n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved _id: 'tough-cookie@2.2.2', 1560 silly install resolved _shasum: 'c83a1830f4e5ef0b93ef2a3488e724f8de016ac7', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz', 1560 silly install resolved _from: 'tough-cookie@>=2.2.0 <2.3.0' }, 1560 silly install resolved { author: 1560 silly install resolved { name: 'Mikeal Rogers', 1560 silly install resolved email: 'mikeal.rogers@gmail.com', 1560 silly install resolved url: 'http://www.futurealoof.com' }, 1560 silly install resolved name: 'oauth-sign', 1560 silly install resolved description: 'OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.', 1560 silly install resolved version: '0.8.1', 1560 silly install resolved license: 'Apache-2.0', 1560 silly install resolved repository: { url: 'https://github.com/mikeal/oauth-sign' }, 1560 silly install resolved main: 'index.js', 1560 silly install resolved dependencies: {}, 1560 silly install resolved devDependencies: {}, 1560 silly install resolved optionalDependencies: {}, 1560 silly install resolved engines: { node: '*' }, 1560 silly install resolved scripts: { test: 'node test.js' }, 1560 silly install resolved readme: 'oauth-sign\n==========\n\nOAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. \n', 1560 silly install resolved readmeFilename: 'README.md', 1560 silly install resolved bugs: { url: 'https://github.com/mikeal/oauth-sign/issues' }, 1560 silly install resolved homepage: 'https://github.com/mikeal/oauth-sign', 1560 silly install resolved _id: 'oauth-sign@0.8.1', 1560 silly install resolved _shasum: '182439bdb91378bf7460e75c64ea43e6448def06', 1560 silly install resolved _resolved: 'https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.1.tgz', 1560 silly install resolved _from: 'oauth-sign@>=0.8.1 <0.9.0' }, 1560 silly install resolved { name: 'hawk', 1560 silly install resolved description: 'HTTP Hawk Authentication Scheme', 1560 silly install resolved version: '3.1.3', 1560 silly install resolved author: 1560 silly install resolved { name: 'Eran Hammer', 1560 silly install resolved email: 'eran@hammer.io', 1560 silly install resolved url: 'http://hueniverse.com' }, 1560 silly install resolved contributors: [], 1560 silly install resolved repository: { type: 'git', url: 'git://github.com/hueniverse/hawk' }, 1560 silly install resolved main: 'lib/index.js', 1560 silly install resolved keywords: [ 'http', 'authentication', 'scheme', 'hawk' ], 1560 silly install resolved engines: { node: '>=0.10.32' }, 1560 silly install resolved browser: './lib/browser.js', 1560 silly install resolved dependencies: 1560 silly install resolved { hoek: '2.x.x', 1560 silly install resolved boom: '2.x.x', 1560 silly install resolved cryptiles: '2.x.x', 1560 silly install resolved sntp: '1.x.x' }, 1560 silly install resolved devDependencies: { code: '1.x.x', lab: '5.x.x' }, 1560 silly install resolved scripts: 1560 silly install resolved { test: 'lab -a code -t 100 -L', 1560 silly install resolved 'test-cov-html': 'lab -a code -r html -o coverage.html' }, 1560 silly install resolved license: 'BSD-3-Clause', 1560 silly install resolved readme: '![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png)\r\n\r\n **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial\r\nHTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz).\r\n\r\nCurrent version: **3.x**\r\n\r\nNote: 3.x and 2.x are the same exact protocol as 1.1. The version increments reflect changes in the node API.\r\n\r\n[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk)\r\n\r\n# Table of Content\r\n\r\n- [**Introduction**](#introduction)\r\n - [Replay Protection](#replay-protection)\r\n - [Usage Example](#usage-example)\r\n - [Protocol Example](#protocol-example)\r\n - [Payload Validation](#payload-validation)\r\n - [Response Payload Validation](#response-payload-validation)\r\n - [Browser Support and Considerations](#browser-support-and-considerations)\r\n

\r\n- [**Single URI Authorization**](#single-uri-authorization)\r\n - [Usage Example](#bewit-usage-example)\r\n

\r\n- [**Security Considerations**](#security-considerations)\r\n - [MAC Keys Transmission](#mac-keys-transmission)\r\n - [Confidentiality of Requests](#confidentiality-of-requests)\r\n - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers)\r\n - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials)\r\n - [Entropy of Keys](#entropy-of-keys)\r\n - [Coverage Limitations](#coverage-limitations)\r\n - [Future Time Manipulation](#future-time-manipulation)\r\n - [Client Clock Poisoning](#client-clock-poisoning)\r\n - [Bewit Limitations](#bewit-limitations)\r\n - [Host Header Forgery](#host-header-forgery)\r\n

\r\n- [**Frequently Asked Questions**](#frequently-asked-questions)\r\n

\r\n- [**Implementations**](#implementations)\r\n- [**Acknowledgements**](#acknowledgements)\r\n\r\n# Introduction\r\n\r\n**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with\r\npartial cryptographic verification of the request and response, covering the HTTP method, request URI, host,\r\nand optionally the request payload.\r\n\r\nSimilar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of\r\nclient credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme,\r\nthe key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is\r\nincluded in its place.\r\n\r\nHowever, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of\r\nreplay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less\r\n"chattiness" (interaction with the server).\r\n\r\nAlso unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because\r\nthe client and server must both have access to the key material in the clear.\r\n\r\nThe primary design goals of this scheme are to:\r\n* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources,\r\n* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where\r\n to send an authenticated request), and\r\n* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client\r\n failure to validate the server\'s identity as part of its TLS handshake.\r\n\r\nIn addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using\r\na query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk).\r\n\r\nThe **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server,\r\nwhich is beyond the scope of this module. Typically, the shared credentials are established via an initial\r\nTLS-protected phase or derived from some other shared confidential information available to both the client\r\nand the server.\r\n\r\n\r\n## Replay Protection\r\n\r\nWithout replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more \r\nthan once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when \r\nmaking requests. This gives the server enough information to prevent replay attacks.\r\n\r\nThe nonce is generated by the client, and is a string unique across all requests with the same timestamp and\r\nkey identifier combination. \r\n\r\nThe timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards\r\nare rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks.\r\nBy default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in\r\npractice translates to a maximum of 2 minutes as the skew can be positive or negative).\r\n\r\nUsing a timestamp requires the client\'s clock to be in sync with the server\'s clock. **Hawk** requires both the client\r\nclock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types\r\n(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response\r\nto a bad timestamp.\r\n\r\nThere is no expectation that the client will adjust its system clock to match the server (in fact, this would be a\r\npotential attack vector). Instead, the client only uses the server\'s time to calculate an offset used only\r\nfor communications with that particular server. The protocol rewards clients with synchronized clocks by reducing\r\nthe number of round trips required to authenticate the first request.\r\n\r\n\r\n## Usage Example\r\n\r\nServer code:\r\n\r\n```javascript\r\nvar Http = require(\'http\');\r\nvar Hawk = require(\'hawk\');\r\n\r\n\r\n// Credentials lookup function\r\n\r\nvar credentialsFunc = function (id, callback) {\r\n\r\n var credentials = {\r\n key: \'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\',\r\n algorithm: \'sha256\',\r\n user: \'Steve\'\r\n };\r\n\r\n return callback(null, credentials);\r\n};\r\n\r\n// Create HTTP server\r\n\r\nvar handler = function (req, res) {\r\n\r\n // Authenticate incoming request\r\n\r\n Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {\r\n\r\n // Prepare response\r\n\r\n var payload = (!err ? \'Hello \' + credentials.user + \' \' + artifacts.ext : \'Shoosh!\');\r\n var headers = { \'Content-Type\': \'text/plain\' };\r\n\r\n // Generate Server-Authorization response header\r\n\r\n var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers[\'Content-Type\'] });\r\n headers[\'Server-Authorization\'] = header;\r\n\r\n // Send the response back\r\n\r\n res.writeHead(!err ? 200 : 401, headers);\r\n res.end(payload);\r\n });\r\n};\r\n\r\n// Start server\r\n\r\nHttp.createServer(handler).listen(8000, \'example.com\');\r\n```\r\n\r\nClient code:\r\n\r\n```javascript\r\nvar Request = require(\'request\');\r\nvar Hawk = require(\'hawk\');\r\n\r\n\r\n// Client credentials\r\n\r\nvar credentials = {\r\n id: \'dh37fgj492je\',\r\n key: \'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\',\r\n algorithm: \'sha256\'\r\n}\r\n\r\n// Request options\r\n\r\nvar requestOptions = {\r\n uri: \'http://example.com:8000/resource/1?b=1&a=2\',\r\n method: \'GET\',\r\n headers: {}\r\n};\r\n\r\n// Generate Authorization request header\r\n\r\nvar header = Hawk.client.header(\'http://example.com:8000/resource/1?b=1&a=2\', \'GET\', { credentials: credentials, ext: \'some-app-data\' });\r\nrequestOptions.headers.Authorization = header.field;\r\n\r\n// Send authenticated request\r\n\r\nRequest(requestOptions, function (error, response, body) {\r\n\r\n // Authenticate the server\'s response\r\n\r\n var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body });\r\n\r\n // Output results\r\n\r\n console.log(response.statusCode + \': \' + body + (isValid ? \' (valid)\' : \' (invalid)\'));\r\n});\r\n```\r\n\r\n**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local\r\nmachine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP \'start()\' method.\r\n\r\n```javascript\r\nHawk.sntp.start();\r\n```\r\n\r\n\r\n## Protocol Example\r\n\r\nThe client attempts to access a protected resource without authentication, sending the following HTTP request to\r\nthe resource server:\r\n\r\n```\r\nGET /resource/1?b=1&a=2 HTTP/1.1\r\nHost: example.com:8000\r\n```\r\n\r\nThe resource server returns an authentication challenge.\r\n\r\n```\r\nHTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Hawk\r\n```\r\n\r\nThe client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/"\r\nserver. The **Hawk** credentials issued to the client include the following attributes:\r\n\r\n* Key identifier: dh37fgj492je\r\n* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn\r\n* Algorithm: sha256\r\n\r\nThe client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1,\r\n1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline\r\ncharacter):\r\n\r\n```\r\nhawk.1.header\r\n1353832234\r\nj4h3g2\r\nGET\r\n/resource/1?b=1&a=2\r\nexample.com\r\n8000\r\n\r\nsome-app-ext-data\r\n\r\n```\r\n\r\nThe request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string.\r\nThe result is base64-encoded to produce the request MAC:\r\n\r\n```\r\n6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=\r\n```\r\n\r\nThe client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using\r\nthe HTTP `Authorization` request header field:\r\n\r\n```\r\nGET /resource/1?b=1&a=2 HTTP/1.1\r\nHost: example.com:8000\r\nAuthorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE="\r\n```\r\n\r\nThe server validates the request by calculating the request MAC again based on the request received and verifies the validity\r\nand scope of the **Hawk** credentials. If valid, the server responds with the requested resource.\r\n\r\n\r\n### Payload Validation\r\n\r\n**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash\r\nusing the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character):\r\n* `hawk.1.payload`\r\n* the content-type in lowercase, without any parameters (e.g. `application/json`)\r\n* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability)\r\n\r\nFor example:\r\n\r\n* Payload: `Thank you for flying Hawk`\r\n* Content Type: `text/plain`\r\n* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=`\r\n\r\nResults in the following input to the payload hash function (newline terminated values):\r\n\r\n```\r\nhawk.1.payload\r\ntext/plain\r\nThank you for flying Hawk\r\n\r\n```\r\n\r\nWhich produces the following hash value:\r\n\r\n```\r\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\r\n```\r\n\r\nThe client constructs the normalized request string (newline terminated values):\r\n\r\n```\r\nhawk.1.header\r\n1353832234\r\nj4h3g2\r\nPOST\r\n/resource/1?a=1&b=2\r\nexample.com\r\n8000\r\nYi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=\r\nsome-app-ext-data\r\n\r\n```\r\n\r\nThen calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data,\r\nand request MAC, with the request using the HTTP `Authorization` request header field:\r\n\r\n```\r\nPOST /resource/1?a=1&b=2 HTTP/1.1\r\nHost: example.com:8000\r\nAuthorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw="\r\n```\r\n\r\nIt is up to the server if and when it validates the payload for any given request, based solely on it\'s security policy\r\nand the nature of the data included.\r\n\r\nIf the payload is available at the time of authentication, the server uses the hash value provided by the client to construct\r\nthe normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value\r\nwith the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash.\r\n\r\nHowever, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed\r\nat a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value\r\nprovided by the client after validating the MAC.\r\n\r\nIt is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value\r\nincluded in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided\r\nby the client, the payload may be modified by an attacker.\r\n\r\n\r\n## Response Payload Validation\r\n\r\n**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the\r\nclient to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header\r\nas a response header using the exact same syntax as the `Authorization` request header field.\r\n\r\nThe header is contructed using the same process as the client\'s request header. The server uses the same credentials and other\r\nartifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with\r\nnew values based on the server response. The rest as identical to those used by the client.\r\n\r\nThe result MAC digest is included with the optional `hash` and `ext` values:\r\n\r\n```\r\nServer-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"\r\n```\r\n\r\n\r\n## Browser Support and Considerations\r\n\r\nA browser script is provided for including using a `\n\n```\n\n## Documentation\n\nSome functions are also available in the following forms:\n* `Series` - the same as `` but runs only a single async operation at a time\n* `Limit` - the same as `` but runs a maximum of `limit` async operations at a time\n\n### Collections\n\n* [`each`](#each), `eachSeries`, `eachLimit`\n* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit`\n* [`map`](#map), `mapSeries`, `mapLimit`\n* [`filter`](#filter), `filterSeries`, `filterLimit`\n* [`reject`](#reject), `rejectSeries`, `rejectLimit`\n* [`reduce`](#reduce), [`reduceRight`](#reduceRight)\n* [`detect`](#detect), `detectSeries`, `detectLimit`\n* [`sortBy`](#sortBy)\n* [`some`](#some), `someLimit`\n* [`every`](#every), `everyLimit`\n* [`concat`](#concat), `concatSeries`\n\n### Control Flow\n\n* [`series`](#seriestasks-callback)\n* [`parallel`](#parallel), `parallelLimit`\n* [`whilst`](#whilst), [`doWhilst`](#doWhilst)\n* [`until`](#until), [`doUntil`](#doUntil)\n* [`during`](#during), [`doDuring`](#doDuring)\n* [`forever`](#forever)\n* [`waterfall`](#waterfall)\n* [`compose`](#compose)\n* [`seq`](#seq)\n* [`applyEach`](#applyEach), `applyEachSeries`\n* [`queue`](#queue), [`priorityQueue`](#priorityQueue)\n* [`cargo`](#cargo)\n* [`auto`](#auto)\n* [`retry`](#retry)\n* [`iterator`](#iterator)\n* [`times`](#times), `timesSeries`, `timesLimit`\n\n### Utils\n\n* [`apply`](#apply)\n* [`nextTick`](#nextTick)\n* [`memoize`](#memoize)\n* [`unmemoize`](#unmemoize)\n* [`ensureAsync`](#ensureAsync)\n* [`constant`](#constant)\n* [`asyncify`](#asyncify)\n* [`wrapSync`](#wrapSync)\n* [`log`](#log)\n* [`dir`](#dir)\n* [`noConflict`](#noConflict)\n\n## Collections\n\n\n\n### each(arr, iterator, [callback])\n\nApplies the function `iterator` to each item in `arr`, in parallel.\nThe `iterator` is called with an item from the list, and a callback for when it\nhas finished. If the `iterator` passes an error to its `callback`, the main\n`callback` (for the `each` function) is immediately called with the error.\n\nNote, that since this function applies `iterator` to each item in parallel,\nthere is no guarantee that the iterator functions will complete in order.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A function to apply to each item in `arr`.\n The iterator is passed a `callback(err)` which must be called once it has\n completed. If no error has occurred, the `callback` should be run without\n arguments or with an explicit `null` argument. The array index is not passed\n to the iterator. If you need the index, use [`forEachOf`](#forEachOf).\n* `callback(err)` - *Optional* A callback which is called when all `iterator` functions\n have finished, or an error occurs.\n\n__Examples__\n\n\n```js\n// assuming openFiles is an array of file names and saveFile is a function\n// to save the modified contents of that file:\n\nasync.each(openFiles, saveFile, function(err){\n // if any of the saves produced an error, err would equal that error\n});\n```\n\n```js\n// assuming openFiles is an array of file names\n\nasync.each(openFiles, function(file, callback) {\n\n // Perform operation on file here.\n console.log(\'Processing file \' + file);\n\n if( file.length > 32 ) {\n console.log(\'This file name is too long\');\n callback(\'File name too long\');\n } else {\n // Do work to process file here\n console.log(\'File processed\');\n callback();\n }\n}, function(err){\n // if any of the file processing produced an error, err would equal that error\n if( err ) {\n // One of the iterations produced an error.\n // All processing will now stop.\n console.log(\'A file failed to process\');\n } else {\n console.log(\'All files have been processed successfully\');\n }\n});\n```\n\n__Related__\n\n* eachSeries(arr, iterator, [callback])\n* eachLimit(arr, limit, iterator, [callback])\n\n---------------------------------------\n\n\n\n\n### forEachOf(obj, iterator, [callback])\n\nLike `each`, except that it iterates over objects, and passes the key as the second argument to the iterator.\n\n__Arguments__\n\n* `obj` - An object or array to iterate over.\n* `iterator(item, key, callback)` - A function to apply to each item in `obj`.\nThe `key` is the item\'s key, or index in the case of an array. The iterator is\npassed a `callback(err)` which must be called once it has completed. If no\nerror has occurred, the callback should be run without arguments or with an\nexplicit `null` argument.\n* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs.\n\n__Example__\n\n```js\nvar obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};\nvar configs = {};\n\nasync.forEachOf(obj, function (value, key, callback) {\n fs.readFile(__dirname + value, "utf8", function (err, data) {\n if (err) return callback(err);\n try {\n configs[key] = JSON.parse(data);\n } catch (e) {\n return callback(e);\n }\n callback();\n })\n}, function (err) {\n if (err) console.error(err.message);\n // configs is now a map of JSON data\n doSomethingWith(configs);\n})\n```\n\n__Related__\n\n* forEachOfSeries(obj, iterator, [callback])\n* forEachOfLimit(obj, limit, iterator, [callback])\n\n---------------------------------------\n\n\n### map(arr, iterator, [callback])\n\nProduces a new array of values by mapping each value in `arr` through\nthe `iterator` function. The `iterator` is called with an item from `arr` and a\ncallback for when it has finished processing. Each of these callback takes 2 arguments:\nan `error`, and the transformed item from `arr`. If `iterator` passes an error to its\ncallback, the main `callback` (for the `map` function) is immediately called with the error.\n\nNote, that since this function applies the `iterator` to each item in parallel,\nthere is no guarantee that the `iterator` functions will complete in order.\nHowever, the results array will be in the same order as the original `arr`.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A function to apply to each item in `arr`.\n The iterator is passed a `callback(err, transformed)` which must be called once\n it has completed with an error (which can be `null`) and a transformed item.\n* `callback(err, results)` - *Optional* A callback which is called when all `iterator`\n functions have finished, or an error occurs. Results is an array of the\n transformed items from the `arr`.\n\n__Example__\n\n```js\nasync.map([\'file1\',\'file2\',\'file3\'], fs.stat, function(err, results){\n // results is now an array of stats for each file\n});\n```\n\n__Related__\n* mapSeries(arr, iterator, [callback])\n* mapLimit(arr, limit, iterator, [callback])\n\n---------------------------------------\n\n\n\n### filter(arr, iterator, [callback])\n\n__Alias:__ `select`\n\nReturns a new array of all the values in `arr` which pass an async truth test.\n_The callback for each `iterator` call only accepts a single argument of `true` or\n`false`; it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like `fs.exists`. This operation is\nperformed in parallel, but the results array will be in the same order as the\noriginal.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A truth test to apply to each item in `arr`.\n The `iterator` is passed a `callback(truthValue)`, which must be called with a\n boolean argument once it has completed.\n* `callback(results)` - *Optional* A callback which is called after all the `iterator`\n functions have finished.\n\n__Example__\n\n```js\nasync.filter([\'file1\',\'file2\',\'file3\'], fs.exists, function(results){\n // results now equals an array of the existing files\n});\n```\n\n__Related__\n\n* filterSeries(arr, iterator, [callback])\n* filterLimit(arr, limit, iterator, [callback])\n\n---------------------------------------\n\n\n### reject(arr, iterator, [callback])\n\nThe opposite of [`filter`](#filter). Removes values that pass an `async` truth test.\n\n__Related__\n\n* rejectSeries(arr, iterator, [callback])\n* rejectLimit(arr, limit, iterator, [callback])\n\n---------------------------------------\n\n\n### reduce(arr, memo, iterator, [callback])\n\n__Aliases:__ `inject`, `foldl`\n\nReduces `arr` into a single value using an async `iterator` to return\neach successive step. `memo` is the initial state of the reduction.\nThis function only operates in series.\n\nFor performance reasons, it may make sense to split a call to this function into\na parallel map, and then use the normal `Array.prototype.reduce` on the results.\nThis function is for situations where each step in the reduction needs to be async;\nif you can get the data before reducing it, then it\'s probably a good idea to do so.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `memo` - The initial state of the reduction.\n* `iterator(memo, item, callback)` - A function applied to each item in the\n array to produce the next step in the reduction. The `iterator` is passed a\n `callback(err, reduction)` which accepts an optional error as its first\n argument, and the state of the reduction as the second. If an error is\n passed to the callback, the reduction is stopped and the main `callback` is\n immediately called with the error.\n* `callback(err, result)` - *Optional* A callback which is called after all the `iterator`\n functions have finished. Result is the reduced value.\n\n__Example__\n\n```js\nasync.reduce([1,2,3], 0, function(memo, item, callback){\n // pointless async:\n process.nextTick(function(){\n callback(null, memo + item)\n });\n}, function(err, result){\n // result is now equal to the last value of memo, which is 6\n});\n```\n\n---------------------------------------\n\n\n### reduceRight(arr, memo, iterator, [callback])\n\n__Alias:__ `foldr`\n\nSame as [`reduce`](#reduce), only operates on `arr` in reverse order.\n\n\n---------------------------------------\n\n\n### detect(arr, iterator, [callback])\n\nReturns the first value in `arr` that passes an async truth test. The\n`iterator` is applied in parallel, meaning the first iterator to return `true` will\nfire the detect `callback` with that result. That means the result might not be\nthe first item in the original `arr` (in terms of order) that passes the test.\n\nIf order within the original `arr` is important, then look at [`detectSeries`](#detectSeries).\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A truth test to apply to each item in `arr`.\n The iterator is passed a `callback(truthValue)` which must be called with a\n boolean argument once it has completed. **Note: this callback does not take an error as its first argument.**\n* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns\n `true`, or after all the `iterator` functions have finished. Result will be\n the first item in the array that passes the truth test (iterator) or the\n value `undefined` if none passed. **Note: this callback does not take an error as its first argument.**\n\n__Example__\n\n```js\nasync.detect([\'file1\',\'file2\',\'file3\'], fs.exists, function(result){\n // result now equals the first file in the list that exists\n});\n```\n\n__Related__\n\n* detectSeries(arr, iterator, [callback])\n* detectLimit(arr, limit, iterator, [callback])\n\n---------------------------------------\n\n\n### sortBy(arr, iterator, [callback])\n\nSorts a list by the results of running each `arr` value through an async `iterator`.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A function to apply to each item in `arr`.\n The iterator is passed a `callback(err, sortValue)` which must be called once it\n has completed with an error (which can be `null`) and a value to use as the sort\n criteria.\n* `callback(err, results)` - *Optional* A callback which is called after all the `iterator`\n functions have finished, or an error occurs. Results is the items from\n the original `arr` sorted by the values returned by the `iterator` calls.\n\n__Example__\n\n```js\nasync.sortBy([\'file1\',\'file2\',\'file3\'], function(file, callback){\n fs.stat(file, function(err, stats){\n callback(err, stats.mtime);\n });\n}, function(err, results){\n // results is now the original array of files sorted by\n // modified date\n});\n```\n\n__Sort Order__\n\nBy modifying the callback parameter the sorting order can be influenced:\n\n```js\n//ascending order\nasync.sortBy([1,9,3,5], function(x, callback){\n callback(null, x);\n}, function(err,result){\n //result callback\n} );\n\n//descending order\nasync.sortBy([1,9,3,5], function(x, callback){\n callback(null, x*-1); //<- x*-1 instead of x, turns the order around\n}, function(err,result){\n //result callback\n} );\n```\n\n---------------------------------------\n\n\n### some(arr, iterator, [callback])\n\n__Alias:__ `any`\n\nReturns `true` if at least one element in the `arr` satisfies an async test.\n_The callback for each iterator call only accepts a single argument of `true` or\n`false`; it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like `fs.exists`. Once any iterator\ncall returns `true`, the main `callback` is immediately called.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A truth test to apply to each item in the array\n in parallel. The iterator is passed a `callback(truthValue)`` which must be\n called with a boolean argument once it has completed.\n* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns\n `true`, or after all the iterator functions have finished. Result will be\n either `true` or `false` depending on the values of the async tests.\n\n **Note: the callbacks do not take an error as their first argument.**\n__Example__\n\n```js\nasync.some([\'file1\',\'file2\',\'file3\'], fs.exists, function(result){\n // if result is true then at least one of the files exists\n});\n```\n\n__Related__\n\n* someLimit(arr, limit, iterator, callback)\n\n---------------------------------------\n\n\n### every(arr, iterator, [callback])\n\n__Alias:__ `all`\n\nReturns `true` if every element in `arr` satisfies an async test.\n_The callback for each `iterator` call only accepts a single argument of `true` or\n`false`; it does not accept an error argument first!_ This is in-line with the\nway node libraries work with truth tests like `fs.exists`.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A truth test to apply to each item in the array\n in parallel. The iterator is passed a `callback(truthValue)` which must be\n called with a boolean argument once it has completed.\n* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns\n `false`, or after all the iterator functions have finished. Result will be\n either `true` or `false` depending on the values of the async tests.\n\n **Note: the callbacks do not take an error as their first argument.**\n\n__Example__\n\n```js\nasync.every([\'file1\',\'file2\',\'file3\'], fs.exists, function(result){\n // if result is true then every file exists\n});\n```\n\n__Related__\n\n* everyLimit(arr, limit, iterator, callback)\n\n---------------------------------------\n\n\n### concat(arr, iterator, [callback])\n\nApplies `iterator` to each item in `arr`, concatenating the results. Returns the\nconcatenated list. The `iterator`s are called in parallel, and the results are\nconcatenated as they return. There is no guarantee that the results array will\nbe returned in the original order of `arr` passed to the `iterator` function.\n\n__Arguments__\n\n* `arr` - An array to iterate over.\n* `iterator(item, callback)` - A function to apply to each item in `arr`.\n The iterator is passed a `callback(err, results)` which must be called once it\n has completed with an error (which can be `null`) and an array of results.\n* `callback(err, results)` - *Optional* A callback which is called after all the `iterator`\n functions have finished, or an error occurs. Results is an array containing\n the concatenated results of the `iterator` function.\n\n__Example__\n\n```js\nasync.concat([\'dir1\',\'dir2\',\'dir3\'], fs.readdir, function(err, files){\n // files is now a list of filenames that exist in the 3 directories\n});\n```\n\n__Related__\n\n* concatSeries(arr, iterator, [callback])\n\n\n## Control Flow\n\n\n### series(tasks, [callback])\n\nRun the functions in the `tasks` array in series, each one running once the previous\nfunction has completed. If any functions in the series pass an error to its\ncallback, no more functions are run, and `callback` is immediately called with the value of the error.\nOtherwise, `callback` receives an array of results when `tasks` have completed.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function, and the results will be passed to the final `callback` as an object\ninstead of an array. This can be a more readable way of handling results from\n[`series`](#series).\n\n**Note** that while many implementations preserve the order of object properties, the\n[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\nexplicitly states that\n\n> The mechanics and order of enumerating the properties is not specified.\n\nSo if you rely on the order in which your series of functions are executed, and want\nthis to work on all platforms, consider using an array.\n\n__Arguments__\n\n* `tasks` - An array or object containing functions to run, each function is passed\n a `callback(err, result)` it must call on completion with an error `err` (which can\n be `null`) and an optional `result` value.\n* `callback(err, results)` - An optional callback to run once all the functions\n have completed. This function gets a results array (or object) containing all\n the result arguments passed to the `task` callbacks.\n\n__Example__\n\n```js\nasync.series([\n function(callback){\n // do some stuff ...\n callback(null, \'one\');\n },\n function(callback){\n // do some more stuff ...\n callback(null, \'two\');\n }\n],\n// optional callback\nfunction(err, results){\n // results is now equal to [\'one\', \'two\']\n});\n\n\n// an example using an object instead of an array\nasync.series({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equal to: {one: 1, two: 2}\n});\n```\n\n---------------------------------------\n\n\n### parallel(tasks, [callback])\n\nRun the `tasks` array of functions in parallel, without waiting until the previous\nfunction has completed. If any of the functions pass an error to its\ncallback, the main `callback` is immediately called with the value of the error.\nOnce the `tasks` have completed, the results are passed to the final `callback` as an\narray.\n\n**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded.\n\nIt is also possible to use an object instead of an array. Each property will be\nrun as a function and the results will be passed to the final `callback` as an object\ninstead of an array. This can be a more readable way of handling results from\n[`parallel`](#parallel).\n\n\n__Arguments__\n\n* `tasks` - An array or object containing functions to run. Each function is passed\n a `callback(err, result)` which it must call on completion with an error `err`\n (which can be `null`) and an optional `result` value.\n* `callback(err, results)` - An optional callback to run once all the functions\n have completed successfully. This function gets a results array (or object) containing all\n the result arguments passed to the task callbacks.\n\n__Example__\n\n```js\nasync.parallel([\n function(callback){\n setTimeout(function(){\n callback(null, \'one\');\n }, 200);\n },\n function(callback){\n setTimeout(function(){\n callback(null, \'two\');\n }, 100);\n }\n],\n// optional callback\nfunction(err, results){\n // the results array will equal [\'one\',\'two\'] even though\n // the second function had a shorter timeout.\n});\n\n\n// an example using an object instead of an array\nasync.parallel({\n one: function(callback){\n setTimeout(function(){\n callback(null, 1);\n }, 200);\n },\n two: function(callback){\n setTimeout(function(){\n callback(null, 2);\n }, 100);\n }\n},\nfunction(err, results) {\n // results is now equals to: {one: 1, two: 2}\n});\n```\n\n__Related__\n\n* parallelLimit(tasks, limit, [callback])\n\n---------------------------------------\n\n\n### whilst(test, fn, callback)\n\nRepeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped,\nor an error occurs.\n\n__Arguments__\n\n* `test()` - synchronous truth test to perform before each execution of `fn`.\n* `fn(callback)` - A function which is called each time `test` passes. The function is\n passed a `callback(err)`, which must be called once it has completed with an\n optional `err` argument.\n* `callback(err, [results])` - A callback which is called after the test\n function has failed and repeated execution of `fn` has stopped. `callback`\n will be passed an error and any arguments passed to the final `fn`\'s callback.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.whilst(\n function () { return count < 5; },\n function (callback) {\n count++;\n setTimeout(function () {\n callback(null, count);\n }, 1000);\n },\n function (err, n) {\n // 5 seconds have passed, n = 5\n }\n);\n```\n\n---------------------------------------\n\n\n### doWhilst(fn, test, callback)\n\nThe post-check version of [`whilst`](#whilst). To reflect the difference in\nthe order of operations, the arguments `test` and `fn` are switched.\n\n`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n\n---------------------------------------\n\n\n### until(test, fn, callback)\n\nRepeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped,\nor an error occurs. `callback` will be passed an error and any arguments passed\nto the final `fn`\'s callback.\n\nThe inverse of [`whilst`](#whilst).\n\n---------------------------------------\n\n\n### doUntil(fn, test, callback)\n\nLike [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`.\n\n---------------------------------------\n\n\n### during(test, fn, callback)\n\nLike [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error.\n\n__Example__\n\n```js\nvar count = 0;\n\nasync.during(\n function (callback) {\n return callback(null, count < 5);\n },\n function (callback) {\n count++;\n setTimeout(callback, 1000);\n },\n function (err) {\n // 5 seconds have passed\n }\n);\n```\n\n---------------------------------------\n\n\n### doDuring(fn, test, callback)\n\nThe post-check version of [`during`](#during). To reflect the difference in\nthe order of operations, the arguments `test` and `fn` are switched.\n\nAlso a version of [`doWhilst`](#doWhilst) with asynchronous `test` function.\n\n---------------------------------------\n\n\n### forever(fn, [errback])\n\nCalls the asynchronous function `fn` with a callback parameter that allows it to\ncall itself again, in series, indefinitely.\n\nIf an error is passed to the callback then `errback` is called with the\nerror, and execution stops, otherwise it will never be called.\n\n```js\nasync.forever(\n function(next) {\n // next is suitable for passing to things that need a callback(err [, whatever]);\n // it will result in this function being called again.\n },\n function(err) {\n // if next is called with a value in its first parameter, it will appear\n // in here as \'err\', and execution will stop.\n }\n);\n```\n\n---------------------------------------\n\n\n### waterfall(tasks, [callback])\n\nRuns the `tasks` array of functions in series, each passing their results to the next in\nthe array. However, if any of the `tasks` pass an error to their own callback, the\nnext function is not executed, and the main `callback` is immediately called with\nthe error.\n\n__Arguments__\n\n* `tasks` - An array of functions to run, each function is passed a\n `callback(err, result1, result2, ...)` it must call on completion. The first\n argument is an error (which can be `null`) and any further arguments will be\n passed as arguments in order to the next task.\n* `callback(err, [results])` - An optional callback to run once all the functions\n have completed. This will be passed the results of the last task\'s callback.\n\n\n\n__Example__\n\n```js\nasync.waterfall([\n function(callback) {\n callback(null, \'one\', \'two\');\n },\n function(arg1, arg2, callback) {\n // arg1 now equals \'one\' and arg2 now equals \'two\'\n callback(null, \'three\');\n },\n function(arg1, callback) {\n // arg1 now equals \'three\'\n callback(null, \'done\');\n }\n], function (err, result) {\n // result now equals \'done\'\n});\n```\nOr, with named functions:\n\n```js\nasync.waterfall([\n myFirstFunction,\n mySecondFunction,\n myLastFunction,\n], function (err, result) {\n // result now equals \'done\'\n});\nfunction myFirstFunction(callback) {\n callback(null, \'one\', \'two\');\n}\nfunction mySecondFunction(arg1, arg2, callback) {\n // arg1 now equals \'one\' and arg2 now equals \'two\'\n callback(null, \'three\');\n}\nfunction myLastFunction(arg1, callback) {\n // arg1 now equals \'three\'\n callback(null, \'done\');\n}\n```\n\nOr, if you need to pass any argument to the first function:\n\n```js\nasync.waterfall([\n async.apply(myFirstFunction, \'zero\'),\n mySecondFunction,\n myLastFunction,\n], function (err, result) {\n // result now equals \'done\'\n});\nfunction myFirstFunction(arg1, callback) {\n // arg1 now equals \'zero\'\n callback(null, \'one\', \'two\');\n}\nfunction mySecondFunction(arg1, arg2, callback) {\n // arg1 now equals \'one\' and arg2 now equals \'two\'\n callback(null, \'three\');\n}\nfunction myLastFunction(arg1, callback) {\n // arg1 now equals \'three\'\n callback(null, \'done\');\n}\n```\n\n---------------------------------------\n\n### compose(fn1, fn2...)\n\nCreates a function which is a composition of the passed asynchronous\nfunctions. Each function consumes the return value of the function that\nfollows. Composing functions `f()`, `g()`, and `h()` would produce the result of\n`f(g(h()))`, only this version uses callbacks to obtain the return values.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* `functions...` - the asynchronous functions to compose\n\n\n__Example__\n\n```js\nfunction add1(n, callback) {\n setTimeout(function () {\n callback(null, n + 1);\n }, 10);\n}\n\nfunction mul3(n, callback) {\n setTimeout(function () {\n callback(null, n * 3);\n }, 10);\n}\n\nvar add1mul3 = async.compose(mul3, add1);\n\nadd1mul3(4, function (err, result) {\n // result now equals 15\n});\n```\n\n---------------------------------------\n\n### seq(fn1, fn2...)\n\nVersion of the compose function that is more natural to read.\nEach function consumes the return value of the previous function.\nIt is the equivalent of [`compose`](#compose) with the arguments reversed.\n\nEach function is executed with the `this` binding of the composed function.\n\n__Arguments__\n\n* `functions...` - the asynchronous functions to compose\n\n\n__Example__\n\n```js\n// Requires lodash (or underscore), express3 and dresende\'s orm2.\n// Part of an app, that fetches cats of the logged user.\n// This example uses `seq` function to avoid overnesting and error\n// handling clutter.\napp.get(\'/cats\', function(request, response) {\n var User = request.models.User;\n async.seq(\n _.bind(User.get, User), // \'User.get\' has signature (id, callback(err, data))\n function(user, fn) {\n user.getCats(fn); // \'getCats\' has signature (callback(err, data))\n }\n )(req.session.user_id, function (err, cats) {\n if (err) {\n console.error(err);\n response.json({ status: \'error\', message: err.message });\n } else {\n response.json({ status: \'ok\', message: \'Cats found\', data: cats });\n }\n });\n});\n```\n\n---------------------------------------\n\n### applyEach(fns, args..., callback)\n\nApplies the provided arguments to each function in the array, calling\n`callback` after all functions have completed. If you only provide the first\nargument, then it will return a function which lets you pass in the\narguments as if it were a single function call.\n\n__Arguments__\n\n* `fns` - the asynchronous functions to all call with the same arguments\n* `args...` - any number of separate arguments to pass to the function\n* `callback` - the final argument should be the callback, called when all\n functions have completed processing\n\n\n__Example__\n\n```js\nasync.applyEach([enableSearch, updateSchema], \'bucket\', callback);\n\n// partial application example:\nasync.each(\n buckets,\n async.applyEach([enableSearch, updateSchema]),\n callback\n);\n```\n\n__Related__\n\n* applyEachSeries(tasks, args..., [callback])\n\n---------------------------------------\n\n\n### queue(worker, [concurrency])\n\nCreates a `queue` object with the specified `concurrency`. Tasks added to the\n`queue` are processed in parallel (up to the `concurrency` limit). If all\n`worker`s are in progress, the task is queued until one becomes available.\nOnce a `worker` completes a `task`, that `task`\'s callback is called.\n\n__Arguments__\n\n* `worker(task, callback)` - An asynchronous function for processing a queued\n task, which must call its `callback(err)` argument when finished, with an\n optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`.\n* `concurrency` - An `integer` for determining how many `worker` functions should be\n run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown.\n\n__Queue objects__\n\nThe `queue` object returned by this function has the following properties and\nmethods:\n\n* `length()` - a function returning the number of items waiting to be processed.\n* `started` - a function returning whether or not any items have been pushed and processed by the queue\n* `running()` - a function returning the number of items currently being processed.\n* `workersList()` - a function returning the array of items currently being processed.\n* `idle()` - a function returning false if there are items waiting or being processed, or true if not.\n* `concurrency` - an integer for determining how many `worker` functions should be\n run in parallel. This property can be changed after a `queue` is created to\n alter the concurrency on-the-fly.\n* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once\n the `worker` has finished processing the task. Instead of a single task, a `tasks` array\n can be submitted. The respective callback is used for every task in the list.\n* `unshift(task, [callback])` - add a new task to the front of the `queue`.\n* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit,\n and further tasks will be queued.\n* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`.\n* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`.\n* `paused` - a boolean for determining whether the queue is in a paused state\n* `pause()` - a function that pauses the processing of tasks until `resume()` is called.\n* `resume()` - a function that resumes the processing of queued tasks when the queue is paused.\n* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle.\n\n__Example__\n\n```js\n// create a queue object with concurrency 2\n\nvar q = async.queue(function (task, callback) {\n console.log(\'hello \' + task.name);\n callback();\n}, 2);\n\n\n// assign a callback\nq.drain = function() {\n console.log(\'all items have been processed\');\n}\n\n// add some items to the queue\n\nq.push({name: \'foo\'}, function (err) {\n console.log(\'finished processing foo\');\n});\nq.push({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n\n// add some items to the queue (batch-wise)\n\nq.push([{name: \'baz\'},{name: \'bay\'},{name: \'bax\'}], function (err) {\n console.log(\'finished processing item\');\n});\n\n// add some items to the front of the queue\n\nq.unshift({name: \'bar\'}, function (err) {\n console.log(\'finished processing bar\');\n});\n```\n\n\n---------------------------------------\n\n\n### priorityQueue(worker, concurrency)\n\nThe same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects:\n\n* `push(task, priority, [callback])` - `priority` should be a number. If an array of\n `tasks` is given, all tasks will be assigned the same priority.\n* The `unshift` method was removed.\n\n---------------------------------------\n\n\n### cargo(worker, [payload])\n\nCreates a `cargo` object with the specified payload. Tasks added to the\ncargo will be processed altogether (up to the `payload` limit). If the\n`worker` is in progress, the task is queued until it becomes available. Once\nthe `worker` has completed some tasks, each callback of those tasks is called.\nCheck out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work.\n\nWhile [queue](#queue) passes only one task to one of a group of workers\nat a time, cargo passes an array of tasks to a single worker, repeating\nwhen the worker is finished.\n\n__Arguments__\n\n* `worker(tasks, callback)` - An asynchronous function for processing an array of\n queued tasks, which must call its `callback(err)` argument when finished, with\n an optional `err` argument.\n* `payload` - An optional `integer` for determining how many tasks should be\n processed per round; if omitted, the default is unlimited.\n\n__Cargo objects__\n\nThe `cargo` object returned by this function has the following properties and\nmethods:\n\n* `length()` - A function returning the number of items waiting to be processed.\n* `payload` - An `integer` for determining how many tasks should be\n process per round. This property can be changed after a `cargo` is created to\n alter the payload on-the-fly.\n* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called\n once the `worker` has finished processing the task. Instead of a single task, an array of `tasks`\n can be submitted. The respective callback is used for every task in the list.\n* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued.\n* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`.\n* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`.\n* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue)\n\n__Example__\n\n```js\n// create a cargo object with payload 2\n\nvar cargo = async.cargo(function (tasks, callback) {\n for(var i=0; i\n### auto(tasks, [concurrency], [callback])\n\nDetermines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied.\n\nIf any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far.\n\nNote, all functions are called with a `results` object as a second argument,\nso it is unsafe to pass functions in the `tasks` object which cannot handle the\nextra argument.\n\nFor example, this snippet of code:\n\n```js\nasync.auto({\n readData: async.apply(fs.readFile, \'data.txt\', \'utf-8\')\n}, callback);\n```\n\nwill have the effect of calling `readFile` with the results object as the last\nargument, which will fail:\n\n```js\nfs.readFile(\'data.txt\', \'utf-8\', cb, {});\n```\n\nInstead, wrap the call to `readFile` in a function which does not forward the\n`results` object:\n\n```js\nasync.auto({\n readData: function(cb, results){\n fs.readFile(\'data.txt\', \'utf-8\', cb);\n }\n}, callback);\n```\n\n__Arguments__\n\n* `tasks` - An object. Each of its properties is either a function or an array of\n requirements, with the function itself the last item in the array. The object\'s key\n of a property serves as the name of the task defined by that property,\n i.e. can be used when specifying requirements for other tasks.\n The function receives two arguments: (1) a `callback(err, result)` which must be\n called when finished, passing an `error` (which can be `null`) and the result of\n the function\'s execution, and (2) a `results` object, containing the results of\n the previously executed functions.\n* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible.\n* `callback(err, results)` - An optional callback which is called when all the\n tasks have been completed. It receives the `err` argument if any `tasks`\n pass an error to their callback. Results are always returned; however, if\n an error occurs, no further `tasks` will be performed, and the results\n object will only contain partial results.\n\n\n__Example__\n\n```js\nasync.auto({\n get_data: function(callback){\n console.log(\'in get_data\');\n // async code to get some data\n callback(null, \'data\', \'converted to array\');\n },\n make_folder: function(callback){\n console.log(\'in make_folder\');\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n callback(null, \'folder\');\n },\n write_file: [\'get_data\', \'make_folder\', function(callback, results){\n console.log(\'in write_file\', JSON.stringify(results));\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n callback(null, \'filename\');\n }],\n email_link: [\'write_file\', function(callback, results){\n console.log(\'in email_link\', JSON.stringify(results));\n // once the file is written let\'s email a link to it...\n // results.write_file contains the filename returned by write_file.\n callback(null, {\'file\':results.write_file, \'email\':\'user@example.com\'});\n }]\n}, function(err, results) {\n console.log(\'err = \', err);\n console.log(\'results = \', results);\n});\n```\n\nThis is a fairly trivial example, but to do this using the basic parallel and\nseries functions would look like this:\n\n```js\nasync.parallel([\n function(callback){\n console.log(\'in get_data\');\n // async code to get some data\n callback(null, \'data\', \'converted to array\');\n },\n function(callback){\n console.log(\'in make_folder\');\n // async code to create a directory to store a file in\n // this is run at the same time as getting the data\n callback(null, \'folder\');\n }\n],\nfunction(err, results){\n async.series([\n function(callback){\n console.log(\'in write_file\', JSON.stringify(results));\n // once there is some data and the directory exists,\n // write the data to a file in the directory\n results.push(\'filename\');\n callback(null);\n },\n function(callback){\n console.log(\'in email_link\', JSON.stringify(results));\n // once the file is written let\'s email a link to it...\n callback(null, {\'file\':results.pop(), \'email\':\'user@example.com\'});\n }\n ]);\n});\n```\n\nFor a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding\nnew tasks much easier (and the code more readable).\n\n\n---------------------------------------\n\n\n### retry([opts = {times: 5, interval: 0}| 5], task, [callback])\n\nAttempts to get a successful response from `task` no more than `times` times before\nreturning an error. If the task is successful, the `callback` will be passed the result\nof the successful task. If all attempts fail, the callback will be passed the error and\nresult (if any) of the final attempt.\n\n__Arguments__\n\n* `opts` - Can be either an object with `times` and `interval` or a number.\n * `times` - The number of attempts to make before giving up. The default is `5`.\n * `interval` - The time to wait between retries, in milliseconds. The default is `0`.\n * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`. \n* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)`\n which must be called when finished, passing `err` (which can be `null`) and the `result` of\n the function\'s execution, and (2) a `results` object, containing the results of\n the previously executed functions (if nested inside another control flow).\n* `callback(err, results)` - An optional callback which is called when the\n task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`.\n\nThe [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below:\n\n```js\n// try calling apiMethod 3 times\nasync.retry(3, apiMethod, function(err, result) {\n // do something with the result\n});\n```\n\n```js\n// try calling apiMethod 3 times, waiting 200 ms between each retry \nasync.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n // do something with the result\n});\n```\n\n```js\n// try calling apiMethod the default 5 times no delay between each retry \nasync.retry(apiMethod, function(err, result) {\n // do something with the result\n});\n```\n\nIt can also be embedded within other control flow functions to retry individual methods\nthat are not as reliable, like this:\n\n```js\nasync.auto({\n users: api.getUsers.bind(api),\n payments: async.retry(3, api.getPayments.bind(api))\n}, function(err, results) {\n // do something with the results\n});\n```\n\n\n---------------------------------------\n\n\n### iterator(tasks)\n\nCreates an iterator function which calls the next function in the `tasks` array,\nreturning a continuation to call the next one after that. It\'s also possible to\n“peek” at the next iterator with `iterator.next()`.\n\nThis function is used internally by the `async` module, but can be useful when\nyou want to manually control the flow of functions in series.\n\n__Arguments__\n\n* `tasks` - An array of functions to run.\n\n__Example__\n\n```js\nvar iterator = async.iterator([\n function(){ sys.p(\'one\'); },\n function(){ sys.p(\'two\'); },\n function(){ sys.p(\'three\'); }\n]);\n\nnode> var iterator2 = iterator();\n\'one\'\nnode> var iterator3 = iterator2();\n\'two\'\nnode> iterator3();\n\'three\'\nnode> var nextfn = iterator2.next();\nnode> nextfn();\n\'three\'\n```\n\n---------------------------------------\n\n\n### apply(function, arguments..)\n\nCreates a continuation function with some arguments already applied.\n\nUseful as a shorthand when combined with other control flow functions. Any arguments\npassed to the returned function are added to the arguments originally passed\nto apply.\n\n__Arguments__\n\n* `function` - The function you want to eventually apply all arguments to.\n* `arguments...` - Any number of arguments to automatically apply when the\n continuation is called.\n\n__Example__\n\n```js\n// using apply\n\nasync.parallel([\n async.apply(fs.writeFile, \'testfile1\', \'test1\'),\n async.apply(fs.writeFile, \'testfile2\', \'test2\'),\n]);\n\n\n// the same process without using apply\n\nasync.parallel([\n function(callback){\n fs.writeFile(\'testfile1\', \'test1\', callback);\n },\n function(callback){\n fs.writeFile(\'testfile2\', \'test2\', callback);\n }\n]);\n```\n\nIt\'s possible to pass any number of additional arguments when calling the\ncontinuation:\n\n```js\nnode> var fn = async.apply(sys.puts, \'one\');\nnode> fn(\'two\', \'three\');\none\ntwo\nthree\n```\n\n---------------------------------------\n\n\n### nextTick(callback), setImmediate(callback)\n\nCalls `callback` on a later loop around the event loop. In Node.js this just\ncalls `process.nextTick`; in the browser it falls back to `setImmediate(callback)`\nif available, otherwise `setTimeout(callback, 0)`, which means other higher priority\nevents may precede the execution of `callback`.\n\nThis is used internally for browser-compatibility purposes.\n\n__Arguments__\n\n* `callback` - The function to call on a later loop around the event loop.\n\n__Example__\n\n```js\nvar call_order = [];\nasync.nextTick(function(){\n call_order.push(\'two\');\n // call_order now equals [\'one\',\'two\']\n});\ncall_order.push(\'one\')\n```\n\n\n### times(n, iterator, [callback])\n\nCalls the `iterator` function `n` times, and accumulates results in the same manner\nyou would use with [`map`](#map).\n\n__Arguments__\n\n* `n` - The number of times to run the function.\n* `iterator` - The function to call `n` times.\n* `callback` - see [`map`](#map)\n\n__Example__\n\n```js\n// Pretend this is some complicated async factory\nvar createUser = function(id, callback) {\n callback(null, {\n id: \'user\' + id\n })\n}\n// generate 5 users\nasync.times(5, function(n, next){\n createUser(n, function(err, user) {\n next(err, user)\n })\n}, function(err, users) {\n // we should now have 5 users\n});\n```\n\n__Related__\n\n* timesSeries(n, iterator, [callback])\n* timesLimit(n, limit, iterator, [callback])\n\n\n## Utils\n\n\n### memoize(fn, [hasher])\n\nCaches the results of an `async` function. When creating a hash to store function\nresults against, the callback is omitted from the hash and an optional hash\nfunction can be used.\n\nIf no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function.\n\nThe cache of results is exposed as the `memo` property of the function returned\nby `memoize`.\n\n__Arguments__\n\n* `fn` - The function to proxy and cache results from.\n* `hasher` - An optional function for generating a custom hash for storing\n results. It has all the arguments applied to it apart from the callback, and\n must be synchronous.\n\n__Example__\n\n```js\nvar slow_fn = function (name, callback) {\n // do something\n callback(null, result);\n};\nvar fn = async.memoize(slow_fn);\n\n// fn can now be used as if it were slow_fn\nfn(\'some name\', function () {\n // callback\n});\n```\n\n\n### unmemoize(fn)\n\nUndoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized\nform. Handy for testing.\n\n__Arguments__\n\n* `fn` - the memoized function\n\n---------------------------------------\n\n\n### ensureAsync(fn)\n\nWrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained.\n\n__Arguments__\n\n* `fn` - an async function, one that expects a node-style callback as its last argument\n\nReturns a wrapped function with the exact same call signature as the function passed in.\n\n__Example__\n\n```js\nfunction sometimesAsync(arg, callback) {\n if (cache[arg]) {\n return callback(null, cache[arg]); // this would be synchronous!!\n } else {\n doSomeIO(arg, callback); // this IO would be asynchronous\n }\n}\n\n// this has a risk of stack overflows if many results are cached in a row\nasync.mapSeries(args, sometimesAsync, done);\n\n// this will defer sometimesAsync\'s callback if necessary,\n// preventing stack overflows\nasync.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n\n```\n\n---------------------------------------\n\n\n### constant(values...)\n\nReturns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`.\n\n__Example__\n\n```js\nasync.waterfall([\n async.constant(42),\n function (value, next) {\n // value === 42\n },\n //...\n], callback);\n\nasync.waterfall([\n async.constant(filename, "utf8"),\n fs.readFile,\n function (fileData, next) {\n //...\n }\n //...\n], callback);\n\nasync.auto({\n hostname: async.constant("https://server.net/"),\n port: findFreePort,\n launchServer: ["hostname", "port", function (cb, options) {\n startServer(options, cb);\n }],\n //...\n}, callback);\n\n```\n\n---------------------------------------\n\n\n\n### asyncify(func)\n\n__Alias:__ `wrapSync`\n\nTake a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback.\n\n__Example__\n\n```js\nasync.waterfall([\n async.apply(fs.readFile, filename, "utf8"),\n async.asyncify(JSON.parse),\n function (data, next) {\n // data is the result of parsing the text.\n // If there was a parsing error, it would have been caught.\n }\n], callback)\n```\n\nIf the function passed to `asyncify` returns a Promise, that promises\'s resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example:\n\n```js\nasync.waterfall([\n async.apply(fs.readFile, filename, "utf8"),\n async.asyncify(function (contents) {\n return db.model.create(contents);\n }),\n function (model, next) {\n // `model` is the instantiated model object. \n // If there was an error, this function would be skipped.\n }\n], callback)\n```\n\nThis also means you can asyncify ES2016 `async` functions.\n\n```js\nvar q = async.queue(async.asyncify(async function (file) {\n var intermediateStep = await processFile(file);\n return await somePromise(intermediateStep)\n}));\n\nq.push(files);\n```\n\n---------------------------------------\n\n\n### log(function, arguments)\n\nLogs the result of an `async` function to the `console`. Only works in Node.js or\nin browsers that support `console.log` and `console.error` (such as FF and Chrome).\nIf multiple arguments are returned from the async function, `console.log` is\ncalled on each argument in order.\n\n__Arguments__\n\n* `function` - The function you want to eventually apply all arguments to.\n* `arguments...` - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, \'hello \' + name);\n }, 1000);\n};\n```\n```js\nnode> async.log(hello, \'world\');\n\'hello world\'\n```\n\n---------------------------------------\n\n\n### dir(function, arguments)\n\nLogs the result of an `async` function to the `console` using `console.dir` to\ndisplay the properties of the resulting object. Only works in Node.js or\nin browsers that support `console.dir` and `console.error` (such as FF and Chrome).\nIf multiple arguments are returned from the async function, `console.dir` is\ncalled on each argument in order.\n\n__Arguments__\n\n* `function` - The function you want to eventually apply all arguments to.\n* `arguments...` - Any number of arguments to apply to the function.\n\n__Example__\n\n```js\nvar hello = function(name, callback){\n setTimeout(function(){\n callback(null, {hello: name});\n }, 1000);\n};\n```\n```js\nnode> async.dir(hello, \'world\');\n{hello: \'world\'}\n```\n\n---------------------------------------\n\n\n### noConflict()\n\nChanges the value of `async` back to its original value, returning a reference to the\n`async` object.\n', 2926 silly install resolved readmeFilename: 'README.md', 2926 silly install resolved homepage: 'https://github.com/caolan/async', 2926 silly install resolved _id: 'async@1.5.2', 2926 silly install resolved _shasum: 'ec6a61ae56480c0c3cb241c95618e20892f9672a', 2926 silly install resolved _resolved: 'https://registry.npmjs.org/async/-/async-1.5.2.tgz', 2926 silly install resolved _from: 'async@>=1.5.2 <2.0.0' } ] 2927 info install async@1.5.2 into E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data 2928 info installOne async@1.5.2 2929 verbose installOne of async to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data not in flight; installing 2930 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\readable-stream\2.0.6\package\package.json written 2931 silly install resolved [ { name: 'readable-stream', 2931 silly install resolved version: '2.0.6', 2931 silly install resolved description: 'Streams3, a user-land copy of the stream library from Node.js', 2931 silly install resolved main: 'readable.js', 2931 silly install resolved dependencies: 2931 silly install resolved { 'core-util-is': '~1.0.0', 2931 silly install resolved inherits: '~2.0.1', 2931 silly install resolved isarray: '~1.0.0', 2931 silly install resolved 'process-nextick-args': '~1.0.6', 2931 silly install resolved string_decoder: '~0.10.x', 2931 silly install resolved 'util-deprecate': '~1.0.1' }, 2931 silly install resolved devDependencies: { tap: '~0.2.6', tape: '~4.5.1', zuul: '~3.9.0' }, 2931 silly install resolved scripts: 2931 silly install resolved { test: 'tap test/parallel/*.js test/ours/*.js', 2931 silly install resolved browser: 'npm run write-zuul && zuul -- test/browser.js', 2931 silly install resolved 'write-zuul': 'printf "ui: tape\nbrowsers:\n - name: $BROWSER_NAME\n version: $BROWSER_VERSION\n">.zuul.yml' }, 2931 silly install resolved repository: { type: 'git', url: 'git://github.com/nodejs/readable-stream' }, 2931 silly install resolved keywords: [ 'readable', 'stream', 'pipe' ], 2931 silly install resolved browser: { util: false }, 2931 silly install resolved license: 'MIT', 2931 silly install resolved readme: '# readable-stream\n\n***Node-core v5.8.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream)\n\n\n[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/)\n[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/)\n\n\n[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream)\n\n```bash\nnpm install --save readable-stream\n```\n\n***Node-core streams for userland***\n\nThis package is a mirror of the Streams2 and Streams3 implementations in\nNode-core, including [documentation](doc/stream.markdown).\n\nIf you want to guarantee a stable streams base, regardless of what version of\nNode you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html).\n\nAs of version 2.0.0 **readable-stream** uses semantic versioning. \n\n# Streams WG Team Members\n\n* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com>\n - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B\n* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com>\n - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242\n* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org>\n - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D\n* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com>\n* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com>\n* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me>\n', 2931 silly install resolved readmeFilename: 'README.md', 2931 silly install resolved bugs: { url: 'https://github.com/nodejs/readable-stream/issues' }, 2931 silly install resolved homepage: 'https://github.com/nodejs/readable-stream', 2931 silly install resolved _id: 'readable-stream@2.0.6', 2931 silly install resolved _shasum: '8f90341e68a53ccc928788dacfcd11b36eb9b78e', 2931 silly install resolved _resolved: 'https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz', 2931 silly install resolved _from: 'readable-stream@>=2.0.5 <2.1.0' } ] 2932 info install readable-stream@2.0.6 into E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl 2933 info installOne readable-stream@2.0.6 2934 verbose installOne of readable-stream to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl not in flight; installing 2935 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\readable-stream-ace98522ab8a2ffd.lock for E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream 2936 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\async-3b56a1723509cbfe.lock for E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async 2937 silly install write writing readable-stream 2.0.6 to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream 2938 silly cache addNamed cb readable-stream@2.0.6 2939 verbose unbuild node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream 2940 silly install write writing async 1.5.2 to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async 2941 silly cache addNamed cb async@1.5.2 2942 verbose unbuild node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async 2943 http 304 https://registry.npmjs.org/sshpk 2944 silly get cb [ 304, 2944 silly get { date: 'Thu, 28 Apr 2016 09:35:14 GMT', 2944 silly get via: '1.1 varnish', 2944 silly get 'cache-control': 'max-age=300', 2944 silly get etag: '"T55APDSL6E6AAMMWJC9M65OR"', 2944 silly get age: '18', 2944 silly get connection: 'keep-alive', 2944 silly get 'x-served-by': 'cache-lcy1132-LCY', 2944 silly get 'x-cache': 'HIT', 2944 silly get 'x-cache-hits': '3', 2944 silly get 'x-timer': 'S1461836114.207210,VS0,VE0', 2944 silly get vary: 'Accept-Encoding' } ] 2945 verbose etag https://registry.npmjs.org/sshpk from cache 2946 verbose get saving sshpk to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\sshpk\.cache.json 2947 http 304 https://registry.npmjs.org/assert-plus 2948 silly get cb [ 304, 2948 silly get { date: 'Thu, 28 Apr 2016 09:35:14 GMT', 2948 silly get via: '1.1 varnish', 2948 silly get 'cache-control': 'max-age=300', 2948 silly get etag: '"CDXANEU9TYY5MJGCB0W7NKCP0"', 2948 silly get age: '64', 2948 silly get connection: 'keep-alive', 2948 silly get 'x-served-by': 'cache-lcy1131-LCY', 2948 silly get 'x-cache': 'HIT', 2948 silly get 'x-cache-hits': '7', 2948 silly get 'x-timer': 'S1461836114.207324,VS0,VE0', 2948 silly get vary: 'Accept-Encoding' } ] 2949 verbose etag https://registry.npmjs.org/assert-plus from cache 2950 verbose get saving assert-plus to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\assert-plus\.cache.json 2951 http 304 https://registry.npmjs.org/jsprim 2952 silly get cb [ 304, 2952 silly get { date: 'Thu, 28 Apr 2016 09:35:14 GMT', 2952 silly get via: '1.1 varnish', 2952 silly get 'cache-control': 'max-age=300', 2952 silly get etag: '"3YGGY16NVDUR7BVVDXVSYGMYA"', 2952 silly get age: '121', 2952 silly get connection: 'keep-alive', 2952 silly get 'x-served-by': 'cache-lcy1132-LCY', 2952 silly get 'x-cache': 'HIT', 2952 silly get 'x-cache-hits': '6', 2952 silly get 'x-timer': 'S1461836114.206974,VS0,VE0', 2952 silly get vary: 'Accept-Encoding' } ] 2953 verbose etag https://registry.npmjs.org/jsprim from cache 2954 verbose get saving jsprim to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\jsprim\.cache.json 2955 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream is being purged from base E:\cartridge-images 2956 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream 2957 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async is being purged from base E:\cartridge-images 2958 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async 2959 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\readable-stream\2.0.6\package.tgz 2960 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream 2961 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream is being purged 2962 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\bl\node_modules\readable-stream 2963 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\async\1.5.2\package.tgz 2964 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async 2965 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async is being purged 2966 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\form-data\node_modules\async 2967 info install node-uuid@1.4.7 2968 silly gunzTarPerm modes [ '777', '666' ] 2969 silly gunzTarPerm modes [ '777', '666' ] 2970 info postinstall node-uuid@1.4.7 2971 info preinstall har-validator@2.0.6 2972 verbose unlock done using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\node-uuid-6b4f5986c2ef27a9.lock for E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\node-uuid 2973 silly gunzTarPerm extractEntry package.json 2974 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 2975 silly addNameRange number 2 { name: 'sshpk', range: '>=1.7.0 <2.0.0', hasData: true } 2976 silly addNameRange versions [ 'sshpk', 2976 silly addNameRange [ '1.0.0', 2976 silly addNameRange '1.0.1', 2976 silly addNameRange '1.0.2', 2976 silly addNameRange '1.0.3', 2976 silly addNameRange '1.0.4', 2976 silly addNameRange '1.1.0', 2976 silly addNameRange '1.2.0', 2976 silly addNameRange '1.2.1', 2976 silly addNameRange '1.3.0', 2976 silly addNameRange '1.4.0', 2976 silly addNameRange '1.4.1', 2976 silly addNameRange '1.4.2', 2976 silly addNameRange '1.4.3', 2976 silly addNameRange '1.4.4', 2976 silly addNameRange '1.4.5', 2976 silly addNameRange '1.4.6', 2976 silly addNameRange '1.4.7', 2976 silly addNameRange '1.5.0', 2976 silly addNameRange '1.5.1', 2976 silly addNameRange '1.6.0', 2976 silly addNameRange '1.6.1', 2976 silly addNameRange '1.6.2', 2976 silly addNameRange '1.7.0', 2976 silly addNameRange '1.7.1', 2976 silly addNameRange '1.7.2', 2976 silly addNameRange '1.7.3', 2976 silly addNameRange '1.7.4', 2976 silly addNameRange '1.8.0', 2976 silly addNameRange '1.8.1', 2976 silly addNameRange '1.8.2' ] ] 2977 verbose addNamed sshpk@1.8.2 2978 silly addNamed semver.valid 1.8.2 2979 silly addNamed semver.validRange 1.8.2 2980 silly addNameRange number 2 { name: 'jsprim', range: '>=1.2.2 <2.0.0', hasData: true } 2981 silly addNameRange versions [ 'jsprim', 2981 silly addNameRange [ '0.0.1', 2981 silly addNameRange '0.0.2', 2981 silly addNameRange '0.0.3', 2981 silly addNameRange '0.0.4', 2981 silly addNameRange '0.0.5', 2981 silly addNameRange '0.1.0', 2981 silly addNameRange '0.2.0', 2981 silly addNameRange '0.3.0', 2981 silly addNameRange '0.3.1', 2981 silly addNameRange '0.4.0', 2981 silly addNameRange '0.5.0', 2981 silly addNameRange '0.5.1', 2981 silly addNameRange '0.6.0', 2981 silly addNameRange '0.6.1', 2981 silly addNameRange '0.7.0', 2981 silly addNameRange '0.8.0', 2981 silly addNameRange '1.0.0', 2981 silly addNameRange '1.1.0', 2981 silly addNameRange '1.2.0', 2981 silly addNameRange '1.2.1', 2981 silly addNameRange '1.2.2' ] ] 2982 verbose addNamed jsprim@1.2.2 2983 silly addNamed semver.valid 1.2.2 2984 silly addNamed semver.validRange 1.2.2 2985 silly addNameRange number 2 { name: 'assert-plus', range: '>=0.2.0 <0.3.0', hasData: true } 2986 silly addNameRange versions [ 'assert-plus', 2986 silly addNameRange [ '0.1.0', 2986 silly addNameRange '0.1.1', 2986 silly addNameRange '0.1.2', 2986 silly addNameRange '0.1.3', 2986 silly addNameRange '0.1.4', 2986 silly addNameRange '0.1.5', 2986 silly addNameRange '0.2.0', 2986 silly addNameRange '1.0.0' ] ] 2987 verbose addNamed assert-plus@0.2.0 2988 silly addNamed semver.valid 0.2.0 2989 silly addNamed semver.validRange 0.2.0 2990 silly gunzTarPerm extractEntry package.json 2991 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 2992 silly prepareForInstallMany adding chalk@^1.1.1 from har-validator dependencies 2993 silly prepareForInstallMany adding commander@^2.9.0 from har-validator dependencies 2994 silly prepareForInstallMany adding is-my-json-valid@^2.12.4 from har-validator dependencies 2995 silly prepareForInstallMany adding pinkie-promise@^2.0.0 from har-validator dependencies 2996 silly cache add args [ 'chalk@^1.1.1', null ] 2997 verbose cache add spec chalk@^1.1.1 2998 silly cache add args [ 'commander@^2.9.0', null ] 2999 verbose cache add spec commander@^2.9.0 3000 silly cache add parsed spec { raw: 'chalk@^1.1.1', 3000 silly cache add scope: null, 3000 silly cache add name: 'chalk', 3000 silly cache add rawSpec: '^1.1.1', 3000 silly cache add spec: '>=1.1.1 <2.0.0', 3000 silly cache add type: 'range' } 3001 verbose addNamed chalk@>=1.1.1 <2.0.0 3002 silly addNamed semver.valid null 3003 silly addNamed semver.validRange >=1.1.1 <2.0.0 3004 silly addNameRange { name: 'chalk', range: '>=1.1.1 <2.0.0', hasData: false } 3005 silly mapToRegistry name chalk 3006 silly mapToRegistry using default registry 3007 silly mapToRegistry registry https://registry.npmjs.org/ 3008 silly mapToRegistry uri https://registry.npmjs.org/chalk 3009 verbose addNameRange registry:https://registry.npmjs.org/chalk not in flight; fetching 3010 silly cache add parsed spec { raw: 'commander@^2.9.0', 3010 silly cache add scope: null, 3010 silly cache add name: 'commander', 3010 silly cache add rawSpec: '^2.9.0', 3010 silly cache add spec: '>=2.9.0 <3.0.0', 3010 silly cache add type: 'range' } 3011 verbose addNamed commander@>=2.9.0 <3.0.0 3012 silly addNamed semver.valid null 3013 silly addNamed semver.validRange >=2.9.0 <3.0.0 3014 silly addNameRange { name: 'commander', range: '>=2.9.0 <3.0.0', hasData: false } 3015 silly mapToRegistry name commander 3016 silly mapToRegistry using default registry 3017 silly mapToRegistry registry https://registry.npmjs.org/ 3018 silly mapToRegistry uri https://registry.npmjs.org/commander 3019 verbose addNameRange registry:https://registry.npmjs.org/commander not in flight; fetching 3020 silly cache add args [ 'is-my-json-valid@^2.12.4', null ] 3021 verbose cache add spec is-my-json-valid@^2.12.4 3022 silly cache add parsed spec { raw: 'is-my-json-valid@^2.12.4', 3022 silly cache add scope: null, 3022 silly cache add name: 'is-my-json-valid', 3022 silly cache add rawSpec: '^2.12.4', 3022 silly cache add spec: '>=2.12.4 <3.0.0', 3022 silly cache add type: 'range' } 3023 verbose addNamed is-my-json-valid@>=2.12.4 <3.0.0 3024 silly addNamed semver.valid null 3025 silly addNamed semver.validRange >=2.12.4 <3.0.0 3026 silly addNameRange { name: 'is-my-json-valid', 3026 silly addNameRange range: '>=2.12.4 <3.0.0', 3026 silly addNameRange hasData: false } 3027 silly mapToRegistry name is-my-json-valid 3028 silly mapToRegistry using default registry 3029 silly mapToRegistry registry https://registry.npmjs.org/ 3030 silly mapToRegistry uri https://registry.npmjs.org/is-my-json-valid 3031 verbose addNameRange registry:https://registry.npmjs.org/is-my-json-valid not in flight; fetching 3032 silly cache add args [ 'pinkie-promise@^2.0.0', null ] 3033 verbose cache add spec pinkie-promise@^2.0.0 3034 silly cache add parsed spec { raw: 'pinkie-promise@^2.0.0', 3034 silly cache add scope: null, 3034 silly cache add name: 'pinkie-promise', 3034 silly cache add rawSpec: '^2.0.0', 3034 silly cache add spec: '>=2.0.0 <3.0.0', 3034 silly cache add type: 'range' } 3035 verbose addNamed pinkie-promise@>=2.0.0 <3.0.0 3036 silly addNamed semver.valid null 3037 silly addNamed semver.validRange >=2.0.0 <3.0.0 3038 silly addNameRange { name: 'pinkie-promise', 3038 silly addNameRange range: '>=2.0.0 <3.0.0', 3038 silly addNameRange hasData: false } 3039 silly mapToRegistry name pinkie-promise 3040 silly mapToRegistry using default registry 3041 silly mapToRegistry registry https://registry.npmjs.org/ 3042 silly mapToRegistry uri https://registry.npmjs.org/pinkie-promise 3043 verbose addNameRange registry:https://registry.npmjs.org/pinkie-promise not in flight; fetching 3044 silly gunzTarPerm extractEntry .npmignore 3045 silly gunzTarPerm modified mode [ '.npmignore', 420, 438 ] 3046 silly gunzTarPerm extractEntry README.md 3047 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 3048 silly gunzTarPerm extractEntry README.md 3049 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 3050 silly gunzTarPerm extractEntry LICENSE 3051 silly gunzTarPerm modified mode [ 'LICENSE', 436, 438 ] 3052 silly cache afterAdd assert-plus@0.2.0 3053 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\assert-plus\0.2.0\package\package.json not in flight; writing 3054 silly cache afterAdd jsprim@1.2.2 3055 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\jsprim\1.2.2\package\package.json not in flight; writing 3056 silly cache afterAdd sshpk@1.8.2 3057 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\sshpk\1.8.2\package\package.json not in flight; writing 3058 verbose request uri https://registry.npmjs.org/chalk 3059 verbose request no auth needed 3060 info attempt registry request try #1 at 10:35:14 AM 3061 verbose etag "BYTTA4QGRCS8B3HP49WCDWXS3" 3062 http request GET https://registry.npmjs.org/chalk 3063 verbose request uri https://registry.npmjs.org/pinkie-promise 3064 verbose request no auth needed 3065 info attempt registry request try #1 at 10:35:14 AM 3066 verbose etag "9Y8V37D2OD3IRDJ4IMB7G5U81" 3067 http request GET https://registry.npmjs.org/pinkie-promise 3068 verbose request uri https://registry.npmjs.org/commander 3069 verbose request no auth needed 3070 info attempt registry request try #1 at 10:35:14 AM 3071 verbose etag "62XU2X6EGX0LP6WI8L5HFYSNT" 3072 http request GET https://registry.npmjs.org/commander 3073 verbose request uri https://registry.npmjs.org/is-my-json-valid 3074 verbose request no auth needed 3075 info attempt registry request try #1 at 10:35:14 AM 3076 verbose etag "BW806N7ML1PSC1464EANCBZT1" 3077 http request GET https://registry.npmjs.org/is-my-json-valid 3078 silly gunzTarPerm extractEntry test/uri.js 3079 silly gunzTarPerm modified mode [ 'test/uri.js', 509, 511 ] 3080 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\assert-plus\0.2.0\package\package.json written 3081 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\jsprim\1.2.2\package\package.json written 3082 silly gunzTarPerm extractEntry LICENSE 3083 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 3084 silly gunzTarPerm extractEntry writable.js 3085 silly gunzTarPerm modified mode [ 'writable.js', 420, 438 ] 3086 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\sshpk\1.8.2\package\package.json written 3087 silly install resolved [ { author: { name: 'Mark Cavage', email: 'mcavage@gmail.com' }, 3087 silly install resolved name: 'assert-plus', 3087 silly install resolved description: 'Extra assertions on top of node\'s assert module', 3087 silly install resolved version: '0.2.0', 3087 silly install resolved license: 'MIT', 3087 silly install resolved main: './assert.js', 3087 silly install resolved devDependencies: { tape: '4.2.2', faucet: '0.0.1' }, 3087 silly install resolved optionalDependencies: {}, 3087 silly install resolved scripts: { test: 'tape tests/*.js | ./node_modules/.bin/faucet' }, 3087 silly install resolved repository: 3087 silly install resolved { type: 'git', 3087 silly install resolved url: 'https://github.com/mcavage/node-assert-plus.git' }, 3087 silly install resolved engines: { node: '>=0.8' }, 3087 silly install resolved contributors: [ [Object], [Object], [Object], [Object], [Object], [Object] ], 3087 silly install resolved readme: '# assert-plus\n\nThis library is a super small wrapper over node\'s assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE\\_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, \'myArg\')`. As a simple example, most of my code looks\nlike this:\n\n```javascript\n var assert = require(\'assert-plus\');\n\n function fooAccount(options, callback) {\n assert.object(options, \'options\');\n assert.number(options.id, \'options.id\');\n assert.bool(options.isManager, \'options.isManager\');\n assert.string(options.name, \'options.name\');\n assert.arrayOfString(options.email, \'options.email\');\n assert.func(callback, \'callback\');\n\n // Do stuff\n callback(null, {});\n }\n```\n\n# API\n\nAll methods that *aren\'t* part of node\'s core assert API are simply assumed to\ntake an argument, and then a string \'name\' that\'s not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n at test (/home/mark/work/foo/foo.js:3:9)\n at Object. (/home/mark/work/foo/foo.js:15:1)\n at Module._compile (module.js:446:26)\n at Object..js (module.js:464:10)\n at Module.load (module.js:353:31)\n at Function._load (module.js:311:12)\n at Array.0 (module.js:484:10)\n at EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n```javascript\n function test(foo) {\n assert.string(foo, \'foo\');\n }\n```\n\nThere you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`:\n\n```javascript\n function test(foo) {\n assert.arrayOfString(foo, \'foo\');\n }\n```\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n```javascript\n assert.optionalString(foo, \'foo\');\n```\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don\'t want to pay `typeof ()` taxes to v8 in\nproduction. Be advised: The standard functions re-exported from `assert` are\nalso disabled in assert-plus if NDEBUG is specified. Using them directly from\nthe `assert` module avoids this behavior.\n\nThe complete list of APIs is:\n\n* assert.array\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.stream\n* assert.date\n* assert.regex\n* assert.uuid\n* assert.arrayOfArray\n* assert.arrayOfBool\n* assert.arrayOfBuffer\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.arrayOfStream\n* assert.arrayOfDate\n* assert.arrayOfUuid\n* assert.optionalArray\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalStream\n* assert.optionalDate\n* assert.optionalUuid\n* assert.optionalArrayOfArray\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfBuffer\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.optionalArrayOfStream\n* assert.optionalArrayOfDate\n* assert.optionalArrayOfUuid\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the "Software"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee .\n', 3087 silly install resolved readmeFilename: 'README.md', 3087 silly install resolved bugs: { url: 'https://github.com/mcavage/node-assert-plus/issues' }, 3087 silly install resolved homepage: 'https://github.com/mcavage/node-assert-plus', 3087 silly install resolved dependencies: {}, 3087 silly install resolved _id: 'assert-plus@0.2.0', 3087 silly install resolved _shasum: 'd74e1b87e7affc0db8aadb7021f3fe48101ab234', 3087 silly install resolved _resolved: 'https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz', 3087 silly install resolved _from: 'assert-plus@>=0.2.0 <0.3.0' }, 3087 silly install resolved { name: 'jsprim', 3087 silly install resolved version: '1.2.2', 3087 silly install resolved description: 'utilities for primitive JavaScript types', 3087 silly install resolved main: './lib/jsprim.js', 3087 silly install resolved repository: 3087 silly install resolved { type: 'git', 3087 silly install resolved url: 'git://github.com/davepacheco/node-jsprim.git' }, 3087 silly install resolved dependencies: { extsprintf: '1.0.2', 'json-schema': '0.2.2', verror: '1.3.6' }, 3087 silly install resolved engines: [ 'node >=0.6.0' ], 3087 silly install resolved license: 'MIT', 3087 silly install resolved readme: '# jsprim: utilities for primitive JavaScript types\n\nThis module provides miscellaneous facilities for working with strings,\nnumbers, dates, and objects and arrays of these basic types.\n\n\n### deepCopy(obj)\n\nCreates a deep copy of a primitive type, object, or array of primitive types.\n\n\n### deepEqual(obj1, obj2)\n\nReturns whether two objects are equal.\n\n\n### isEmpty(obj)\n\nReturns true if the given object has no properties and false otherwise. This\nis O(1) (unlike `Object.keys(obj).length === 0`, which is O(N)).\n\n\n### forEachKey(obj, callback)\n\nLike Array.forEach, but iterates properties of an object rather than elements\nof an array. Equivalent to:\n\n for (var key in obj)\n callback(key, obj[key]);\n\n\n### flattenObject(obj, depth)\n\nFlattens an object up to a given level of nesting, returning an array of arrays\nof length "depth + 1", where the first "depth" elements correspond to flattened\ncolumns and the last element contains the remaining object . For example:\n\n flattenObject({\n \'I\': {\n \'A\': {\n \'i\': {\n \'datum1\': [ 1, 2 ],\n \'datum2\': [ 3, 4 ]\n },\n \'ii\': {\n \'datum1\': [ 3, 4 ]\n }\n },\n \'B\': {\n \'i\': {\n \'datum1\': [ 5, 6 ]\n },\n \'ii\': {\n \'datum1\': [ 7, 8 ],\n \'datum2\': [ 3, 4 ],\n },\n \'iii\': {\n }\n }\n },\n \'II\': {\n \'A\': {\n \'i\': {\n \'datum1\': [ 1, 2 ],\n \'datum2\': [ 3, 4 ]\n }\n }\n }\n }, 3)\n\nbecomes:\n\n [\n [ \'I\', \'A\', \'i\', { \'datum1\': [ 1, 2 ], \'datum2\': [ 3, 4 ] } ],\n [ \'I\', \'A\', \'ii\', { \'datum1\': [ 3, 4 ] } ],\n [ \'I\', \'B\', \'i\', { \'datum1\': [ 5, 6 ] } ],\n [ \'I\', \'B\', \'ii\', { \'datum1\': [ 7, 8 ], \'datum2\': [ 3, 4 ] } ],\n [ \'I\', \'B\', \'iii\', {} ],\n [ \'II\', \'A\', \'i\', { \'datum1\': [ 1, 2 ], \'datum2\': [ 3, 4 ] } ]\n ]\n\nThis function is strict: "depth" must be a non-negative integer and "obj" must\nbe a non-null object with at least "depth" levels of nesting under all keys.\n\n\n### flattenIter(obj, depth, func)\n\nThis is similar to `flattenObject` except that instead of returning an array,\nthis function invokes `func(entry)` for each `entry` in the array that\n`flattenObject` would return. `flattenIter(obj, depth, func)` is logically\nequivalent to `flattenObject(obj, depth).forEach(func)`. Importantly, this\nversion never constructs the full array. Its memory usage is O(depth) rather\nthan O(n) (where `n` is the number of flattened elements).\n\nThere\'s another difference between `flattenObject` and `flattenIter` that\'s\nrelated to the special case where `depth === 0`. In this case, `flattenObject`\nomits the array wrapping `obj` (which is regrettable).\n\n\n### pluck(obj, key)\n\nFetch nested property "key" from object "obj", traversing objects as needed.\nFor example, `pluck(obj, "foo.bar.baz")` is roughly equivalent to\n`obj.foo.bar.baz`, except that:\n\n1. If traversal fails, the resulting value is undefined, and no error is\n thrown. For example, `pluck({}, "foo.bar")` is just undefined.\n2. If "obj" has property "key" directly (without traversing), the\n corresponding property is returned. For example,\n `pluck({ \'foo.bar\': 1 }, \'foo.bar\')` is 1, not undefined. This is also\n true recursively, so `pluck({ \'a\': { \'foo.bar\': 1 } }, \'a.foo.bar\')` is\n also 1, not undefined.\n\n\n### randElt(array)\n\nReturns an element from "array" selected uniformly at random. If "array" is\nempty, throws an Error.\n\n\n### startsWith(str, prefix)\n\nReturns true if the given string starts with the given prefix and false\notherwise.\n\n\n### endsWith(str, suffix)\n\nReturns true if the given string ends with the given suffix and false\notherwise.\n\n\n### iso8601(date)\n\nConverts a Date object to an ISO8601 date string of the form\n"YYYY-MM-DDTHH:MM:SS.sssZ". This format is not customizable.\n\n\n### parseDateTime(str)\n\nParses a date expressed as a string, as either a number of milliseconds since\nthe epoch or any string format that Date accepts, giving preference to the\nformer where these two sets overlap (e.g., strings containing small numbers).\n\n\n### hrtimeDiff(timeA, timeB)\n\nGiven two hrtime readings (as from Node\'s `process.hrtime()`), where timeA is\nlater than timeB, compute the difference and return that as an hrtime. It is\nillegal to invoke this for a pair of times where timeB is newer than timeA.\n\n### hrtimeAdd(timeA, timeB)\n\nAdd two hrtime intervals (as from Node\'s `process.hrtime()`), returning a new\nhrtime interval array. This function does not modify either input argument.\n\n\n### hrtimeAccum(timeA, timeB)\n\nAdd two hrtime intervals (as from Node\'s `process.hrtime()`), storing the\nresult in `timeA`. This function overwrites (and returns) the first argument\npassed in.\n\n\n### hrtimeNanosec(timeA), hrtimeMicrosec(timeA), hrtimeMillisec(timeA)\n\nThis suite of functions converts a hrtime interval (as from Node\'s\n`process.hrtime()`) into a scalar number of nanoseconds, microseconds or\nmilliseconds. Results are truncated, as with `Math.floor()`.\n\n\n### validateJsonObject(schema, object)\n\nUses JSON validation (via JSV) to validate the given object against the given\nschema. On success, returns null. On failure, *returns* (does not throw) a\nuseful Error object.\n\n\n### extraProperties(object, allowed)\n\nCheck an object for unexpected properties. Accepts the object to check, and an\narray of allowed property name strings. If extra properties are detected, an\narray of extra property names is returned. If no properties other than those\nin the allowed list are present on the object, the returned array will be of\nzero length.\n\n### mergeObjects(provided, overrides, defaults)\n\nMerge properties from objects "provided", "overrides", and "defaults". The\nintended use case is for functions that accept named arguments in an "args"\nobject, but want to provide some default values and override other values. In\nthat case, "provided" is what the caller specified, "overrides" are what the\nfunction wants to override, and "defaults" contains default values.\n\nThe function starts with the values in "defaults", overrides them with the\nvalues in "provided", and then overrides those with the values in "overrides".\nFor convenience, any of these objects may be falsey, in which case they will be\nignored. The input objects are never modified, but properties in the returned\nobject are not deep-copied.\n\nFor example:\n\n mergeObjects(undefined, { \'objectMode\': true }, { \'highWaterMark\': 0 })\n\nreturns:\n\n { \'objectMode\': true, \'highWaterMark\': 0 }\n\nFor another example:\n\n mergeObjects(\n { \'highWaterMark\': 16, \'objectMode\': 7 }, /* from caller */\n { \'objectMode\': true }, /* overrides */\n { \'highWaterMark\': 0 }); /* default */\n\nreturns:\n\n { \'objectMode\': true, \'highWaterMark\': 16 }\n\n\n# Contributing\n\nCode should be "make check" clean. This target assumes that\n[jsl](http://github.com/davepacheco/javascriptlint) and\n[jsstyle](http://github.com/davepacheco/jsstyle) are on your path.\n\nNew tests should generally accompany new functions and bug fixes. The tests\nshould pass cleanly (run tests/basic.js).\n', 3087 silly install resolved readmeFilename: 'README.md', 3087 silly install resolved bugs: { url: 'https://github.com/davepacheco/node-jsprim/issues' }, 3087 silly install resolved homepage: 'https://github.com/davepacheco/node-jsprim', 3087 silly install resolved _id: 'jsprim@1.2.2', 3087 silly install resolved _shasum: 'f20c906ac92abd58e3b79ac8bc70a48832512da1', 3087 silly install resolved _resolved: 'https://registry.npmjs.org/jsprim/-/jsprim-1.2.2.tgz', 3087 silly install resolved _from: 'jsprim@>=1.2.2 <2.0.0' }, 3087 silly install resolved { name: 'sshpk', 3087 silly install resolved version: '1.8.2', 3087 silly install resolved description: 'A library for finding and using SSH public keys', 3087 silly install resolved main: 'lib/index.js', 3087 silly install resolved scripts: { test: 'tape test/*.js' }, 3087 silly install resolved repository: 3087 silly install resolved { type: 'git', 3087 silly install resolved url: 'git+https://github.com/arekinath/node-sshpk.git' }, 3087 silly install resolved author: { name: 'Joyent, Inc' }, 3087 silly install resolved contributors: [ [Object], [Object], [Object] ], 3087 silly install resolved license: 'MIT', 3087 silly install resolved bugs: { url: 'https://github.com/arekinath/node-sshpk/issues' }, 3087 silly install resolved engines: { node: '>=0.10.0' }, 3087 silly install resolved directories: { bin: './bin', lib: './lib', man: './man/man1' }, 3087 silly install resolved homepage: 'https://github.com/arekinath/node-sshpk#readme', 3087 silly install resolved dependencies: 3087 silly install resolved { asn1: '~0.2.3', 3087 silly install resolved 'assert-plus': '^1.0.0', 3087 silly install resolved dashdash: '^1.12.0', 3087 silly install resolved getpass: '^0.1.1', 3087 silly install resolved jsbn: '~0.1.0', 3087 silly install resolved tweetnacl: '~0.13.0', 3087 silly install resolved jodid25519: '^1.0.0', 3087 silly install resolved 'ecc-jsbn': '~0.1.1' }, 3087 silly install resolved optionalDependencies: 3087 silly install resolved { jsbn: '~0.1.0', 3087 silly install resolved tweetnacl: '~0.13.0', 3087 silly install resolved jodid25519: '^1.0.0', 3087 silly install resolved 'ecc-jsbn': '~0.1.1' }, 3087 silly install resolved devDependencies: 3087 silly install resolved { tape: '^3.5.0', 3087 silly install resolved benchmark: '^1.0.0', 3087 silly install resolved sinon: '^1.17.2', 3087 silly install resolved temp: '^0.8.2' }, 3087 silly install resolved man: 3087 silly install resolved [ 'C:\\Users\\TRISTA~1\\AppData\\Local\\Temp\\npm-4196-c330feab\\unpack-b50c7f9080c6\\man\\man1\\sshpk-conv.1', 3087 silly install resolved 'C:\\Users\\TRISTA~1\\AppData\\Local\\Temp\\npm-4196-c330feab\\unpack-b50c7f9080c6\\man\\man1\\sshpk-sign.1', 3087 silly install resolved 'C:\\Users\\TRISTA~1\\AppData\\Local\\Temp\\npm-4196-c330feab\\unpack-b50c7f9080c6\\man\\man1\\sshpk-verify.1' ], 3087 silly install resolved bin: 3087 silly install resolved { 'sshpk-conv': 'bin\\sshpk-conv', 3087 silly install resolved 'sshpk-sign': 'bin\\sshpk-sign', 3087 silly install resolved 'sshpk-verify': 'bin\\sshpk-verify' }, 3087 silly install resolved readme: 'sshpk\n=========\n\nParse, convert, fingerprint and use SSH keys (both public and private) in pure\nnode -- no `ssh-keygen` or other external dependencies.\n\nSupports RSA, DSA, ECDSA (nistp-\\*) and ED25519 key types, in PEM (PKCS#1, \nPKCS#8) and OpenSSH formats.\n\nThis library has been extracted from\n[`node-http-signature`](https://github.com/joyent/node-http-signature)\n(work by [Mark Cavage](https://github.com/mcavage) and\n[Dave Eddy](https://github.com/bahamas10)) and\n[`node-ssh-fingerprint`](https://github.com/bahamas10/node-ssh-fingerprint)\n(work by Dave Eddy), with additions (including ECDSA support) by\n[Alex Wilson](https://github.com/arekinath).\n\nInstall\n-------\n\n```\nnpm install sshpk\n```\n\nExamples\n--------\n\n```js\nvar sshpk = require(\'sshpk\');\n\nvar fs = require(\'fs\');\n\n/* Read in an OpenSSH-format public key */\nvar keyPub = fs.readFileSync(\'id_rsa.pub\');\nvar key = sshpk.parseKey(keyPub, \'ssh\');\n\n/* Get metadata about the key */\nconsole.log(\'type => %s\', key.type);\nconsole.log(\'size => %d bits\', key.size);\nconsole.log(\'comment => %s\', key.comment);\n\n/* Compute key fingerprints, in new OpenSSH (>6.7) format, and old MD5 */\nconsole.log(\'fingerprint => %s\', key.fingerprint().toString());\nconsole.log(\'old-style fingerprint => %s\', key.fingerprint(\'md5\').toString());\n```\n\nExample output:\n\n```\ntype => rsa\nsize => 2048 bits\ncomment => foo@foo.com\nfingerprint => SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w\nold-style fingerprint => a0:c8:ad:6c:32:9a:32:fa:59:cc:a9:8c:0a:0d:6e:bd\n```\n\nMore examples: converting between formats:\n\n```js\n/* Read in a PEM public key */\nvar keyPem = fs.readFileSync(\'id_rsa.pem\');\nvar key = sshpk.parseKey(keyPem, \'pem\');\n\n/* Convert to PEM PKCS#8 public key format */\nvar pemBuf = key.toBuffer(\'pkcs8\');\n\n/* Convert to SSH public key format (and return as a string) */\nvar sshKey = key.toString(\'ssh\');\n```\n\nSigning and verifying:\n\n```js\n/* Read in an OpenSSH/PEM *private* key */\nvar keyPriv = fs.readFileSync(\'id_ecdsa\');\nvar key = sshpk.parsePrivateKey(keyPriv, \'pem\');\n\nvar data = \'some data\';\n\n/* Sign some data with the key */\nvar s = key.createSign(\'sha1\');\ns.update(data);\nvar signature = s.sign();\n\n/* Now load the public key (could also use just key.toPublic()) */\nvar keyPub = fs.readFileSync(\'id_ecdsa.pub\');\nkey = sshpk.parseKey(keyPub, \'ssh\');\n\n/* Make a crypto.Verifier with this key */\nvar v = key.createVerify(\'sha1\');\nv.update(data);\nvar valid = v.verify(signature);\n/* => true! */\n```\n\nMatching fingerprints with keys:\n\n```js\nvar fp = sshpk.parseFingerprint(\'SHA256:PYC9kPVC6J873CSIbfp0LwYeczP/W4ffObNCuDJ1u5w\');\n\nvar keys = [sshpk.parseKey(...), sshpk.parseKey(...), ...];\n\nkeys.forEach(function (key) {\n\tif (fp.matches(key))\n\t\tconsole.log(\'found it!\');\n});\n```\n\nUsage\n-----\n\n## Public keys\n\n### `parseKey(data[, format = \'auto\'[, options]])`\n\nParses a key from a given data format and returns a new `Key` object.\n\nParameters\n\n- `data` -- Either a Buffer or String, containing the key\n- `format` -- String name of format to use, valid options are:\n - `auto`: choose automatically from all below\n - `pem`: supports both PKCS#1 and PKCS#8\n - `ssh`: standard OpenSSH format,\n - `pkcs1`, `pkcs8`: variants of `pem`\n - `rfc4253`: raw OpenSSH wire format\n - `openssh`: new post-OpenSSH 6.5 internal format, produced by \n `ssh-keygen -o`\n- `options` -- Optional Object, extra options, with keys:\n - `filename` -- Optional String, name for the key being parsed \n (eg. the filename that was opened). Used to generate\n Error messages\n - `passphrase` -- Optional String, encryption passphrase used to decrypt an\n encrypted PEM file\n\n### `Key.isKey(obj)`\n\nReturns `true` if the given object is a valid `Key` object created by a version\nof `sshpk` compatible with this one.\n\nParameters\n\n- `obj` -- Object to identify\n\n### `Key#type`\n\nString, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`.\n\n### `Key#size`\n\nInteger, "size" of the key in bits. For RSA/DSA this is the size of the modulus;\nfor ECDSA this is the bit size of the curve in use.\n\n### `Key#comment`\n\nOptional string, a key comment used by some formats (eg the `ssh` format).\n\n### `Key#curve`\n\nOnly present if `this.type === \'ecdsa\'`, string containing the name of the\nnamed curve used with this key. Possible values include `nistp256`, `nistp384`\nand `nistp521`.\n\n### `Key#toBuffer([format = \'ssh\'])`\n\nConvert the key into a given data format and return the serialized key as\na Buffer.\n\nParameters\n\n- `format` -- String name of format to use, for valid options see `parseKey()`\n\n### `Key#toString([format = \'ssh])`\n\nSame as `this.toBuffer(format).toString()`.\n\n### `Key#fingerprint([algorithm = \'sha256\'])`\n\nCreates a new `Fingerprint` object representing this Key\'s fingerprint.\n\nParameters\n\n- `algorithm` -- String name of hash algorithm to use, valid options are `md5`,\n `sha1`, `sha256`, `sha384`, `sha512`\n\n### `Key#createVerify([hashAlgorithm])`\n\nCreates a `crypto.Verifier` specialized to use this Key (and the correct public\nkey algorithm to match it). The returned Verifier has the same API as a regular\none, except that the `verify()` function takes only the target signature as an\nargument.\n\nParameters\n\n- `hashAlgorithm` -- optional String name of hash algorithm to use, any\n supported by OpenSSL are valid, usually including\n `sha1`, `sha256`.\n\n`v.verify(signature[, format])` Parameters\n\n- `signature` -- either a Signature object, or a Buffer or String\n- `format` -- optional String, name of format to interpret given String with.\n Not valid if `signature` is a Signature or Buffer.\n\n### `Key#createDiffieHellman()`\n### `Key#createDH()`\n\nCreates a Diffie-Hellman key exchange object initialized with this key and all\nnecessary parameters. This has the same API as a `crypto.DiffieHellman`\ninstance, except that functions take `Key` and `PrivateKey` objects as\narguments, and return them where indicated for.\n\nThis is only valid for keys belonging to a cryptosystem that supports DHE\nor a close analogue (i.e. `dsa`, `ecdsa` and `curve25519` keys). An attempt\nto call this function on other keys will yield an `Error`.\n\n## Private keys\n\n### `parsePrivateKey(data[, format = \'auto\'[, options]])`\n\nParses a private key from a given data format and returns a new\n`PrivateKey` object.\n\nParameters\n\n- `data` -- Either a Buffer or String, containing the key\n- `format` -- String name of format to use, valid options are:\n - `auto`: choose automatically from all below\n - `pem`: supports both PKCS#1 and PKCS#8\n - `ssh`, `openssh`: new post-OpenSSH 6.5 internal format, produced by \n `ssh-keygen -o`\n - `pkcs1`, `pkcs8`: variants of `pem`\n - `rfc4253`: raw OpenSSH wire format\n- `options` -- Optional Object, extra options, with keys:\n - `filename` -- Optional String, name for the key being parsed \n (eg. the filename that was opened). Used to generate\n Error messages\n - `passphrase` -- Optional String, encryption passphrase used to decrypt an\n encrypted PEM file\n\n### `PrivateKey.isPrivateKey(obj)`\n\nReturns `true` if the given object is a valid `PrivateKey` object created by a\nversion of `sshpk` compatible with this one.\n\nParameters\n\n- `obj` -- Object to identify\n\n### `PrivateKey#type`\n\nString, the type of key. Valid options are `rsa`, `dsa`, `ecdsa`.\n\n### `PrivateKey#size`\n\nInteger, "size" of the key in bits. For RSA/DSA this is the size of the modulus;\nfor ECDSA this is the bit size of the curve in use.\n\n### `PrivateKey#curve`\n\nOnly present if `this.type === \'ecdsa\'`, string containing the name of the\nnamed curve used with this key. Possible values include `nistp256`, `nistp384`\nand `nistp521`.\n\n### `PrivateKey#toBuffer([format = \'pkcs1\'])`\n\nConvert the key into a given data format and return the serialized key as\na Buffer.\n\nParameters\n\n- `format` -- String name of format to use, valid options are listed under \n `parsePrivateKey`. Note that ED25519 keys default to `openssh`\n format instead (as they have no `pkcs1` representation).\n\n### `PrivateKey#toString([format = \'pkcs1\'])`\n\nSame as `this.toBuffer(format).toString()`.\n\n### `PrivateKey#toPublic()`\n\nExtract just the public part of this private key, and return it as a `Key`\nobject.\n\n### `PrivateKey#fingerprint([algorithm = \'sha256\'])`\n\nSame as `this.toPublic().fingerprint()`.\n\n### `PrivateKey#createVerify([hashAlgorithm])`\n\nSame as `this.toPublic().createVerify()`.\n\n### `PrivateKey#createSign([hashAlgorithm])`\n\nCreates a `crypto.Sign` specialized to use this PrivateKey (and the correct\nkey algorithm to match it). The returned Signer has the same API as a regular\none, except that the `sign()` function takes no arguments, and returns a\n`Signature` object.\n\nParameters\n\n- `hashAlgorithm` -- optional String name of hash algorithm to use, any\n supported by OpenSSL are valid, usually including\n `sha1`, `sha256`.\n\n`v.sign()` Parameters\n\n- none\n\n### `PrivateKey#derive(newType)`\n\nDerives a related key of type `newType` from this key. Currently this is\nonly supported to change between `ed25519` and `curve25519` keys which are\nstored with the same private key (but usually distinct public keys in order\nto avoid degenerate keys that lead to a weak Diffie-Hellman exchange).\n\nParameters\n\n- `newType` -- String, type of key to derive, either `ed25519` or `curve25519`\n\n## Fingerprints\n\n### `parseFingerprint(fingerprint[, algorithms])`\n\nPre-parses a fingerprint, creating a `Fingerprint` object that can be used to\nquickly locate a key by using the `Fingerprint#matches` function.\n\nParameters\n\n- `fingerprint` -- String, the fingerprint value, in any supported format\n- `algorithms` -- Optional list of strings, names of hash algorithms to limit\n support to. If `fingerprint` uses a hash algorithm not on\n this list, throws `InvalidAlgorithmError`.\n\n### `Fingerprint.isFingerprint(obj)`\n\nReturns `true` if the given object is a valid `Fingerprint` object created by a\nversion of `sshpk` compatible with this one.\n\nParameters\n\n- `obj` -- Object to identify\n\n### `Fingerprint#toString([format])`\n\nReturns a fingerprint as a string, in the given format.\n\nParameters\n\n- `format` -- Optional String, format to use, valid options are `hex` and\n `base64`. If this `Fingerprint` uses the `md5` algorithm, the\n default format is `hex`. Otherwise, the default is `base64`.\n\n### `Fingerprint#matches(key)`\n\nVerifies whether or not this `Fingerprint` matches a given `Key`. This function\nuses double-hashing to avoid leaking timing information. Returns a boolean.\n\nParameters\n\n- `key` -- a `Key` object, the key to match this fingerprint against\n\n## Signatures\n\n### `parseSignature(signature, algorithm, format)`\n\nParses a signature in a given format, creating a `Signature` object. Useful\nfor converting between the SSH and ASN.1 (PKCS/OpenSSL) signature formats, and\nalso returned as output from `PrivateKey#createSign().sign()`.\n\nA Signature object can also be passed to a verifier produced by\n`Key#createVerify()` and it will automatically be converted internally into the\ncorrect format for verification.\n\nParameters\n\n- `signature` -- a Buffer (binary) or String (base64), data of the actual\n signature in the given format\n- `algorithm` -- a String, name of the algorithm to be used, possible values\n are `rsa`, `dsa`, `ecdsa`\n- `format` -- a String, either `asn1` or `ssh`\n\n### `Signature.isSignature(obj)`\n\nReturns `true` if the given object is a valid `Signature` object created by a\nversion of `sshpk` compatible with this one.\n\nParameters\n\n- `obj` -- Object to identify\n\n### `Signature#toBuffer([format = \'asn1\'])`\n\nConverts a Signature to the given format and returns it as a Buffer.\n\nParameters\n\n- `format` -- a String, either `asn1` or `ssh`\n\n### `Signature#toString([format = \'asn1\'])`\n\nSame as `this.toBuffer(format).toString(\'base64\')`.\n\nErrors\n------\n\n### `InvalidAlgorithmError`\n\nThe specified algorithm is not valid, either because it is not supported, or\nbecause it was not included on a list of allowed algorithms.\n\nThrown by `Fingerprint.parse`, `Key#fingerprint`.\n\nProperties\n\n- `algorithm` -- the algorithm that could not be validated\n\n### `FingerprintFormatError`\n\nThe fingerprint string given could not be parsed as a supported fingerprint\nformat, or the specified fingerprint format is invalid.\n\nThrown by `Fingerprint.parse`, `Fingerprint#toString`.\n\nProperties\n\n- `fingerprint` -- if caused by a fingerprint, the string value given\n- `format` -- if caused by an invalid format specification, the string value given\n\n### `KeyParseError`\n\nThe key data given could not be parsed as a valid key.\n\nProperties\n\n- `keyName` -- `filename` that was given to `Key#parse`\n- `format` -- the `format` that was trying to parse the key\n- `innerErr` -- the inner Error thrown by the format parser\n\n### `KeyEncryptedError`\n\nThe key is encrypted with a symmetric key (ie, it is password protected). The\nparsing operation would succeed if it was given the `passphrase` option.\n\nProperties\n\n- `keyName` -- `filename` that was given to `Key#parse`\n- `format` -- the `format` that was trying to parse the key (currently can only\n be `"pem"`)\n\nFriends of sshpk\n----------------\n\n * [`sshpk-agent`](https://github.com/arekinath/node-sshpk-agent) is a library\n for speaking the `ssh-agent` protocol from node.js, which uses `sshpk`\n', 3087 silly install resolved readmeFilename: 'README.md', 3087 silly install resolved _id: 'sshpk@1.8.2', 3087 silly install resolved _shasum: 'd217f6661c59ce7e042f49562a582e6a6d06b164', 3087 silly install resolved _resolved: 'https://registry.npmjs.org/sshpk/-/sshpk-1.8.2.tgz', 3087 silly install resolved _from: 'sshpk@>=1.7.0 <2.0.0' } ] 3088 info install assert-plus@0.2.0 into E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature 3089 info install jsprim@1.2.2 into E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature 3090 info install sshpk@1.8.2 into E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature 3091 info installOne assert-plus@0.2.0 3092 verbose installOne of assert-plus to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature not in flight; installing 3093 info installOne jsprim@1.2.2 3094 verbose installOne of jsprim to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature not in flight; installing 3095 info installOne sshpk@1.8.2 3096 verbose installOne of sshpk to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature not in flight; installing 3097 silly gunzTarPerm extractEntry CHANGELOG.md 3098 silly gunzTarPerm modified mode [ 'CHANGELOG.md', 436, 438 ] 3099 silly gunzTarPerm extractEntry dist/async.js 3100 silly gunzTarPerm modified mode [ 'dist/async.js', 436, 438 ] 3101 silly gunzTarPerm extractEntry dist/async.min.js 3102 silly gunzTarPerm modified mode [ 'dist/async.min.js', 436, 438 ] 3103 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\sshpk-4b58c9aa7c5da0d9.lock for E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk 3104 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\jsprim-50e9989a65c1b95d.lock for E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim 3105 verbose lock using C:\Users\tristanashley\AppData\Roaming\npm-cache\_locks\assert-plus-cbce52e6f2af5f87.lock for E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus 3106 silly install write writing sshpk 1.8.2 to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk 3107 silly cache addNamed cb sshpk@1.8.2 3108 verbose unbuild node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk 3109 silly install write writing jsprim 1.2.2 to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim 3110 silly cache addNamed cb jsprim@1.2.2 3111 verbose unbuild node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim 3112 silly install write writing assert-plus 0.2.0 to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus 3113 silly cache addNamed cb assert-plus@0.2.0 3114 verbose unbuild node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus 3115 silly gunzTarPerm extractEntry duplex.js 3116 silly gunzTarPerm modified mode [ 'duplex.js', 420, 438 ] 3117 silly gunzTarPerm extractEntry transform.js 3118 silly gunzTarPerm modified mode [ 'transform.js', 420, 438 ] 3119 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk is being purged from base E:\cartridge-images 3120 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk 3121 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim is being purged from base E:\cartridge-images 3122 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim 3123 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus is being purged from base E:\cartridge-images 3124 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus 3125 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\sshpk\1.8.2\package.tgz 3126 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk 3127 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk is being purged 3128 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\sshpk 3129 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\jsprim\1.2.2\package.tgz 3130 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim 3131 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim is being purged 3132 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\jsprim 3133 verbose tar unpack C:\Users\tristanashley\AppData\Roaming\npm-cache\assert-plus\0.2.0\package.tgz 3134 verbose tar unpacking to E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus 3135 silly gentlyRm E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus is being purged 3136 verbose gentlyRm don't care about contents; nuking E:\cartridge-images\node_modules\sharp\node_modules\request\node_modules\http-signature\node_modules\assert-plus 3137 silly gunzTarPerm modes [ '777', '666' ] 3138 silly gunzTarPerm modes [ '777', '666' ] 3139 silly gunzTarPerm modes [ '777', '666' ] 3140 silly gunzTarPerm extractEntry package.json 3141 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 3142 silly gunzTarPerm extractEntry package.json 3143 silly gunzTarPerm modified mode [ 'package.json', 420, 438 ] 3144 silly gunzTarPerm extractEntry package.json 3145 silly gunzTarPerm modified mode [ 'package.json', 436, 438 ] 3146 silly gunzTarPerm extractEntry passthrough.js 3147 silly gunzTarPerm modified mode [ 'passthrough.js', 420, 438 ] 3148 silly gunzTarPerm extractEntry readable.js 3149 silly gunzTarPerm modified mode [ 'readable.js', 420, 438 ] 3150 silly gunzTarPerm extractEntry .npmignore 3151 silly gunzTarPerm modified mode [ '.npmignore', 436, 438 ] 3152 silly gunzTarPerm extractEntry README.md 3153 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 3154 silly gunzTarPerm extractEntry README.md 3155 silly gunzTarPerm modified mode [ 'README.md', 420, 438 ] 3156 silly gunzTarPerm extractEntry LICENSE 3157 silly gunzTarPerm modified mode [ 'LICENSE', 420, 438 ] 3158 info preinstall lru-cache@4.0.1 3159 silly gunzTarPerm extractEntry README.md 3160 silly gunzTarPerm modified mode [ 'README.md', 436, 438 ] 3161 silly gunzTarPerm extractEntry assert.js 3162 silly gunzTarPerm modified mode [ 'assert.js', 436, 438 ] 3163 silly prepareForInstallMany adding pseudomap@^1.0.1 from lru-cache dependencies 3164 silly prepareForInstallMany adding yallist@^2.0.0 from lru-cache dependencies 3165 http 304 https://registry.npmjs.org/pinkie-promise 3166 silly get cb [ 304, 3166 silly get { date: 'Thu, 28 Apr 2016 09:35:14 GMT', 3166 silly get via: '1.1 varnish', 3166 silly get 'cache-control': 'max-age=300', 3166 silly get etag: '"9Y8V37D2OD3IRDJ4IMB7G5U81"', 3166 silly get age: '61', 3166 silly get connection: 'keep-alive', 3166 silly get 'x-served-by': 'cache-lcy1133-LCY', 3166 silly get 'x-cache': 'HIT', 3166 silly get 'x-cache-hits': '10', 3166 silly get 'x-timer': 'S1461836114.670576,VS0,VE0', 3166 silly get vary: 'Accept-Encoding' } ] 3167 verbose etag https://registry.npmjs.org/pinkie-promise from cache 3168 verbose get saving pinkie-promise to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\pinkie-promise\.cache.json 3169 silly cache add args [ 'pseudomap@^1.0.1', null ] 3170 verbose cache add spec pseudomap@^1.0.1 3171 silly cache add args [ 'yallist@^2.0.0', null ] 3172 verbose cache add spec yallist@^2.0.0 3173 silly cache add parsed spec { raw: 'pseudomap@^1.0.1', 3173 silly cache add scope: null, 3173 silly cache add name: 'pseudomap', 3173 silly cache add rawSpec: '^1.0.1', 3173 silly cache add spec: '>=1.0.1 <2.0.0', 3173 silly cache add type: 'range' } 3174 verbose addNamed pseudomap@>=1.0.1 <2.0.0 3175 silly addNamed semver.valid null 3176 silly addNamed semver.validRange >=1.0.1 <2.0.0 3177 silly addNameRange { name: 'pseudomap', range: '>=1.0.1 <2.0.0', hasData: false } 3178 silly mapToRegistry name pseudomap 3179 silly mapToRegistry using default registry 3180 silly mapToRegistry registry https://registry.npmjs.org/ 3181 silly mapToRegistry uri https://registry.npmjs.org/pseudomap 3182 verbose addNameRange registry:https://registry.npmjs.org/pseudomap not in flight; fetching 3183 silly cache add parsed spec { raw: 'yallist@^2.0.0', 3183 silly cache add scope: null, 3183 silly cache add name: 'yallist', 3183 silly cache add rawSpec: '^2.0.0', 3183 silly cache add spec: '>=2.0.0 <3.0.0', 3183 silly cache add type: 'range' } 3184 verbose addNamed yallist@>=2.0.0 <3.0.0 3185 silly addNamed semver.valid null 3186 silly addNamed semver.validRange >=2.0.0 <3.0.0 3187 silly addNameRange { name: 'yallist', range: '>=2.0.0 <3.0.0', hasData: false } 3188 silly mapToRegistry name yallist 3189 silly mapToRegistry using default registry 3190 silly mapToRegistry registry https://registry.npmjs.org/ 3191 silly mapToRegistry uri https://registry.npmjs.org/yallist 3192 verbose addNameRange registry:https://registry.npmjs.org/yallist not in flight; fetching 3193 http 304 https://registry.npmjs.org/chalk 3194 silly get cb [ 304, 3194 silly get { date: 'Thu, 28 Apr 2016 09:35:14 GMT', 3194 silly get via: '1.1 varnish', 3194 silly get 'cache-control': 'max-age=300', 3194 silly get etag: '"BYTTA4QGRCS8B3HP49WCDWXS3"', 3194 silly get age: '297', 3194 silly get connection: 'keep-alive', 3194 silly get 'x-served-by': 'cache-lcy1122-LCY', 3194 silly get 'x-cache': 'HIT', 3194 silly get 'x-cache-hits': '54', 3194 silly get 'x-timer': 'S1461836114.671187,VS0,VE0', 3194 silly get vary: 'Accept-Encoding' } ] 3195 verbose etag https://registry.npmjs.org/chalk from cache 3196 verbose get saving chalk to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\chalk\.cache.json 3197 http 200 https://registry.npmjs.org/is-my-json-valid 3198 silly get cb [ 200, 3198 silly get { server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)', 3198 silly get etag: '"CG6IJHFGPRNR9P2DXWRUBEZBA"', 3198 silly get 'content-type': 'application/json', 3198 silly get 'cache-control': 'max-age=300', 3198 silly get 'content-length': '63168', 3198 silly get 'accept-ranges': 'bytes', 3198 silly get date: 'Thu, 28 Apr 2016 09:35:14 GMT', 3198 silly get via: '1.1 varnish', 3198 silly get age: '87', 3198 silly get connection: 'keep-alive', 3198 silly get 'x-served-by': 'cache-lcy1122-LCY', 3198 silly get 'x-cache': 'HIT', 3198 silly get 'x-cache-hits': '9', 3198 silly get 'x-timer': 'S1461836114.670869,VS0,VE0', 3198 silly get vary: 'Accept-Encoding' } ] 3199 verbose get saving is-my-json-valid to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\is-my-json-valid\.cache.json 3200 silly gunzTarPerm extractEntry lib/_stream_duplex.js 3201 silly gunzTarPerm modified mode [ 'lib/_stream_duplex.js', 420, 438 ] 3202 silly gunzTarPerm extractEntry lib/_stream_passthrough.js 3203 silly gunzTarPerm modified mode [ 'lib/_stream_passthrough.js', 420, 438 ] 3204 silly gunzTarPerm extractEntry CHANGES.md 3205 silly gunzTarPerm modified mode [ 'CHANGES.md', 420, 438 ] 3206 silly gunzTarPerm extractEntry lib/jsprim.js 3207 silly gunzTarPerm modified mode [ 'lib/jsprim.js', 420, 438 ] 3208 silly gunzTarPerm extractEntry test/utils.js 3209 silly gunzTarPerm modified mode [ 'test/utils.js', 509, 511 ] 3210 silly gunzTarPerm extractEntry LICENSE 3211 silly gunzTarPerm modified mode [ 'LICENSE', 436, 438 ] 3212 silly gunzTarPerm extractEntry CHANGES.md 3213 silly gunzTarPerm modified mode [ 'CHANGES.md', 436, 438 ] 3214 silly gunzTarPerm extractEntry AUTHORS 3215 silly gunzTarPerm modified mode [ 'AUTHORS', 436, 438 ] 3216 verbose request uri https://registry.npmjs.org/pseudomap 3217 verbose request no auth needed 3218 info attempt registry request try #1 at 10:35:14 AM 3219 verbose etag "DUOK70GJPZOHMDOKRKT7ULNQM" 3220 http request GET https://registry.npmjs.org/pseudomap 3221 http 200 https://registry.npmjs.org/commander 3222 silly get cb [ 200, 3222 silly get { server: 'CouchDB/1.5.0 (Erlang OTP/R16B03)', 3222 silly get etag: '"2GL24FZKIR8GT9757OXSA8XSL"', 3222 silly get 'content-type': 'application/json', 3222 silly get 'cache-control': 'max-age=300', 3222 silly get 'content-length': '62187', 3222 silly get 'accept-ranges': 'bytes', 3222 silly get date: 'Thu, 28 Apr 2016 09:35:14 GMT', 3222 silly get via: '1.1 varnish', 3222 silly get age: '161', 3222 silly get connection: 'keep-alive', 3222 silly get 'x-served-by': 'cache-lcy1123-LCY', 3222 silly get 'x-cache': 'HIT', 3222 silly get 'x-cache-hits': '29', 3222 silly get 'x-timer': 'S1461836114.671761,VS0,VE0', 3222 silly get vary: 'Accept-Encoding' } ] 3223 verbose get saving commander to C:\Users\tristanashley\AppData\Roaming\npm-cache\registry.npmjs.org\commander\.cache.json 3224 verbose request uri https://registry.npmjs.org/yallist 3225 verbose request no auth needed 3226 info attempt registry request try #1 at 10:35:14 AM 3227 verbose etag "3LK2LCIO05OJQFXB4G9ZEET1H" 3228 http request GET https://registry.npmjs.org/yallist 3229 silly addNameRange number 2 { name: 'pinkie-promise', 3229 silly addNameRange range: '>=2.0.0 <3.0.0', 3229 silly addNameRange hasData: true } 3230 silly addNameRange versions [ 'pinkie-promise', [ '1.0.0', '2.0.0', '2.0.1' ] ] 3231 verbose addNamed pinkie-promise@2.0.1 3232 silly addNamed semver.valid 2.0.1 3233 silly addNamed semver.validRange 2.0.1 3234 silly gunzTarPerm extractEntry lib/_stream_readable.js 3235 silly gunzTarPerm modified mode [ 'lib/_stream_readable.js', 420, 438 ] 3236 silly gunzTarPerm extractEntry lib/async.js 3237 silly gunzTarPerm modified mode [ 'lib/async.js', 436, 438 ] 3238 silly addNameRange number 2 { name: 'chalk', range: '>=1.1.1 <2.0.0', hasData: true } 3239 silly addNameRange versions [ 'chalk', 3239 silly addNameRange [ '0.1.0', 3239 silly addNameRange '0.1.1', 3239 silly addNameRange '0.2.0', 3239 silly addNameRange '0.2.1', 3239 silly addNameRange '0.3.0', 3239 silly addNameRange '0.4.0', 3239 silly addNameRange '0.5.0', 3239 silly addNameRange '0.5.1', 3239 silly addNameRange '1.0.0', 3239 silly addNameRange '1.1.0', 3239 silly addNameRange '1.1.1', 3239 silly addNameRange '1.1.2', 3239 silly addNameRange '1.1.3' ] ] 3240 verbose addNamed chalk@1.1.3 3241 silly addNamed semver.valid 1.1.3 3242 silly addNamed semver.validRange 1.1.3 3243 silly gunzTarPerm extractEntry .travis.yml 3244 silly gunzTarPerm modified mode [ '.travis.yml', 436, 438 ] 3245 silly gunzTarPerm extractEntry bin/sshpk-conv 3246 silly gunzTarPerm modified mode [ 'bin/sshpk-conv', 509, 511 ] 3247 silly addNameRange number 2 { name: 'is-my-json-valid', 3247 silly addNameRange range: '>=2.12.4 <3.0.0', 3247 silly addNameRange hasData: true } 3248 silly addNameRange versions [ 'is-my-json-valid', 3248 silly addNameRange [ '0.0.0', 3248 silly addNameRange '1.0.0', 3248 silly addNameRange '1.0.1', 3248 silly addNameRange '1.1.0', 3248 silly addNameRange '1.2.0', 3248 silly addNameRange '1.3.0', 3248 silly addNameRange '1.3.1', 3248 silly addNameRange '1.3.2', 3248 silly addNameRange '1.3.3', 3248 silly addNameRange '1.3.4', 3248 silly addNameRange '1.3.5', 3248 silly addNameRange '1.3.6', 3248 silly addNameRange '1.3.7', 3248 silly addNameRange '1.3.8', 3248 silly addNameRange '1.3.9', 3248 silly addNameRange '1.4.0', 3248 silly addNameRange '1.4.1', 3248 silly addNameRange '2.0.0', 3248 silly addNameRange '2.0.1', 3248 silly addNameRange '2.0.2', 3248 silly addNameRange '2.0.3', 3248 silly addNameRange '2.1.0', 3248 silly addNameRange '2.2.0', 3248 silly addNameRange '2.2.1', 3248 silly addNameRange '2.3.0', 3248 silly addNameRange '2.3.1', 3248 silly addNameRange '2.4.0', 3248 silly addNameRange '2.4.1', 3248 silly addNameRange '2.5.0', 3248 silly addNameRange '2.6.0', 3248 silly addNameRange '2.7.0', 3248 silly addNameRange '2.8.0', 3248 silly addNameRange '2.9.0', 3248 silly addNameRange '2.9.1', 3248 silly addNameRange '2.9.2', 3248 silly addNameRange '2.9.3', 3248 silly addNameRange '2.9.4', 3248 silly addNameRange '2.10.0', 3248 silly addNameRange '2.10.1', 3248 silly addNameRange '2.11.0', 3248 silly addNameRange '2.12.0', 3248 silly addNameRange '2.12.1', 3248 silly addNameRange '2.12.2', 3248 silly addNameRange '2.12.3', 3248 silly addNameRange '2.12.4', 3248 silly addNameRange '2.13.0', 3248 silly addNameRange '2.13.1' ] ] 3249 verbose addNamed is-my-json-valid@2.13.1 3250 silly addNamed semver.valid 2.13.1 3251 silly addNamed semver.validRange 2.13.1 3252 silly cache afterAdd pinkie-promise@2.0.1 3253 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\pinkie-promise\2.0.1\package\package.json not in flight; writing 3254 silly addNameRange number 2 { name: 'commander', range: '>=2.9.0 <3.0.0', hasData: true } 3255 silly addNameRange versions [ 'commander', 3255 silly addNameRange [ '0.0.1', 3255 silly addNameRange '0.0.3', 3255 silly addNameRange '0.0.4', 3255 silly addNameRange '0.0.5', 3255 silly addNameRange '0.1.0', 3255 silly addNameRange '0.2.0', 3255 silly addNameRange '0.2.1', 3255 silly addNameRange '0.3.0', 3255 silly addNameRange '0.3.1', 3255 silly addNameRange '0.3.2', 3255 silly addNameRange '0.3.3', 3255 silly addNameRange '0.4.0', 3255 silly addNameRange '0.4.1', 3255 silly addNameRange '0.4.2', 3255 silly addNameRange '0.4.3', 3255 silly addNameRange '0.5.0', 3255 silly addNameRange '0.5.1', 3255 silly addNameRange '0.6.0', 3255 silly addNameRange '0.6.1', 3255 silly addNameRange '0.5.2', 3255 silly addNameRange '1.0.0', 3255 silly addNameRange '1.0.1', 3255 silly addNameRange '1.0.2', 3255 silly addNameRange '1.0.3', 3255 silly addNameRange '1.0.4', 3255 silly addNameRange '1.0.5', 3255 silly addNameRange '1.1.0', 3255 silly addNameRange '1.1.1', 3255 silly addNameRange '1.2.0', 3255 silly addNameRange '1.3.0', 3255 silly addNameRange '1.3.1', 3255 silly addNameRange '1.3.2', 3255 silly addNameRange '2.0.0', 3255 silly addNameRange '2.1.0', 3255 silly addNameRange '2.2.0', 3255 silly addNameRange '2.3.0', 3255 silly addNameRange '2.4.0', 3255 silly addNameRange '2.5.0', 3255 silly addNameRange '2.5.1', 3255 silly addNameRange '2.6.0', 3255 silly addNameRange '2.7.0', 3255 silly addNameRange '2.7.1', 3255 silly addNameRange '2.8.0', 3255 silly addNameRange '2.8.1', 3255 silly addNameRange '2.9.0' ] ] 3256 verbose addNamed commander@2.9.0 3257 silly addNamed semver.valid 2.9.0 3258 silly addNamed semver.validRange 2.9.0 3259 silly cache afterAdd chalk@1.1.3 3260 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\chalk\1.1.3\package\package.json not in flight; writing 3261 silly cache afterAdd is-my-json-valid@2.13.1 3262 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\is-my-json-valid\2.13.1\package\package.json not in flight; writing 3263 silly gunzTarPerm extractEntry lib/_stream_transform.js 3264 silly gunzTarPerm modified mode [ 'lib/_stream_transform.js', 420, 438 ] 3265 silly gunzTarPerm extractEntry lib/_stream_writable.js 3266 silly gunzTarPerm modified mode [ 'lib/_stream_writable.js', 420, 438 ] 3267 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\pinkie-promise\2.0.1\package\package.json written 3268 silly cache afterAdd commander@2.9.0 3269 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\commander\2.9.0\package\package.json not in flight; writing 3270 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\chalk\1.1.3\package\package.json written 3271 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\is-my-json-valid\2.13.1\package\package.json written 3272 silly gunzTarPerm extractEntry .travis.yml 3273 silly gunzTarPerm modified mode [ '.travis.yml', 420, 438 ] 3274 silly gunzTarPerm extractEntry doc/stream.markdown 3275 silly gunzTarPerm modified mode [ 'doc/stream.markdown', 420, 438 ] 3276 verbose afterAdd C:\Users\tristanashley\AppData\Roaming\npm-cache\commander\2.9.0\package\package.json written 3277 silly install resolved [ { name: 'pinkie-promise', 3277 silly install resolved version: '2.0.1', 3277 silly install resolved description: 'ES2015 Promise ponyfill', 3277 silly install resolved license: 'MIT', 3277 silly install resolved repository: 3277 silly install resolved { type: 'git', 3277 silly install resolved url: 'https://github.com/floatdrop/pinkie-promise' }, 3277 silly install resolved author: 3277 silly install resolved { name: 'Vsevolod Strukchinsky', 3277 silly install resolved email: 'floatdrop@gmail.com', 3277 silly install resolved url: 'github.com/floatdrop' }, 3277 silly install resolved engines: { node: '>=0.10.0' }, 3277 silly install resolved scripts: { test: 'mocha' }, 3277 silly install resolved files: [ 'index.js' ], 3277 silly install resolved keywords: [ 'promise', 'promises', 'es2015', 'es6', 'polyfill', 'ponyfill' ], 3277 silly install resolved dependencies: { pinkie: '^2.0.0' }, 3277 silly install resolved devDependencies: { mocha: '*' }, 3277 silly install resolved readme: '# pinkie-promise [![Build Status](https://travis-ci.org/floatdrop/pinkie-promise.svg?branch=master)](https://travis-ci.org/floatdrop/pinkie-promise)\n\n> [ES2015 Promise](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects) ponyfill\n\nModule exports global Promise object (if available) or [`pinkie`](http://github.com/floatdrop/pinkie) Promise polyfill.\n\n## Install\n\n```\n$ npm install --save pinkie-promise\n```\n\n## Usage\n\n```js\nvar Promise = require(\'pinkie-promise\');\n\nnew Promise(function (resolve) { resolve(\'unicorns\'); });\n//=> Promise { \'unicorns\' }\n```\n\n## Related\n\n- [pify](https://github.com/sindresorhus/pify) - Promisify a callback-style function\n\n## License\n\nMIT © [Vsevolod Strukchinsky](http://github.com/floatdrop)\n', 3277 silly install resolved readmeFilename: 'readme.md', 3277 silly install resolved bugs: { url: 'https://github.com/floatdrop/pinkie-promise/issues' }, 3277 silly install resolved homepage: 'https://github.com/floatdrop/pinkie-promise', 3277 silly install resolved _id: 'pinkie-promise@2.0.1', 3277 silly install resolved _shasum: '2135d6dfa7a358c069ac9b178776288228450ffa', 3277 silly install resolved _resolved: 'https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz', 3277 silly install resolved _from: 'pinkie-promise@>=2.0.0 <3.0.0' }, 3277 silly install resolved { name: 'chalk', 3277 silly install resolved version: '1.1.3', 3277 silly install resolved description: 'Terminal string styling done right. Much color.', 3277 silly install resolved license: 'MIT', 3277 silly install resolved repository: { type: 'git', url: 'https://github.com/chalk/chalk' }, 3277 silly install resolved maintainers: [ [Object], [Object], [Object] ], 3277 silly install resolved engines: { node: '>=0.10.0' }, 3277 silly install resolved scripts: 3277 silly install resolved { test: 'xo && mocha', 3277 silly install resolved bench: 'matcha benchmark.js', 3277 silly install resolved coverage: 'nyc npm test && nyc report', 3277 silly install resolved coveralls: 'nyc npm test && nyc report --reporter=text-lcov | coveralls' }, 3277 silly install resolved files: [ 'index.js' ], 3277 silly install resolved keywords: 3277 silly install resolved [ 'color', 3277 silly install resolved 'colour', 3277 silly install resolved 'colors', 3277 silly install resolved 'terminal', 3277 silly install resolved 'console', 3277 silly install resolved 'cli', 3277 silly install resolved 'string', 3277 silly install resolved 'str', 3277 silly install resolved 'ansi', 3277 silly install resolved 'style', 3277 silly install resolved 'styles', 3277 silly install resolved 'tty', 3277 silly install resolved 'formatting', 3277 silly install resolved 'rgb', 3277 silly install resolved '256', 3277 silly install resolved 'shell', 3277 silly install resolved 'xterm', 3277 silly install resolved 'log', 3277 silly install resolved 'logging', 3277 silly install resolved 'command-line', 3277 silly install resolved 'text' ], 3277 silly install resolved dependencies: 3277 silly install resolved { 'ansi-styles': '^2.2.1', 3277 silly install resolved 'escape-string-regexp': '^1.0.2', 3277 silly install resolved 'has-ansi': '^2.0.0', 3277 silly install resolved 'strip-ansi': '^3.0.0', 3277 silly install resolved 'supports-color': '^2.0.0' }, 3277 silly install resolved devDependencies: 3277 silly install resolved { coveralls: '^2.11.2', 3277 silly install resolved matcha: '^0.6.0', 3277 silly install resolved mocha: '*', 3277 silly install resolved nyc: '^3.0.0', 3277 silly install resolved 'require-uncached': '^1.0.2', 3277 silly install resolved 'resolve-from': '^1.0.0', 3277 silly install resolved semver: '^4.3.3', 3277 silly install resolved xo: '*' }, 3277 silly install resolved xo: { envs: [Object] }, 3277 silly install resolved readme: '

\n\t
\n\t
\n\tchalk\n\t
\n\t
\n\t
\n

\n\n> Terminal string styling done right\n\n[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk)\n[![Coverage Status](https://coveralls.io/repos/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/r/chalk/chalk?branch=master)\n[![](http://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4)\n\n\n[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68). Although there are other ones, they either do too much or not enough.\n\n**Chalk is a clean and focused alternative.**\n\n![](https://github.com/chalk/ansi-styles/raw/master/screenshot.png)\n\n\n## Why\n\n- Highly performant\n- Doesn\'t extend `String.prototype`\n- Expressive API\n- Ability to nest styles\n- Clean and focused\n- Auto-detects color support\n- Actively maintained\n- [Used by ~4500 modules](https://www.npmjs.com/browse/depended/chalk) as of July 15, 2015\n\n\n## Install\n\n```\n$ npm install --save chalk\n```\n\n\n## Usage\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nvar chalk = require(\'chalk\');\n\n// style a string\nchalk.blue(\'Hello world!\');\n\n// combine styled and normal strings\nchalk.blue(\'Hello\') + \'World\' + chalk.red(\'!\');\n\n// compose multiple styles using the chainable API\nchalk.blue.bgRed.bold(\'Hello world!\');\n\n// pass in multiple arguments\nchalk.blue(\'Hello\', \'World!\', \'Foo\', \'bar\', \'biz\', \'baz\');\n\n// nest styles\nchalk.red(\'Hello\', chalk.underline.bgBlue(\'world\') + \'!\');\n\n// nest styles of the same type even (color, underline, background)\nchalk.green(\n\t\'I am a green line \' +\n\tchalk.blue.underline.bold(\'with a blue substring\') +\n\t\' that becomes green again!\'\n);\n```\n\nEasily define your own themes.\n\n```js\nvar chalk = require(\'chalk\');\nvar error = chalk.bold.red;\nconsole.log(error(\'Error!\'));\n```\n\nTake advantage of console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data).\n\n```js\nvar name = \'Sindre\';\nconsole.log(chalk.green(\'Hello %s\'), name);\n//=> Hello Sindre\n```\n\n\n## API\n\n### chalk.`