var archiver = require('archiver'); var fs = require('fs'); var os = require('os'); var path = require('path'); module.exports = (file, io, data) => { // Use os.tmpdir() to get the system's temporary directory var tempDir = os.tmpdir(); // Construct the path for the zip file in the temp directory var outputPath = path.join(tempDir, file + '.zip'); var output = fs.createWriteStream(outputPath); var archive = archiver('zip', { zlib: { level: 9 } // Sets the compression level. }); // listen for all archive data to be written output.on('close', function() { console.log(archive.pointer() + ' total bytes'); console.log('archiver has been finalized and the output file descriptor has closed.'); io.emit(data.token, { progress: "Completed", file: outputPath }); }); // This event is fired when the data source is drained no matter what was the data source. output.on('end', function() { console.log('Data has been drained'); }); // good practice to catch warnings (ie stat failures and other non-blocking errors) archive.on('warning', function(err) { if (err.code === 'ENOENT') { // log warning } else { // throw error throw err; } }); // good practice to catch this error explicitly archive.on('error', function(err) { throw err; }); // pipe archive data to the file archive.pipe(output); // append files from a sub-directory and naming it `new-subdir` within the archive archive.directory('./' + file, false); // finalize the archive archive.finalize(); }