12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 'use strict';
- const tar = require('../tar');
- const gzip = require('../gzip');
- const utils = require('../utils');
- const stream = require('stream');
- const pump = require('pump');
- const ready = require('get-ready');
- class TgzFileStream extends stream.Transform {
- constructor(opts) {
- opts = opts || {};
- super(opts);
- const sourceType = this._sourceType = utils.sourceType(opts.source);
- const tarStream = this._tarStream = new tar.FileStream(opts);
- opts = utils.clone(opts);
- delete opts.source;
- const gzipStream = new gzip.FileStream(opts);
- gzipStream.on('data', chunk => {
- this.push(chunk);
- });
- gzipStream.on('end', () => this.ready(true));
- pump(tarStream, gzipStream, err => {
- err && this.emit('error', err);
- });
- if (sourceType !== 'stream' && sourceType !== undefined) {
- this.end();
- }
- }
- _transform(chunk, encoding, callback) {
- this._tarStream.write(chunk, encoding, callback);
- }
- _flush(callback) {
- if (this._sourceType === 'stream' || this._sourceType === undefined) {
- this._tarStream.end();
- }
- this.ready(callback);
- }
- }
- ready.mixin(TgzFileStream.prototype);
- module.exports = TgzFileStream;
|