@netlify/zip-it-and-ship-it
Version:
43 lines (42 loc) • 1.27 kB
JavaScript
import { createWriteStream, readlinkSync } from 'fs';
import archiver from 'archiver';
export const ARCHIVE_FORMAT = {
NONE: 'none',
ZIP: 'zip',
};
// Start zipping files
export const startZip = function (destPath) {
const output = createWriteStream(destPath);
const archive = archiver('zip');
archive.pipe(output);
return { archive, output };
};
// Add new file to zip
export const addZipFile = function (archive, file, name, stat) {
if (stat.isSymbolicLink()) {
const linkContent = readlinkSync(file);
archive.symlink(name, linkContent, stat.mode);
}
else {
archive.file(file, {
name,
mode: stat.mode,
// Ensure sha256 stability regardless of mtime
date: new Date(0),
stats: stat,
});
}
};
// Add new file content to zip
export const addZipContent = function (archive, content, name) {
archive.append(content, { name, date: new Date(0) });
};
// End zipping files
export const endZip = async function (archive, output) {
const result = new Promise((resolve, reject) => {
output.on('error', (error) => reject(error));
output.on('finish', () => resolve());
});
await archive.finalize();
return result;
};