1.0.0 • Published 2 years ago

@sosoba/tar-stream v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

@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).

License

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