A Nodejs utility for creating and extracting tar archives programmatically.
To be used programmatically for creating and extracting updates in tar format.
The created tar can be compressed or decompressed by the Nodejs zlib.
tar create archive in POSIX 1003.1-1988 (ustar)
format.
- to create and extracts tar archives in UStar format.
- to be compatible with 7-Zip and the Linux tar command.
- to have an easy, eat all, API.
- to have a more detailed API for hacking.
- use relative paths from the parent of the 'target' directory
Archive a complete directory to a tar archive.
Here target
can be a path to a directory or a single file.
const {createArchive} = require("@popovmp/tar");
const tarPath = "stuff.tar";
const target = "./path/to/stuff";
createArchive(tarPath, target);
Extract a tar archive from tarPath
into the destination
directory.
const {extractArchive} = require("@popovmp/tar");
const tarPath = "stuff.tar";
const destination = "./destination";
extractArchive(tarPath, destination);
You can extract a tar buffer to a destination directory. This method is useful when you acquire the tar buffer from a network request.
const {extract} = require("@popovmp/tar");
const tarball = getTarBufferSomehow();
const destination = "./destination";
extract(tarball, destination);
Create a tar Buffer given a list of entry paths and a base directory.
This is useful if you want to precise the tar content.
const {getEntryStats, create} = require("@popovmp/tar");
const {gzipSync} = require("node:zlib");
const baseDir = "./base";
const entryPaths = [
"stuff/",
"stuff/hello.txt",
"stuff/inner/",
"stuff/inner/other.bin",
];
const entryStats = getEntryStats(baseDir, entryPaths);
const tarball = create(baseDir, entryStats);
const tarGz = gzipSync(tarball);
// Save tarGz to file or send it via network.
Read all entry pats of a target directory.
It is useful if you want to manually add or remove paths to archive.
const {getEntryPaths} = require("@popovmp/tar");
const target = "./path/to/stuff";
const entryPaths = getEntryPaths(target);
console.log(entryPaths.join("\n"));
/*
"stuff/"
"stuff/hello.txt"
"stuff/inner/"
"stuff/inner/other.bin"
*/