dl-tar
A Node.js module to download and extract a tar archive with the Observable API
const {readdirSync} = require('fs');
const dlTar = require('dl-tar');
const url = 'https://****.org/my-archive.tar';
dlTar(url, 'my/dir').subscribe({
next({entry}) {
if (entry.remain === 0) {
console.log(`â ${entry.header.name}`);
}
},
complete() {
readdirSync('my/dir');
console.log('\nCompleted.')
}
});
â bin/
â bin/app.exe
â README.md
â LICENSE
â install
Completed.
Installation
Use npm.
npm install dl-tar
API
const dlTar = require('dl-tar');
tarArchiveUrl: string
extractDir: string
(a path where the archive will be extracted)
options: Object
Return: Observable
(zenparsing's implementation)
When the Observable
is subscribed, it starts to download the tar archive, extract it and successively send extraction progress to its Observer
.
When the Subscription
is unsubscribed, it stops downloading and extracting.
It automatically unzips gzipped archives.
Progress
Every progress object have two properties entry
and response
.
entry
Type: tar.ReadEntry
An instance of node-tar's ReadEntry
object.
For example you can get the progress of each entry as a percentage by 100 - progress.entry.remain / progress.entry.size * 100
.
dlTar('https://****.org/my-archive.tar', 'my/dir')
.filter(progress => progress.entry.type === 'File')
.subscribe(progress => {
console.log(`${(100 - progress.entry.remain / progress.entry.size * 100).toFixed(1)} %`);
if (progress.entry.remain === 0) {
console.log(`>> OK ${progress.entry.header.path}`);
}
});
0.0 %
0.1 %
0.3 %
0.4 %
ī¸
99.6 %
99.8 %
99.9 %
100.0 %
>> OK bin/app.exe
0.0 %
0.1 %
0.2 %
0.3 %
ī¸
response
Type: Object {bytes: <number>, headers: <Object>, url: <string>}
response.url
is the final redirected URL of the request, response.headers
is a response header object derived from http.IncomingMessage
, and response.bytes
is a total content length of the downloaded archive. content-length
header will be converted to number
if it's string
.
Options
You can pass options to Request and node-tar's Unpack
constructor. Note that:
onentry
option is not supported.strict
option defaults to true
, not false
.strip
option defaults to 1
, not 0
. That means the top level directory is stripped off by default.
License
ISC License Š 2017 - 2018 Shinnosuke Watanabe