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
0.2.44 Dec 202522
0.2.34 Dec 202522
0.2.23 Dec 202522
0.2.13 Dec 202524
0.2.02 Dec 202524
0.1.102 Dec 202524
0.1.92 Dec 202524
0.1.82 Dec 202524
0.1.72 Dec 202525
0.1.62 Dec 202527
0.1.51 Dec 202526
0.1.41 Dec 202526
0.1.31 Dec 202522
0.1.21 Dec 202521
0.1.11 Dec 202521
0.1.01 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