Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

7z-iterator

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

7z-iterator

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

latest
Source
npmnpm
Version
2.2.5
Version published
Weekly downloads
2.1K
-8.45%
Maintainers
1
Weekly downloads
 
Created
Source

7z-iterator

Extract contents from 7z archive type using an iterator API using streams or paths. Use stream interface and pipe transforms to add decompression algorithms.

// asyncIterator

var assert = require('assert');
var fs = require('fs');
var SevenZipIterator = require('7z-iterator');

(async function() {
  let iterator = new SevenZipIterator('/path/to/archive');

  try {
    const links = [];
    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(dest, options);
    }

    // create links after directories and files
    for (const entry of links) await entry.create(dest, options);
  } catch (err) {
    }

  iterator.destroy();
  iterator = null;
})();

(async function() {
  let iterator = new SevenZipIterator(fs.createReadStream('/path/to/archive'));

  try {
    const links = [];
    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(dest, options);
    }

    // create links after directories and files
    for (const entry of links) await entry.create(dest, options);
  } catch (err) {
    }

  iterator.destroy();
  iterator = null;
})();

// Async / Await

var assert = require('assert');
var SevenZipIterator = require('7z-iterator');

// one by one
(async function() {
  let iterator = new SevenZipIterator('/path/to/archive');

  const links = [];
  let entry = await iterator.next();
  while (entry) {
    if (entry.type === 'link') links.unshift(entry);
    else if (entry.type === 'symlink') links.push(entry);
    else await entry.create(dest, options);
    entry = await iterator.next();
  }

  // create links after directories and files
  for (entry of links) {
    await entry.create(dest, options);
  }
  iterator.destroy();
  iterator = null;
})();

// infinite concurrency
(async function() {
  let iterator = new SevenZipIterator('/path/to/archive');

  try {
    const links = [];
    await iterator.forEach(
      async function (entry) {
        if (entry.type === 'link') links.unshift(entry);
        else if (entry.type === 'symlink') links.push(entry);
        else await entry.create(dest, options);
      },
      { concurrency: Infinity }
    );

    // create links after directories and files
    for (const entry of links) await entry.create(dest, options);
  } catch (err) {
    aseert.ok(!err);
  }

  iterator.destroy();
  iterator = null;
})();

// Callbacks

var assert = require('assert');
var Queue = require('queue-cb');
var SevenZipIterator = require('7z-iterator');

var iterator = new SevenZipIterator('/path/to/archive');

// one by one
var links = [];
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(dest, options, callback);
  },
  { callbacks: true, concurrency: 1 },
  function (err) {

    // create links after directories and files
    var queue = new Queue();
    for (var index = 0; index < links.length; index++) {
      var entry = links[index];
      queue.defer(entry.create.bind(entry, dest, options));
    }
    queue.await(callback);

    iterator.destroy();
    iterator = null;
  }
);

Limitations

Node.js Version Compatibility

This library supports Node.js 0.8+ but has memory limits on older versions:

Node.js VersionMaximum Single BufferNotes
0.8 - 4.x~1073 MB (0x3fffffff)Hard limit due to kMaxLength
6.x - 7.x~1073 MBUint8Array limit
8.x - 9.x~2 GBBuffer limit
10+~2.1 GB (2^31-1)Buffer.allocUnsafe limit

LZMA1 vs LZMA2

  • LZMA2: Streams incrementally, memory efficient, works on all Node versions
  • LZMA1: Requires loading entire folder into memory before decompression. Fails on archives with folders larger than the buffer limit above.

Archive Size Limits by Node Version

Archive TypeNode 0.8-4.xNode 6+Node 8+Node 10+
Small archives (< 1GB)WorksWorksWorksWorks
LZMA2 archives (> 1GB)FailsFailsWorksWorks
LZMA1 archives (> 1GB)FailsFailsFailsFails

For large LZMA1 archives, use Node 8+ or re-archive using LZMA2 format.

Keywords

extract

FAQs

Package last updated on 27 Dec 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts