node-wget-fetch
Advanced tools
Comparing version 1.0.1 to 1.0.2
{ | ||
"name": "node-wget-fetch", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "Ultra simple async retrieval of resources or remote files over http or https, an cli tool, and convenience wrapper of node-fetch.", | ||
@@ -45,3 +45,3 @@ "main": "wget-fetch.js", | ||
"wget-fetch.js", | ||
"wget-fetch.d.ts" | ||
"README.md" | ||
], | ||
@@ -48,0 +48,0 @@ "dependencies": { |
@@ -35,3 +35,3 @@ # node-wget-fetch | ||
- `options` Standard *Request/Fetch* [Options](https://www.npmjs.com/package/node-fetch#fetch-options) for the HTTP(S) request | ||
- Returns: **Promise** of `response body` of above **type** | ||
- Returns: **Promise** of `response body` of above **type**, only if **status text** is `OK` | ||
@@ -117,3 +117,3 @@ ## Convenience Request Methods | ||
console.log('--- Do file retrieved match "Content-Length"?:'); | ||
console.log(info.retrievedSizeMatch); | ||
console.log(info.fileSizeMatch); | ||
}) | ||
@@ -120,0 +120,0 @@ .catch((error) => { |
@@ -64,53 +64,59 @@ 'use strict'; | ||
.then(res => { | ||
switch (action) { | ||
case 'header': | ||
return new Promise((resolve) => resolve(res.headers.raw())); | ||
case 'object': | ||
return new Promise((resolve) => resolve(res)); | ||
case 'array': | ||
return res.arrayBuffer(); | ||
case 'buffer': | ||
return res.buffer(); | ||
case 'blob': | ||
return res.blob(); | ||
case 'json': | ||
return res.json(); | ||
case 'text': | ||
return res.text(); | ||
case 'converted': | ||
return res.textConverted(); | ||
case 'stream': | ||
return new Promise((resolve) => resolve(res.body)); | ||
default: | ||
return new Promise((resolve, reject) => { | ||
const fileSize = Number.isInteger(res.headers.get('content-length') - 0) ? | ||
parseInt(res.headers.get('content-length')) : | ||
0; | ||
let downloadedSize = 0; | ||
const writer = fs.createWriteStream(destination, { | ||
flags: 'w+', | ||
encoding: 'binary' | ||
}); | ||
res.body.pipe(writer); | ||
if (res.statusText === 'OK') { | ||
switch (action) { | ||
case 'header': | ||
return new Promise((resolve) => resolve(res.headers.raw())); | ||
case 'object': | ||
return new Promise((resolve) => resolve(res)); | ||
case 'array': | ||
return res.arrayBuffer(); | ||
case 'buffer': | ||
return res.buffer(); | ||
case 'blob': | ||
return res.blob(); | ||
case 'json': | ||
return res.json(); | ||
case 'text': | ||
return res.text(); | ||
case 'converted': | ||
return res.textConverted(); | ||
case 'stream': | ||
return new Promise((resolve) => resolve(res.body)); | ||
default: | ||
return new Promise((resolve, reject) => { | ||
const fileSize = Number.isInteger(res.headers.get('content-length') - 0) ? | ||
parseInt(res.headers.get('content-length')) : | ||
0; | ||
let downloadedSize = 0; | ||
const writer = fs.createWriteStream(destination, { | ||
flags: 'w+', | ||
encoding: 'binary' | ||
}); | ||
res.body.pipe(writer); | ||
res.body.on('data', function (chunk) { | ||
downloadedSize += chunk.length; | ||
}); | ||
res.body.on('data', function (chunk) { | ||
downloadedSize += chunk.length; | ||
}); | ||
writer.on('finish', () => { | ||
writer.end(); | ||
let info = { | ||
filepath: destination, | ||
fileSize: downloadedSize, | ||
retrievedSizeMatch: (fileSize === downloadedSize) | ||
}; | ||
writer.on('finish', () => { | ||
writer.end(); | ||
let info = { | ||
filepath: destination, | ||
fileSize: downloadedSize, | ||
fileSizeMatch: (fileSize === downloadedSize) | ||
}; | ||
info.headers = res.headers.raw(); | ||
return resolve(info); | ||
info.headers = res.headers.raw(); | ||
return resolve(info); | ||
}); | ||
writer.on('error', reject); | ||
}); | ||
writer.on('error', reject); | ||
}); | ||
} | ||
} else { | ||
throw ("Fetch to " + src + " failed, with status text: " + res.statusText); | ||
} | ||
}) | ||
.catch(err => console.log(err)); | ||
.catch(err => { | ||
return new Promise((resolve, reject) => reject(err)); | ||
}); | ||
} | ||
@@ -117,0 +123,0 @@ } |
25995
570