tar-iterator
Version:
Extract contents from tar archive type using an iterator API using streams or paths. Use stream interface and pipe transforms to add decompression algorithms
96 lines • 4.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return nextEntry;
}
});
var _calloncefn = /*#__PURE__*/ _interop_require_default(require("call-once-fn"));
var _extractbaseiterator = require("extract-base-iterator");
var _lodashcompact = /*#__PURE__*/ _interop_require_default(require("lodash.compact"));
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
var _FileEntryts = /*#__PURE__*/ _interop_require_default(require("./FileEntry.js"));
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _object_spread(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function(key) {
_define_property(target, key, source[key]);
});
}
return target;
}
function nextEntry(next, iterator, callback) {
var extract = iterator.extract;
if (!extract) return callback(new Error('Extract missing'));
var nextCallback = (0, _calloncefn.default)(function(err, entry, next) {
extract.removeListener('entry', onEntry);
extract.removeListener('error', onError);
extract.removeListener('finish', onEnd);
// keep processing
if (entry) iterator.push(nextEntry.bind(null, next));
err ? callback(err) : callback(null, entry ? {
done: false,
value: entry
} : {
done: true,
value: null
});
});
var onError = callback;
var onEnd = callback.bind(null, null);
var onEntry = function onEntry(header, stream, next) {
if (iterator.isDone()) return nextCallback(null, null, next);
var attributes = _object_spread({}, header);
attributes.path = (0, _lodashcompact.default)(header.name.split(_path.default.sep)).join(_path.default.sep);
attributes.mtime = new Date(attributes.mtime);
switch(attributes.type){
case 'directory':
stream.resume(); // drain stream
return nextCallback(null, new _extractbaseiterator.DirectoryEntry(attributes), next);
case 'symlink':
stream.resume(); // drain stream
attributes.linkpath = header.linkname;
return nextCallback(null, new _extractbaseiterator.SymbolicLinkEntry(attributes), next);
case 'link':
stream.resume(); // drain stream
attributes.linkpath = header.linkname;
return nextCallback(null, new _extractbaseiterator.LinkEntry(attributes), next);
case 'file':
return nextCallback(null, new _FileEntryts.default(attributes, stream, iterator.lock), next);
}
stream.resume(); // drain stream
return nextCallback(new Error("Unrecognized entry type: ".concat(attributes.type)), null, next);
};
extract.on('entry', onEntry);
extract.on('error', onError);
extract.on('finish', onEnd);
if (next) next();
}
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }