Catalog npm
PACKAGE EXPLORERView in registry

7z-iterator

npm

Extract contents from 7z archives using an iterator API. Pure JavaScript, works on Node.js 0.8+

7z7ziparchiveasynciteratordecompressextractiteratorlzmalzma2seven-zipstreamsymbol.asynciterator
Versions collected56
Direct dependencies24From release 2.2.13
Last observed20 Oct, 21:14 UTC

README

Current package documentation

7z-iterator

Read entries from a 7z archive with an async iterator, promises, callbacks, or a readable stream. Sources can be archive paths or readable streams.

Install

npm install 7z-iterator

Extract an archive

const SevenZipIterator = require('7z-iterator');

async function extract(archivePath, destination) {
  const iterator = new SevenZipIterator(archivePath);
  const links = [];

  try {
    for await (const entry of iterator) {
      if (entry.type === 'link') links.unshift(entry);
      else if (entry.type === 'symlink') links.push(entry);
      else await entry.create(destination, { strip: 1 });
    }

    // Create links after their target directories and files.
    for (const entry of links) await entry.create(destination, { strip: 1 });
  } finally {
    iterator.destroy();
  }
}

extract('./archive.7z', './output').catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Callback API for older Node.js

Node.js 0.8+ can use the callback form instead of for await:

var SevenZipIterator = require('7z-iterator');
var iterator = new SevenZipIterator('./archive.7z');
var links = [];

function createLinks(index, callback) {
  if (index === links.length) return callback();
  links[index].create('./output', { strip: 1 }, function(error) {
    if (error) return callback(error);
    createLinks(index + 1, callback);
  });
}

iterator.forEach(function(entry, callback) {
  if (entry.type === 'link') { links.unshift(entry); callback(); }
  else if (entry.type === 'symlink') { links.push(entry); callback(); }
  else entry.create('./output', { strip: 1 }, callback);
}, { callbacks: true, concurrency: 1 }, function(error) {
  if (error) throw error;
  createLinks(0, function(error) {
    iterator.destroy();
    if (error) throw error;
    console.log('Extraction complete');
  });
});

entry.create(destination, options) writes a file, directory, or link. Use { force: true } to overwrite existing entries. Pass an archive password to the iterator constructor, for example new SevenZipIterator(archivePath, { password: 'secret' }). A readable stream source is buffered to a temporary file because 7z parsing needs random access.

Limitations

Node.js 0.8+ is supported, but older releases have smaller maximum Buffer sizes. LZMA1 folders must fit in one buffer; LZMA2 can stream incrementally and is preferred for large archives. On Node.js 0.8-4.x, archives larger than about 1 GB cannot be processed reliably.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 56

Collected releases
VersionPublishedDirect dependenciesOpen version
2.2.13Registry latest12 Oct 202624
2.2.1212 Sept 202624
2.2.1124 Aug 202624
2.2.1023 Aug 202624
2.2.926 May 202624
2.2.826 May 202624
2.2.722 May 202621
2.2.622 May 202621
2.2.527 Dec 202521
2.2.426 Dec 202521
2.2.326 Dec 202521
2.2.225 Dec 202521
2.2.125 Dec 202521
2.2.025 Dec 202521
2.1.124 Dec 202521
2.1.024 Dec 202520
2.0.422 Dec 202520
2.0.322 Dec 202520
2.0.222 Dec 202520
2.0.022 Dec 202520

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
kmalakoff/7z-iterator

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:14 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:f5720bd3525c206c5d1b8b14272c2e4377d5f8a6bf570ddb11fa6740b684065f