fix extractArchive

This commit is contained in:
Nick Playfair 2021-02-01 23:04:11 +00:00
parent 702245e0bd
commit 9d2c8f1778

View File

@ -44,28 +44,39 @@ function handleError(e) {
* @returns {Promise} Promise object represents number of files extracted * @returns {Promise} Promise object represents number of files extracted
*/ */
function extractArchive(fileName, tmpDir) { function extractArchive(fileName, tmpDir) {
return new Promise((resolve, reject) => {
// Check archive exists
try {
if (!fs.existsSync(fileName)) {
return reject(new Error('Archive does not exist.'));
}
if (!fs.existsSync(tmpDir)) {
return reject(new Error('Temporary folder does not exist.'));
}
} catch (e) {
throw new Error(e);
}
// Configure archive to use // Configure archive to use
const archive = new StreamZip({ const archive = new StreamZip({
file: fileName, file: fileName,
storeEntries: true, storeEntries: true,
}); });
return new Promise((resolve, reject) => { // Handle errors
// Try to extract archive.on('error', (err) =>
reject(new Error(`Error extracting archive: ${err}`))
);
// Extract
archive.on('ready', () => { archive.on('ready', () => {
const extDir = path.join(tmpDir, 'archive'); const extDir = path.join(tmpDir, 'archive');
fs.mkdirSync(extDir, { recursive: true }); fs.mkdirSync(extDir, { recursive: true });
archive.extract(null, extDir, (err, count) => { archive.extract(null, extDir, (err, count) => {
if (!err) { if (err) throw new Error(err);
archive.close(); archive.close();
resolve(count); console.log('Extraction complete');
} else { return resolve(count);
const errMsg = 'Error extracting archive';
console.err(errMsg);
archive.close();
reject(errMsg);
}
}); });
}); });
return true;
}); });
} }