untar-memory
Version:
Untar a tarball to an in-memory filesystem
38 lines (31 loc) • 973 B
JavaScript
var ref = require('fs');
var createReadStream = ref.createReadStream;
var concat = require('concat-stream')
var gunzip = require('gunzip-maybe')
var MemoryFs = require('memory-fs')
var fileType = require('file-type')
var ref$1 = require('path');
var dirname = ref$1.dirname;
var tar = require('tar')
module.exports = untarToMemory
function untarToMemory (file, mfs) {
var tarball = typeof file === 'string'
? createReadStream(file)
: file
mfs = mfs || new MemoryFs()
return new Promise(function (resolve, reject) {
tarball
.pipe(gunzip())
.pipe(tar.Parse())
.on('entry', function (entry) {
var path = '/' + entry.props.path
mfs.mkdirpSync(dirname(path))
entry.pipe(concat(function (buf) {
var encoding = fileType(buf) ? 'binary' : 'utf8'
mfs.writeFileSync(path, buf, encoding)
}))
})
.on('end', function () { return resolve(mfs); })
.on('error', reject)
})
}