Catalog npm
Back to packageRELEASE DETAILS

0.1.0

npm

7z-iterator

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

7z7ziparchiveasynciteratordecompressextractiteratorlzmalzma2seven-zipstreamsymbol.asynciterator
Published1 Dec 2025
Direct dependencies20
Transitive dependenciesNot calculated

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.

Declared dependencies 20

Native requirements
20 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
pako
Environment
{
  "local_name": "pako",
  "alias": false,
  "peer_metadata": null
}
^1.0.11runtime
on-one
Environment
{
  "local_name": "on-one",
  "alias": false,
  "peer_metadata": null
}
*runtime
os-shim
Environment
{
  "local_name": "os-shim",
  "alias": false,
  "peer_metadata": null
}
*runtime
rimraf2
Environment
{
  "local_name": "rimraf2",
  "alias": false,
  "peer_metadata": null
}
*runtime
queue-cb
Environment
{
  "local_name": "queue-cb",
  "alias": false,
  "peer_metadata": null
}
*runtime
seek-bzip
Environment
{
  "local_name": "seek-bzip",
  "alias": false,
  "peer_metadata": null
}
^2.0.0runtime
short-hash
Environment
{
  "local_name": "short-hash",
  "alias": false,
  "peer_metadata": null
}
*runtime
lzma-purejs
Environment
{
  "local_name": "lzma-purejs",
  "alias": false,
  "peer_metadata": null
}
^0.9.3runtime
temp-suffix
Environment
{
  "local_name": "temp-suffix",
  "alias": false,
  "peer_metadata": null
}
*runtime
call-once-fn
Environment
{
  "local_name": "call-once-fn",
  "alias": false,
  "peer_metadata": null
}
*runtime
lodash.compact
Environment
{
  "local_name": "lodash.compact",
  "alias": false,
  "peer_metadata": null
}
*runtime
mkdirp-classic
Environment
{
  "local_name": "mkdirp-classic",
  "alias": false,
  "peer_metadata": null
}
*runtime
readable-stream
Environment
{
  "local_name": "readable-stream",
  "alias": false,
  "peer_metadata": null
}
^2.3.7runtime
extract-base-iterator
Environment
{
  "local_name": "extract-base-iterator",
  "alias": false,
  "peer_metadata": null
}
*runtime
get-remote
Environment
{
  "local_name": "get-remote",
  "alias": false,
  "peer_metadata": null
}
^2.2.1development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
*development
fs-iterator
Environment
{
  "local_name": "fs-iterator",
  "alias": false,
  "peer_metadata": null
}
*development
@types/mocha
Environment
{
  "local_name": "@types/mocha",
  "alias": false,
  "peer_metadata": null
}
*development
fs-stats-spys
Environment
{
  "local_name": "fs-stats-spys",
  "alias": false,
  "peer_metadata": null
}
*development
pinkie-promise
Environment
{
  "local_name": "pinkie-promise",
  "alias": false,
  "peer_metadata": null
}
*development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "5e83b5997c747ba1af377c09a19e11cedfce94dc",
  "tarball": "https://registry.npmjs.org/7z-iterator/-/7z-iterator-0.1.0.tgz",
  "fileCount": 166,
  "integrity": "sha512-h3VsR9eKOHBmPiS00zOZ0ig0xo1Dw4bgLFdRiZHvW20/97xvWT6sBN1VQZGFcB21SL33pHhY4jHyt5u6Y3YGqw==",
  "signatures": [
    {
      "sig": "MEUCIDVFWtg3BlQnkivrocr2TWU/+Ei8Yjz3EcPHtxxpujStAiEAtA4kZJuv4ShSwM70m+wKiM8tXnk4gj2rMX3+T3eG5ic=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 591960
}

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_version:76a463c5e058cc4841fbc17488674eae0914f503d280e4f706feef76ee2d9ff6

Other collected versions

2.2.1312 Oct2.2.1212 Sept2.2.1124 Aug2.2.1023 Aug2.2.926 May2.2.826 MayView all collected versions →