Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
65 lines
1.7 KiB
Plaintext
65 lines
1.7 KiB
Plaintext
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const utils = require('../utils');
|
|
const ready = require('get-ready');
|
|
const streamifier = require('streamifier');
|
|
const FlushWritable = require('flushwritable');
|
|
const GzipUncompressStream = require('../gzip').UncompressStream;
|
|
const TarUncompressStream = require('../tar').UncompressStream;
|
|
|
|
class TgzUncompressStream extends FlushWritable {
|
|
constructor(opts) {
|
|
opts = opts || {};
|
|
super(opts);
|
|
|
|
const newOpts = utils.clone(opts);
|
|
newOpts.source = undefined;
|
|
this._gzipStream = new GzipUncompressStream(newOpts)
|
|
.on('error', err => this.emit('error', err));
|
|
|
|
const tarStream = new TarUncompressStream(newOpts)
|
|
.on('finish', () => this.ready(true))
|
|
.on('entry', this.emit.bind(this, 'entry'))
|
|
.on('error', err => this.emit('error', err));
|
|
|
|
this._gzipStream.pipe(tarStream);
|
|
|
|
const sourceType = utils.sourceType(opts.source);
|
|
|
|
if (sourceType === 'file') {
|
|
const stream = fs.createReadStream(opts.source, opts.fs);
|
|
stream.on('error', err => this.emit('error', err));
|
|
stream.pipe(this);
|
|
return;
|
|
}
|
|
|
|
if (sourceType === 'buffer') {
|
|
const stream = streamifier.createReadStream(opts.source, opts.streamifier);
|
|
stream.on('error', err => this.emit('error', err));
|
|
stream.pipe(this);
|
|
return;
|
|
}
|
|
|
|
if (sourceType === 'stream') {
|
|
opts.source.on('error', err => this.emit('error', err));
|
|
opts.source.pipe(this);
|
|
}
|
|
|
|
// else: waiting to be piped
|
|
}
|
|
|
|
_write(chunk, encoding, callback) {
|
|
this._gzipStream.write(chunk, encoding, callback);
|
|
}
|
|
|
|
_flush(callback) {
|
|
this._gzipStream.end();
|
|
this.ready(callback);
|
|
}
|
|
}
|
|
|
|
ready.mixin(TgzUncompressStream.prototype);
|
|
|
|
module.exports = TgzUncompressStream;
|