compressing
Version:
Everything you need for compressing and uncompressing
41 lines (32 loc) • 1.2 kB
JavaScript
;
const path = require('path');
const yazl = require('yazl');
const TarStream = require('../tar/stream');
class ZipStream extends TarStream {
_init() {
const zipfile = this._zipfile = new yazl.ZipFile();
const stream = zipfile.outputStream;
stream.on('end', () => this.push(null));
stream.on('data', chunk => this.push(chunk));
stream.on('error', err => this.emit('error', err));
}
_addFileEntry(entry, opts) {
this._zipfile.addFile(entry, opts.relativePath || path.basename(entry), opts);
this._onEntryFinish();
}
_addBufferEntry(entry, opts) {
if (!opts.relativePath) return this.emit('error', new Error('opts.relativePath is required if entry is a buffer'));
this._zipfile.addBuffer(entry, opts.relativePath, opts);
this._onEntryFinish();
}
_addStreamEntry(entry, opts) {
if (!opts.relativePath) return this.emit('error', new Error('opts.relativePath is required if entry is a stream'));
entry.on('error', err => this.emit('error', err));
this._zipfile.addReadStream(entry, opts.relativePath, opts);
this._onEntryFinish();
}
_finalize() {
this._zipfile.end();
}
}
module.exports = ZipStream;