| const fs = require('fs'); |
| const archiver = require('archiver'); |
| const path = require('path'); |
|
|
| function createZip(files, zipPath) { |
| return new Promise((resolve, reject) => { |
| const output = fs.createWriteStream(zipPath); |
| const archive = archiver('zip', { |
| zlib: { level: 9 } |
| }); |
|
|
| output.on('close', function() { |
| console.log(archive.pointer() + ' total bytes'); |
| console.log('archiver has been finalized and the output file descriptor has closed.'); |
| resolve(zipPath); |
| }); |
|
|
| output.on('end', function() { |
| console.log('Data has been drained'); |
| }); |
|
|
| archive.on('warning', function(err) { |
| if (err.code === 'ENOENT') { |
| console.warn(err); |
| } else { |
| reject(err); |
| } |
| }); |
|
|
| archive.on('error', function(err) { |
| reject(err); |
| }); |
|
|
| archive.pipe(output); |
|
|
| files.forEach(file => { |
| if (fs.existsSync(file.path)) { |
| archive.file(file.path, { name: file.name }); |
| } else { |
| console.warn(`File not found: ${file.path}`); |
| } |
| }); |
|
|
| archive.finalize(); |
| }); |
| } |
|
|
| module.exports = { createZip }; |