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
1.4.021 Dec 202520
1.3.120 Dec 202520
1.3.020 Dec 202521
1.2.020 Dec 202521
1.1.219 Dec 202521
1.1.118 Dec 202521
1.1.018 Dec 202522
1.0.217 Dec 202522
1.0.117 Dec 202522
1.0.016 Dec 202522
0.3.016 Dec 202522
0.2.1315 Dec 202523
0.2.1212 Dec 202522
0.2.1112 Dec 202522
0.2.1012 Dec 202522
0.2.96 Dec 202522
0.2.84 Dec 202522
0.2.74 Dec 202522
0.2.64 Dec 202522
0.2.54 Dec 202522

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