@paroicms/connector
Version:
An API to help build management tools for ParoiCMS instances
36 lines • 1.46 kB
JavaScript
import { createWriteStream } from "node:fs";
import { join } from "node:path";
import { pathExists } from "@paroicms/internal-server-lib";
import archiver from "archiver";
export async function createZipArchive({ sourceDir, destDir, filename, logger, }) {
if (!(await pathExists(sourceDir)) || !(await pathExists(destDir))) {
throw new Error(`[zip-archive-builder] invalid source (${sourceDir}) or destination (${destDir}) directory path.`);
}
const zipFilename = `${filename}.zip`;
const archivePath = join(destDir, zipFilename);
return new Promise((resolve, reject) => {
const output = createWriteStream(archivePath);
const archive = archiver("zip", {
zlib: { level: 9 },
});
output.on("close", () => {
resolve({
archivePath,
completeArchiveName: zipFilename,
archiveWeight: archive.pointer(),
});
});
archive.on("warning", () => {
archive.on("warning", (error) => {
logger.warn(`[zip-archive-builder] zip build warning: ${error}`);
});
});
archive.on("error", (error) => {
reject(new Error(`[zip-archive-builder] error to build zip archive: ${error}`));
});
archive.pipe(output);
archive.directory(sourceDir, false);
void archive.finalize();
});
}
//# sourceMappingURL=archiver.helper.js.map