@sosoba/tar-stream
v1.0.0
Published
Tar generator for nodejs
Downloads
8,250
Readme
@sosoba/tar-stream
@sosoba/tar-stream
is a streaming tar generator. It means you can easily createe tarballs without ever hitting the file system.
It implementes USTAR with additional support for pax extended headers (long and non-ascii file names).
Usage
npm install @sosoba/tar-stream
To create a pack stream use new Pack()
and call pack.entry(header, [callback])
to add tar entries.
import Pack from '@sosoba/tar-stream/pack';
import {createGzip} from 'node:zlib';
const pack = new Pack();
// we need two parallel tasks
await Promise.all([
// first of them pipe the pack to oputputs
pipeline( pack.outputStream, createGzip(), createWriteStream('out.tgz') ),
// and second add a content to pack
(async()=>{
// add a file called my-test.txt with the content "Hello World!"
await pack.addFile({ name: 'my-test.txt' }, Buffer.from('Hello World!'));
// add a file called my-stream-test.txt from a stream
const writable = await pack.addFile({ name: 'my-stream-test.txt', size: 11 });
entry.write('hello');
entry.write(' ');
entry.write('world');
entry.end();
await once( entry, 'end' );
// no more entries
await pack.end();
})(),
]);
Headers
The header object using in entry
should contain the following properties.
Most of these values can be found by stat'ing a file.
{
name: 'path/to/this/entry.txt',
size: 1314, // entry size. defaults to 0
mode: 0o644, // entry mode. defaults to to 0o755 for dirs and 0o644 otherwise
mtime: new Date(), // last modified date for entry. defaults to now.
linkname: 'path', // linked file name
uid: 0, // uid of entry owner. defaults to 0
gid: 0, // gid of entry owner. defaults to 0
uname: 'maf', // uname of entry owner. defaults to null
gname: 'staff', // gname of entry owner. defaults to null
devmajor: 0, // device major version. defaults to 0
devminor: 0 // device minor version. defaults to 0
}
License
MIT