UNPKG

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
"use strict"; 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; }