diff --git a/index.js b/index.js index 31878ae..a1bc258 100644 --- a/index.js +++ b/index.js @@ -126,7 +126,7 @@ async function packDirectory(directory, options = {}) { }); await writeStream(entry, contents); - //console.log(contents) + entry.end(); }catch (e){console.log(e)} }, directory, packRoot); @@ -154,42 +154,49 @@ function streamToBuffer(stream) { async function unpackDirectory(directory, options = {}) { - if(!fs.existsSync(directory)) { - fs.mkdirSync(directory); - } - - const fileReadStream = getFileReadStream(options); - const zstd = await getZstd(); - - const extract = tar.extract(); - - extract.on('entry', async (header, fileStream, next) => { - let contents = await streamToBuffer(fileStream); - contents = new Uint8Array(contents); - - contents = zstd.decompress(contents); - - if(!/^\./.test(header.name)) { - if(header.name == 'index.html') { - console.log(String.fromCharCode.apply(null, contents)) - } - const writePath = path.join(directory, header.name); - fs.promises.mkdir(path.dirname(writePath), { recursive: true }); - var fileWriteStream = fs.createWriteStream(writePath); - fileWriteStream.write(contents); - fileWriteStream.end(); - next(); - } else { - fileStream.resume(); - next(); + return new Promise(async (resolve) => { + if(!fs.existsSync(directory)) { + fs.mkdirSync(directory); } - }); - extract.on('finish', () => { - // all entries read - }); + const fileReadStream = getFileReadStream(options); + const zstd = await getZstd(); - fileReadStream.pipe(extract); + const extract = tar.extract(); + + extract.on('entry', async (header, fileStream, next) => { + let contents = await streamToBuffer(fileStream); + contents = new Uint8Array(contents); + + contents = zstd.decompress(contents); + + if(!/^\./.test(header.name)) { + const writePath = path.join(directory, header.name); + + var fileWriteStream; + try { + fileWriteStream = fs.createWriteStream(writePath); + } catch (e) { + // Assume directory may not exist if an error is thrown + fs.mkdirSync(path.dirname(writePath), { recursive: true }); + fileWriteStream = fs.createWriteStream(writePath); + } + + fileWriteStream.write(contents); + fileWriteStream.end(); + next(); + } else { + fileStream.resume(); + next(); + } + }); + + extract.on('finish', () => { + resolve(true); + }); + + fileReadStream.pipe(extract); + }); } /*