UNPKG

@bravemobile/react-native-code-push

Version:

React Native plugin for the CodePush service

42 lines (41 loc) 1.64 kB
import fs from "fs"; import path from "path"; import yauzl from "yauzl"; export function unzip(zipPath, outputDir) { return new Promise((resolve, reject) => { yauzl.open(zipPath, { lazyEntries: true }, (err, zipFile) => { if (err) return reject(err); zipFile.readEntry(); zipFile.on("entry", (entry) => { const fullPath = path.join(outputDir, entry.fileName); // Handle directory entry if (/\/$/.test(entry.fileName)) { fs.mkdir(fullPath, { recursive: true }, (err) => { if (err) return reject(err); zipFile.readEntry(); }); return; } // Handle file entry zipFile.openReadStream(entry, (err, readStream) => { if (err) return reject(err); fs.mkdir(path.dirname(fullPath), { recursive: true }, (err) => { if (err) return reject(err); const writeStream = fs.createWriteStream(fullPath); readStream.pipe(writeStream); // Continue to the next entry after writing writeStream.on("close", () => { zipFile.readEntry(); }); }); }); }); zipFile.on("end", resolve); zipFile.on("error", reject); }); }); }