zip-iterator
Version:
Extract contents from zip archive type using an iterator API using streams or paths. Use stream interface and pipe transforms to add decompression algorithms
64 lines • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return nextEntry;
}
});
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
var _calloncefn = /*#__PURE__*/ _interop_require_default(require("call-once-fn"));
var _lodashcompact = /*#__PURE__*/ _interop_require_default(require("lodash.compact"));
var _extractbaseiterator = require("extract-base-iterator");
var _FileEntry = /*#__PURE__*/ _interop_require_default(require("./FileEntry.cjs"));
var _parseExternalFileAttributes = /*#__PURE__*/ _interop_require_default(require("./lib/parseExternalFileAttributes.cjs"));
var _streamToString = /*#__PURE__*/ _interop_require_default(require("./lib/streamToString.cjs"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function nextEntry(iterator, callback) {
if (!iterator.iterator) return callback(new Error('iterator missing'));
var entry = null;
while(!entry){
try {
entry = iterator.iterator.next();
} catch (err) {
if (err === 'stop-iteration') break;
if (err === 'skip-iteration') continue;
throw err;
}
}
var _callback = callback;
callback = (0, _calloncefn.default)(function callback(err, entry) {
// keep processing
if (entry) iterator.stack.push(nextEntry);
err ? _callback(err) : _callback(null, entry);
});
// done: use null to indicate iteration is complete
if (iterator.done || !entry) return callback(null, null);
var localHeader = entry.localHeader;
var centralHeader = entry.centralHeader;
var attributes = (0, _parseExternalFileAttributes.default)(centralHeader.external_file_attributes, centralHeader.version >> 8);
attributes.path = (0, _lodashcompact.default)(localHeader.file_name.split(_path.default.sep)).join(_path.default.sep);
attributes.mtime = entry.lastModified();
switch(attributes.type){
case 'directory':
return callback(null, new _extractbaseiterator.DirectoryEntry(attributes));
case 'symlink':
case 'link':
return (0, _streamToString.default)(entry.getStream(), function(err, string) {
if (err) return callback(err);
attributes.linkpath = string;
var Link = attributes.type === 'symlink' ? _extractbaseiterator.SymbolicLinkEntry : _extractbaseiterator.LinkEntry;
return callback(null, new Link(attributes));
});
case 'file':
return callback(null, new _FileEntry.default(attributes, entry, iterator.lock));
}
return callback(new Error("Unrecognized entry type: ".concat(attributes.type)));
}
/* 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; }