12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- const StreamUnzip = require('node-stream-zip');
- class ZipReader {
- constructor() {
- this.zip = null;
- }
- checkState() {
- if (!this.zip)
- throw new Error('Zip closed');
- }
- async open(zipFile, zipEntries = true) {
- if (this.zip)
- throw new Error('Zip file is already open');
- const zip = new StreamUnzip.async({file: zipFile, skipEntryNameValidation: true});
-
- if (zipEntries)
- this.zipEntries = await zip.entries();
- this.zip = zip;
- }
- get entries() {
- this.checkState();
- return this.zipEntries;
- }
- async extractToBuf(entryFilePath) {
- this.checkState();
- return await this.zip.entryData(entryFilePath);
- }
- async extractToFile(entryFilePath, outputFile) {
- this.checkState();
- await this.zip.extract(entryFilePath, outputFile);
- }
- async extractAllToDir(outputDir) {
- this.checkState();
- await this.zip.extract(null, outputDir);
- }
- async close() {
- if (this.zip) {
- await this.zip.close();
- this.zip = null;
- this.zipEntries = undefined;
- }
- }
- }
- module.exports = ZipReader;
|