tar
A Nodejs utility for creating and extracting tar archives programmatically.
Purpose
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.
Goals
- 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
Examples
Tar all
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 all
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);
Extract a Buffer
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 tar by entry paths
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.
Get entry paths
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"
*/