7z-iterator 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/assets/lzma-purejs/package.json +3 -3
  2. package/dist/cjs/SevenZipIterator.js +2 -4
  3. package/dist/cjs/SevenZipIterator.js.map +1 -1
  4. package/dist/cjs/compat.d.cts +1 -0
  5. package/dist/cjs/compat.d.ts +1 -0
  6. package/dist/cjs/compat.js +32 -0
  7. package/dist/cjs/compat.js.map +1 -0
  8. package/dist/cjs/sevenz/SevenZipParser.d.cts +3 -1
  9. package/dist/cjs/sevenz/SevenZipParser.d.ts +3 -1
  10. package/dist/cjs/sevenz/SevenZipParser.js +13 -5
  11. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
  12. package/dist/cjs/sevenz/codecs/Copy.d.cts +3 -1
  13. package/dist/cjs/sevenz/codecs/Copy.d.ts +3 -1
  14. package/dist/cjs/sevenz/codecs/Copy.js +15 -2
  15. package/dist/cjs/sevenz/codecs/Copy.js.map +1 -1
  16. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +2 -2
  17. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
  18. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +15 -2
  19. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  20. package/dist/cjs/sevenz/codecs/lzmaCompat.d.cts +9 -3
  21. package/dist/cjs/sevenz/codecs/lzmaCompat.d.ts +9 -3
  22. package/dist/cjs/sevenz/codecs/lzmaCompat.js +5 -15
  23. package/dist/cjs/sevenz/codecs/lzmaCompat.js.map +1 -1
  24. package/dist/esm/SevenZipIterator.js +1 -3
  25. package/dist/esm/SevenZipIterator.js.map +1 -1
  26. package/dist/esm/compat.d.ts +1 -0
  27. package/dist/esm/compat.js +16 -0
  28. package/dist/esm/compat.js.map +1 -0
  29. package/dist/esm/sevenz/SevenZipParser.d.ts +3 -1
  30. package/dist/esm/sevenz/SevenZipParser.js +9 -1
  31. package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
  32. package/dist/esm/sevenz/codecs/Copy.d.ts +3 -1
  33. package/dist/esm/sevenz/codecs/Copy.js +9 -1
  34. package/dist/esm/sevenz/codecs/Copy.js.map +1 -1
  35. package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
  36. package/dist/esm/sevenz/codecs/createBufferingDecoder.js +9 -1
  37. package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  38. package/dist/esm/sevenz/codecs/lzmaCompat.d.ts +9 -3
  39. package/dist/esm/sevenz/codecs/lzmaCompat.js +13 -17
  40. package/dist/esm/sevenz/codecs/lzmaCompat.js.map +1 -1
  41. package/package.json +3 -7
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "lzma-purejs-vendored",
3
3
  "version": "0.9.3",
4
- "type": "commonjs",
5
- "main": "index.js",
4
+ "description": "Vendored lzma-purejs with LZMA2 solid mode support",
6
5
  "license": "BSD",
7
- "description": "Vendored lzma-purejs with LZMA2 solid mode support"
6
+ "type": "commonjs",
7
+ "main": "index.js"
8
8
  }
@@ -10,12 +10,11 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _extractbaseiterator = /*#__PURE__*/ _interop_require_default(require("extract-base-iterator"));
12
12
  var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
13
- var _os = /*#__PURE__*/ _interop_require_default(require("os"));
14
- var _osshim = /*#__PURE__*/ _interop_require_default(require("os-shim"));
15
13
  var _path = /*#__PURE__*/ _interop_require_default(require("path"));
16
14
  var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
17
15
  var _shorthash = /*#__PURE__*/ _interop_require_default(require("short-hash"));
18
16
  var _tempsuffix = /*#__PURE__*/ _interop_require_default(require("temp-suffix"));
17
+ var _compatts = require("./compat.js");
19
18
  var _Lockts = /*#__PURE__*/ _interop_require_default(require("./lib/Lock.js"));
20
19
  var _streamToSourcets = /*#__PURE__*/ _interop_require_default(require("./lib/streamToSource.js"));
21
20
  var _nextEntryts = /*#__PURE__*/ _interop_require_default(require("./nextEntry.js"));
@@ -85,7 +84,6 @@ function _is_native_reflect_construct() {
85
84
  return !!result;
86
85
  })();
87
86
  }
88
- var tmpdir = _os.default.tmpdir || _osshim.default.tmpdir;
89
87
  /**
90
88
  * Iterator wrapper around SevenZipParser entries
91
89
  */ var EntryIterator = /*#__PURE__*/ function() {
@@ -149,7 +147,7 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
149
147
  // Stream input - use hybrid memory/temp-file approach
150
148
  // Store source stream in lock for cleanup if destroyed during download
151
149
  _this.lock.sourceStream = source;
152
- var tempPath = _path.default.join(tmpdir(), '7z-iterator', (0, _shorthash.default)(process.cwd()), (0, _tempsuffix.default)('tmp.7z'));
150
+ var tempPath = _path.default.join((0, _compatts.tmpdir)(), '7z-iterator', (0, _shorthash.default)(process.cwd()), (0, _tempsuffix.default)('tmp.7z'));
153
151
  queue.defer(function(cb) {
154
152
  (0, _streamToSourcets.default)(source, {
155
153
  memoryThreshold: options.memoryThreshold,
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport os from 'os';\nimport osShim from 'os-shim';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nvar tmpdir = os.tmpdir || osShim.tmpdir;\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n var queue = new Queue(1);\n var cancelled = false;\n var archiveSource: ArchiveSource | null = null;\n var setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n // Store source stream in lock for cleanup if destroyed during download\n this.lock.sourceStream = source as NodeJS.ReadableStream;\n var tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n var parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n }\n // Don't call base end here - Lock.__destroy() handles it\n this.iterator = null;\n }\n}\n"],"names":["SevenZipIterator","tmpdir","os","osShim","EntryIterator","parser","index","entries","getEntries","next","length","getParser","source","options","lock","Lock","iterator","queue","Queue","cancelled","archiveSource","setup","undefined","processing","push","setPassword","password","defer","cb","fs","stat","statErr","stats","done","open","err","fd","FileSource","size","sourceStream","tempPath","path","join","shortHash","process","cwd","tempSuffix","streamToSource","memoryThreshold","result","Error","SevenZipParser","parse","parseErr","await","remove","end","nextEntry","release","BaseIterator"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport { tmpdir } from './compat.ts';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n var queue = new Queue(1);\n var cancelled = false;\n var archiveSource: ArchiveSource | null = null;\n var setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n // Store source stream in lock for cleanup if destroyed during download\n this.lock.sourceStream = source as NodeJS.ReadableStream;\n var tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n var parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n }\n // Don't call base end here - Lock.__destroy() handles it\n this.iterator = null;\n }\n}\n"],"names":["SevenZipIterator","EntryIterator","parser","index","entries","getEntries","next","length","getParser","source","options","lock","Lock","iterator","queue","Queue","cancelled","archiveSource","setup","undefined","processing","push","setPassword","password","defer","cb","fs","stat","statErr","stats","done","open","err","fd","FileSource","size","sourceStream","tempPath","path","join","tmpdir","shortHash","process","cwd","tempSuffix","streamToSource","memoryThreshold","result","Error","SevenZipParser","parse","parseErr","await","remove","end","nextEntry","release","BaseIterator"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function tmpdir(): string;
@@ -0,0 +1 @@
1
+ export declare function tmpdir(): string;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Compatibility Layer for Node.js 0.8+
3
+ * Local to this package - contains only needed functions.
4
+ */ "use strict";
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "tmpdir", {
9
+ enumerable: true,
10
+ get: function() {
11
+ return tmpdir;
12
+ }
13
+ });
14
+ var _os = /*#__PURE__*/ _interop_require_default(require("os"));
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ /**
21
+ * os.tmpdir wrapper for Node.js 0.8+
22
+ * - Uses native os.tmpdir on Node 0.10+
23
+ * - Falls back to os-shim on Node 0.8
24
+ */ var hasTmpdir = typeof _os.default.tmpdir === 'function';
25
+ function tmpdir() {
26
+ if (hasTmpdir) {
27
+ return _os.default.tmpdir();
28
+ }
29
+ var osShim = require('os-shim');
30
+ return osShim.tmpdir();
31
+ }
32
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\nimport os from 'os';\n\n/**\n * os.tmpdir wrapper for Node.js 0.8+\n * - Uses native os.tmpdir on Node 0.10+\n * - Falls back to os-shim on Node 0.8\n */\nvar hasTmpdir = typeof os.tmpdir === 'function';\n\nexport function tmpdir(): string {\n if (hasTmpdir) {\n return os.tmpdir();\n }\n var osShim = require('os-shim');\n return osShim.tmpdir();\n}\n"],"names":["tmpdir","hasTmpdir","os","osShim","require"],"mappings":"AAAA;;;CAGC;;;;+BAUeA;;;eAAAA;;;yDATD;;;;;;AAEf;;;;CAIC,GACD,IAAIC,YAAY,OAAOC,WAAE,CAACF,MAAM,KAAK;AAE9B,SAASA;IACd,IAAIC,WAAW;QACb,OAAOC,WAAE,CAACF,MAAM;IAClB;IACA,IAAIG,SAASC,QAAQ;IACrB,OAAOD,OAAOH,MAAM;AACtB"}
@@ -1,4 +1,5 @@
1
- import { type Readable } from 'readable-stream';
1
+ import Stream from 'stream';
2
+ type Readable = Stream.Readable;
2
3
  export interface SevenZipEntry {
3
4
  name: string;
4
5
  path: string;
@@ -120,3 +121,4 @@ export declare class SevenZipParser {
120
121
  */
121
122
  close(): void;
122
123
  }
124
+ export {};
@@ -1,4 +1,5 @@
1
- import { type Readable } from 'readable-stream';
1
+ import Stream from 'stream';
2
+ type Readable = Stream.Readable;
2
3
  export interface SevenZipEntry {
3
4
  name: string;
4
5
  path: string;
@@ -120,3 +121,4 @@ export declare class SevenZipParser {
120
121
  */
121
122
  close(): void;
122
123
  }
124
+ export {};
@@ -24,7 +24,7 @@ _export(exports, {
24
24
  var _extractbaseiterator = require("extract-base-iterator");
25
25
  var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
26
26
  var _onone = /*#__PURE__*/ _interop_require_default(require("on-one"));
27
- var _readablestream = require("readable-stream");
27
+ var _stream = /*#__PURE__*/ _interop_require_default(require("stream"));
28
28
  var _indexts = require("./codecs/index.js");
29
29
  var _constantsts = require("./constants.js");
30
30
  var _headersts = require("./headers.js");
@@ -39,6 +39,14 @@ function _interop_require_default(obj) {
39
39
  default: obj
40
40
  };
41
41
  }
42
+ // Use native streams when available, readable-stream only for Node 0.x
43
+ var major = +process.versions.node.split('.')[0];
44
+ var PassThrough;
45
+ if (major > 0) {
46
+ PassThrough = _stream.default.PassThrough;
47
+ } else {
48
+ PassThrough = require('readable-stream').PassThrough;
49
+ }
42
50
  var BufferSource = /*#__PURE__*/ function() {
43
51
  "use strict";
44
52
  function BufferSource(buffer) {
@@ -419,7 +427,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
419
427
  */ _proto.getEntryStream = function getEntryStream(entry) {
420
428
  if (!entry._hasStream || entry.type === 'directory') {
421
429
  // Return empty stream for directories and empty files
422
- var emptyStream = new _readablestream.PassThrough();
430
+ var emptyStream = new PassThrough();
423
431
  emptyStream.end();
424
432
  return emptyStream;
425
433
  }
@@ -452,7 +460,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
452
460
  }
453
461
  var fileSize = entry.size;
454
462
  // Create a PassThrough stream with the file data
455
- var outputStream = new _readablestream.PassThrough();
463
+ var outputStream = new PassThrough();
456
464
  // Bounds check to prevent "oob" error on older Node versions
457
465
  if (fileStart + fileSize > data.length) {
458
466
  throw (0, _constantsts.createCodedError)("File data out of bounds: offset ".concat(fileStart, " + size ").concat(fileSize, " > decompressed length ").concat(data.length), _constantsts.ErrorCode.DECOMPRESSION_FAILED);
@@ -474,7 +482,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
474
482
  var _this = this;
475
483
  if (!entry._hasStream || entry.type === 'directory') {
476
484
  // Return empty stream for directories and empty files
477
- var emptyStream = new _readablestream.PassThrough();
485
+ var emptyStream = new PassThrough();
478
486
  emptyStream.end();
479
487
  callback(null, emptyStream);
480
488
  return;
@@ -516,7 +524,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
516
524
  return callback((0, _constantsts.createCodedError)("File data out of bounds: offset ".concat(fileStart, " + size ").concat(fileSize, " > decompressed length ").concat(data.length), _constantsts.ErrorCode.DECOMPRESSION_FAILED));
517
525
  }
518
526
  // Create a PassThrough stream with the file data
519
- var outputStream = new _readablestream.PassThrough();
527
+ var outputStream = new PassThrough();
520
528
  var fileData = data.slice(fileStart, fileStart + fileSize);
521
529
  outputStream.end(fileData);
522
530
  // Track extraction and release cache when all files from this folder are done
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/SevenZipParser.ts"],"sourcesContent":["// SevenZipParser - Main 7z archive parser\n// Handles reading archive structure and providing file streams\n\nimport { allocBuffer, crc32 } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport { PassThrough, type Readable } from 'readable-stream';\nimport { decodeBcj2Multi, getCodec, getCodecName, isBcj2Codec, isCodecSupported } from './codecs/index.ts';\nimport { type CodedError, createCodedError, ErrorCode, FileAttribute, PropertyId, SIGNATURE_HEADER_SIZE } from './constants.ts';\nimport { type FileInfo, parseEncodedHeader, parseHeaderContent, parseSignatureHeader, type SignatureHeader, type StreamsInfo } from './headers.ts';\nimport { readNumber } from './NumberCodec.ts';\n\n// Callback type for async operations\ntype DecompressCallback = (err: Error | null, data?: Buffer) => void;\n\n// Entry type for iteration\nexport interface SevenZipEntry {\n name: string;\n path: string;\n type: 'file' | 'directory' | 'link';\n size: number;\n mtime?: Date;\n atime?: Date;\n ctime?: Date;\n mode?: number;\n isAntiFile: boolean;\n // Internal tracking\n _folderIndex: number;\n _streamIndex: number; // Global stream index\n _streamIndexInFolder: number; // Stream index within folder (for solid archives)\n _hasStream: boolean;\n}\n\n/**\n * Archive source abstraction - allows reading from file descriptor or buffer\n */\nexport interface ArchiveSource {\n read(position: number, length: number): Buffer;\n getSize(): number;\n close(): void;\n}\n\n/**\n * Buffer-based archive source\n */\nexport class BufferSource implements ArchiveSource {\n private buffer: Buffer;\n\n constructor(buffer: Buffer) {\n this.buffer = buffer;\n }\n\n read(position: number, length: number): Buffer {\n return this.buffer.slice(position, position + length);\n }\n\n getSize(): number {\n return this.buffer.length;\n }\n\n close(): void {\n // Nothing to close for buffer\n }\n}\n\n/**\n * File descriptor based archive source\n */\nexport class FileSource implements ArchiveSource {\n private fd: number;\n private size: number;\n\n constructor(fd: number, size: number) {\n this.fd = fd;\n this.size = size;\n }\n\n read(position: number, length: number): Buffer {\n var buf = allocBuffer(length);\n var bytesRead = fs.readSync(this.fd, buf, 0, length, position);\n if (bytesRead < length) {\n return buf.slice(0, bytesRead);\n }\n return buf;\n }\n\n getSize(): number {\n return this.size;\n }\n\n close(): void {\n try {\n fs.closeSync(this.fd);\n } catch (_e) {\n // Ignore close errors\n }\n }\n}\n\n/**\n * SevenZipParser - parses 7z archives and provides entry iteration\n */\nexport class SevenZipParser {\n private source: ArchiveSource;\n private signature: SignatureHeader | null = null;\n private streamsInfo: StreamsInfo | null = null;\n private filesInfo: FileInfo[] = [];\n private entries: SevenZipEntry[] = [];\n private parsed = false;\n // Smart cache for decompressed solid blocks\n // Only caches when multiple files share a block, releases when last file extracted\n private decompressedCache: { [key: number]: Buffer } = {};\n // Track files per folder and how many have been extracted\n private filesPerFolder: { [key: number]: number } = {};\n private extractedPerFolder: { [key: number]: number } = {};\n\n constructor(source: ArchiveSource) {\n this.source = source;\n }\n\n /**\n * Parse the archive structure\n * Must be called before iterating entries\n */\n parse(): void {\n if (this.parsed) return;\n\n // Read signature header\n var sigBuf = this.source.read(0, SIGNATURE_HEADER_SIZE);\n if (sigBuf.length < SIGNATURE_HEADER_SIZE) {\n throw createCodedError('Archive too small', ErrorCode.TRUNCATED_ARCHIVE);\n }\n\n this.signature = parseSignatureHeader(sigBuf);\n\n // Read encoded header\n var headerOffset = SIGNATURE_HEADER_SIZE + this.signature.nextHeaderOffset;\n var headerBuf = this.source.read(headerOffset, this.signature.nextHeaderSize);\n\n if (headerBuf.length < this.signature.nextHeaderSize) {\n throw createCodedError('Truncated header', ErrorCode.TRUNCATED_ARCHIVE);\n }\n\n // Parse encoded header (may need decompression)\n try {\n var headerResult = parseEncodedHeader(headerBuf, this.signature.nextHeaderCRC);\n this.streamsInfo = headerResult.streamsInfo || null;\n this.filesInfo = headerResult.filesInfo;\n } catch (err: unknown) {\n var codedErr = err as CodedError;\n if (codedErr && codedErr.code === ErrorCode.COMPRESSED_HEADER) {\n // Header is compressed - need to decompress first\n this.handleCompressedHeader(headerBuf);\n } else {\n throw err;\n }\n }\n\n // Build entries list\n this.buildEntries();\n this.parsed = true;\n }\n\n /**\n * Handle compressed header (kEncodedHeader)\n */\n private handleCompressedHeader(headerBuf: Buffer): void {\n // Parse the encoded header info to get decompression parameters\n var offset = 1; // Skip kEncodedHeader byte\n\n // Should have StreamsInfo for the header itself\n var propertyId = headerBuf[offset++];\n if (propertyId !== PropertyId.kMainStreamsInfo && propertyId !== PropertyId.kPackInfo) {\n throw createCodedError('Expected StreamsInfo in encoded header', ErrorCode.CORRUPT_HEADER);\n }\n\n // For now, we parse the streams info from the encoded header block\n // This tells us how to decompress the actual header\n\n // Read pack info from the encoded header structure\n var packInfoResult = this.parseEncodedHeaderStreams(headerBuf, 1);\n\n // Calculate compressed header position\n // For simple archives: header is at SIGNATURE_HEADER_SIZE + packPos\n // For BCJ2/complex archives: header may be at the END of pack data area\n // The pack data area ends at nextHeaderOffset (where encoded header starts)\n var compressedStart = SIGNATURE_HEADER_SIZE + packInfoResult.packPos;\n var compressedData = this.source.read(compressedStart, packInfoResult.packSize);\n\n // Decompress using the specified codec\n var codec = getCodec(packInfoResult.codecId);\n var decompressedHeader: Buffer | null = null;\n\n // Try decompressing from the calculated position first\n try {\n decompressedHeader = codec.decode(compressedData, packInfoResult.properties, packInfoResult.unpackSize);\n // Verify CRC if present\n if (packInfoResult.unpackCRC !== undefined) {\n var actualCRC = crc32(decompressedHeader);\n if (actualCRC !== packInfoResult.unpackCRC) {\n decompressedHeader = null; // CRC mismatch, need to search\n }\n }\n } catch {\n decompressedHeader = null; // Decompression failed, need to search\n }\n\n // If initial decompression failed, search for the correct position as a fallback\n // This handles edge cases where packPos doesn't point directly to header pack data\n if (decompressedHeader === null && this.signature) {\n var packAreaEnd = SIGNATURE_HEADER_SIZE + this.signature.nextHeaderOffset;\n var searchStart = packAreaEnd - packInfoResult.packSize;\n var searchEnd = Math.max(SIGNATURE_HEADER_SIZE, compressedStart - 100000);\n\n // Scan for LZMA data starting with 0x00 (range coder init)\n // Try each candidate and validate with CRC\n var scanChunkSize = 4096;\n searchLoop: for (var chunkStart = searchStart; chunkStart >= searchEnd; chunkStart -= scanChunkSize) {\n var chunk = this.source.read(chunkStart, scanChunkSize + packInfoResult.packSize);\n for (var i = 0; i < Math.min(chunk.length, scanChunkSize); i++) {\n if (chunk[i] === 0x00) {\n var candidateData = chunk.subarray(i, i + packInfoResult.packSize);\n if (candidateData.length === packInfoResult.packSize) {\n try {\n var candidateDecompressed = codec.decode(candidateData, packInfoResult.properties, packInfoResult.unpackSize);\n if (packInfoResult.unpackCRC !== undefined) {\n var candCRC = crc32(candidateDecompressed);\n if (candCRC === packInfoResult.unpackCRC) {\n decompressedHeader = candidateDecompressed;\n break searchLoop;\n }\n } else {\n decompressedHeader = candidateDecompressed;\n break searchLoop;\n }\n } catch {\n // Decompression failed, continue searching\n }\n }\n }\n }\n }\n }\n\n if (decompressedHeader === null) {\n throw createCodedError('Failed to decompress header - could not find valid LZMA data', ErrorCode.CORRUPT_HEADER);\n }\n\n // Now parse the decompressed header\n // It should start with kHeader\n var decompOffset = 0;\n var headerId = decompressedHeader[decompOffset++];\n if (headerId !== PropertyId.kHeader) {\n throw createCodedError('Expected kHeader in decompressed header', ErrorCode.CORRUPT_HEADER);\n }\n\n // Parse the decompressed header using shared function from headers.ts\n var result = parseHeaderContent(decompressedHeader, decompOffset);\n this.streamsInfo = result.streamsInfo || null;\n this.filesInfo = result.filesInfo;\n }\n\n /**\n * Parse streams info from encoded header block\n * This is a simplified parser for the header's own compression info\n */\n private parseEncodedHeaderStreams(\n buf: Buffer,\n offset: number\n ): {\n packPos: number;\n packSize: number;\n unpackSize: number;\n codecId: number[];\n properties?: Buffer;\n unpackCRC?: number;\n } {\n // This is a simplified parser for the encoded header's own streams info\n var packPos = 0;\n var packSize = 0;\n var unpackSize = 0;\n var codecId: number[] = [];\n var properties: Buffer | undefined;\n var unpackCRC: number | undefined;\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kPackInfo: {\n var packPosResult = readNumber(buf, offset);\n packPos = packPosResult.value;\n offset += packPosResult.bytesRead;\n\n var numPackResult = readNumber(buf, offset);\n offset += numPackResult.bytesRead;\n\n // Read until kEnd\n while (buf[offset] !== PropertyId.kEnd) {\n if (buf[offset] === PropertyId.kSize) {\n offset++;\n var sizeResult = readNumber(buf, offset);\n packSize = sizeResult.value;\n offset += sizeResult.bytesRead;\n } else {\n offset++;\n }\n }\n offset++; // Skip kEnd\n break;\n }\n\n case PropertyId.kUnpackInfo:\n // Find folder/coder info\n while (offset < buf.length && buf[offset] !== PropertyId.kEnd) {\n if (buf[offset] === PropertyId.kFolder) {\n offset++;\n var numFoldersResult = readNumber(buf, offset);\n offset += numFoldersResult.bytesRead;\n offset++; // external flag\n\n // Parse coder\n var numCodersResult = readNumber(buf, offset);\n offset += numCodersResult.bytesRead;\n\n var flags = buf[offset++];\n var idSize = flags & 0x0f;\n var hasAttributes = (flags & 0x20) !== 0;\n\n codecId = [];\n for (var i = 0; i < idSize; i++) {\n codecId.push(buf[offset++]);\n }\n\n if (hasAttributes) {\n var propsLenResult = readNumber(buf, offset);\n offset += propsLenResult.bytesRead;\n properties = buf.slice(offset, offset + propsLenResult.value);\n offset += propsLenResult.value;\n }\n } else if (buf[offset] === PropertyId.kCodersUnpackSize) {\n offset++;\n // Read unpack size - needed for LZMA decoder\n var unpackSizeResult = readNumber(buf, offset);\n unpackSize = unpackSizeResult.value;\n offset += unpackSizeResult.bytesRead;\n } else if (buf[offset] === PropertyId.kCRC) {\n offset++;\n var allDefined = buf[offset++];\n if (allDefined) {\n unpackCRC = buf.readUInt32LE(offset);\n offset += 4;\n }\n } else {\n offset++;\n }\n }\n if (buf[offset] === PropertyId.kEnd) offset++;\n break;\n }\n }\n\n return { packPos: packPos, packSize: packSize, unpackSize: unpackSize, codecId: codecId, properties: properties, unpackCRC: unpackCRC };\n }\n\n /**\n * Build the entries list from parsed file info\n */\n private buildEntries(): void {\n this.entries = [];\n\n if (!this.streamsInfo) {\n // No streams info - just create entries from file info\n for (var i = 0; i < this.filesInfo.length; i++) {\n var file = this.filesInfo[i];\n this.entries.push(this.createEntry(file, 0, 0, 0));\n }\n return;\n }\n\n // Use the properly parsed numUnpackStreamsPerFolder from the archive header\n var streamsPerFolder = this.streamsInfo.numUnpackStreamsPerFolder;\n\n // Initialize files per folder count (for smart caching)\n for (var f = 0; f < streamsPerFolder.length; f++) {\n this.filesPerFolder[f] = streamsPerFolder[f];\n this.extractedPerFolder[f] = 0;\n }\n\n // Now build entries with proper folder/stream tracking\n var streamIndex = 0;\n var folderIndex = 0;\n var streamInFolder = 0;\n var folderStreamCount = streamsPerFolder[0] || 0;\n\n for (var j = 0; j < this.filesInfo.length; j++) {\n var fileInfo = this.filesInfo[j];\n\n // Get size from unpackSizes for files with streams\n var size = 0;\n if (fileInfo.hasStream && streamIndex < this.streamsInfo.unpackSizes.length) {\n size = this.streamsInfo.unpackSizes[streamIndex];\n }\n\n var entry = this.createEntry(fileInfo, size, folderIndex, streamInFolder);\n entry._streamIndex = streamIndex;\n this.entries.push(entry);\n\n // Advance stream tracking for files with streams\n if (fileInfo.hasStream) {\n streamIndex++;\n streamInFolder++;\n\n // Check if we've exhausted streams in this folder\n if (streamInFolder >= folderStreamCount) {\n folderIndex++;\n streamInFolder = 0;\n folderStreamCount = streamsPerFolder[folderIndex] || 0;\n }\n }\n }\n }\n\n /**\n * Create an entry from file info\n */\n private createEntry(file: FileInfo, size: number, folderIndex: number, streamInFolder: number): SevenZipEntry {\n // Determine entry type\n // Note: 7z format doesn't natively support symlinks. p7zip with -snl stores\n // symlinks as regular files with the target path as content.\n var type: 'file' | 'directory' | 'link' = 'file';\n if (file.isDirectory) {\n type = 'directory';\n }\n\n // Calculate mode from Windows attributes\n var mode: number | undefined;\n if (file.attributes !== undefined) {\n // Check for Unix extension bit\n if ((file.attributes & FileAttribute.UNIX_EXTENSION) !== 0) {\n mode = (file.attributes >>> 16) & 0xffff;\n // Check for symlink (S_IFLNK = 0xA000)\n // Note: Most 7z implementations don't preserve symlink mode bits\n if ((mode & 0xf000) === 0xa000) {\n type = 'link';\n }\n } else if (file.isDirectory) {\n mode = 493; // 0o755\n } else {\n mode = 420; // 0o644\n }\n }\n\n return {\n name: getBaseName(file.name),\n path: file.name,\n type: type,\n size: size,\n mtime: file.mtime,\n atime: file.atime,\n ctime: file.ctime,\n mode: mode,\n isAntiFile: file.isAntiFile,\n _folderIndex: folderIndex,\n _streamIndex: 0, // Set by caller\n _streamIndexInFolder: streamInFolder,\n _hasStream: file.hasStream,\n };\n }\n\n /**\n * Get the list of entries\n */\n getEntries(): SevenZipEntry[] {\n if (!this.parsed) {\n this.parse();\n }\n return this.entries;\n }\n\n /**\n * Get a readable stream for an entry's content\n */\n getEntryStream(entry: SevenZipEntry): Readable {\n if (!entry._hasStream || entry.type === 'directory') {\n // Return empty stream for directories and empty files\n var emptyStream = new PassThrough();\n emptyStream.end();\n return emptyStream;\n }\n\n if (!this.streamsInfo) {\n throw createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER);\n }\n\n // Get folder info\n var folder = this.streamsInfo.folders[entry._folderIndex];\n if (!folder) {\n throw createCodedError('Invalid folder index', ErrorCode.CORRUPT_HEADER);\n }\n\n // Check codec support\n for (var i = 0; i < folder.coders.length; i++) {\n var coder = folder.coders[i];\n if (!isCodecSupported(coder.id)) {\n var codecName = getCodecName(coder.id);\n throw createCodedError(`Unsupported codec: ${codecName}`, ErrorCode.UNSUPPORTED_CODEC);\n }\n }\n\n // Get decompressed data for this folder (with smart caching)\n var folderIdx = entry._folderIndex;\n var data = this.getDecompressedFolder(folderIdx);\n\n // Calculate file offset within the decompressed block\n // For solid archives, multiple files are concatenated in the block\n var fileStart = 0;\n for (var m = 0; m < entry._streamIndexInFolder; m++) {\n // Sum sizes of all streams before this one in the folder\n var prevStreamGlobalIndex = entry._streamIndex - entry._streamIndexInFolder + m;\n fileStart += this.streamsInfo.unpackSizes[prevStreamGlobalIndex];\n }\n\n var fileSize = entry.size;\n\n // Create a PassThrough stream with the file data\n var outputStream = new PassThrough();\n\n // Bounds check to prevent \"oob\" error on older Node versions\n if (fileStart + fileSize > data.length) {\n throw createCodedError(`File data out of bounds: offset ${fileStart} + size ${fileSize} > decompressed length ${data.length}`, ErrorCode.DECOMPRESSION_FAILED);\n }\n\n var fileData = data.slice(fileStart, fileStart + fileSize);\n outputStream.end(fileData);\n\n // Track extraction and release cache when all files from this folder are done\n this.extractedPerFolder[folderIdx] = (this.extractedPerFolder[folderIdx] || 0) + 1;\n if (this.extractedPerFolder[folderIdx] >= this.filesPerFolder[folderIdx]) {\n // All files from this folder extracted, release cache\n delete this.decompressedCache[folderIdx];\n }\n\n return outputStream;\n }\n\n /**\n * Get a readable stream for an entry's content (callback-based async version)\n * Uses streaming decompression for non-blocking I/O\n */\n getEntryStreamAsync(entry: SevenZipEntry, callback: (err: Error | null, stream?: Readable) => void): void {\n if (!entry._hasStream || entry.type === 'directory') {\n // Return empty stream for directories and empty files\n var emptyStream = new PassThrough();\n emptyStream.end();\n callback(null, emptyStream);\n return;\n }\n\n if (!this.streamsInfo) {\n callback(createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER));\n return;\n }\n\n // Get folder info\n var folder = this.streamsInfo.folders[entry._folderIndex];\n if (!folder) {\n callback(createCodedError('Invalid folder index', ErrorCode.CORRUPT_HEADER));\n return;\n }\n\n // Check codec support\n for (var i = 0; i < folder.coders.length; i++) {\n var coder = folder.coders[i];\n if (!isCodecSupported(coder.id)) {\n var codecName = getCodecName(coder.id);\n callback(createCodedError(`Unsupported codec: ${codecName}`, ErrorCode.UNSUPPORTED_CODEC));\n return;\n }\n }\n\n // Get decompressed data for this folder using async method\n var folderIdx = entry._folderIndex;\n var streamsInfo = this.streamsInfo;\n\n this.getDecompressedFolderAsync(folderIdx, (err, data) => {\n if (err) return callback(err);\n if (!data) return callback(new Error('No data returned from decompression'));\n\n // Calculate file offset within the decompressed block\n var fileStart = 0;\n for (var m = 0; m < entry._streamIndexInFolder; m++) {\n var prevStreamGlobalIndex = entry._streamIndex - entry._streamIndexInFolder + m;\n fileStart += streamsInfo.unpackSizes[prevStreamGlobalIndex];\n }\n\n var fileSize = entry.size;\n\n // Bounds check\n if (fileStart + fileSize > data.length) {\n return callback(createCodedError(`File data out of bounds: offset ${fileStart} + size ${fileSize} > decompressed length ${data.length}`, ErrorCode.DECOMPRESSION_FAILED));\n }\n\n // Create a PassThrough stream with the file data\n var outputStream = new PassThrough();\n var fileData = data.slice(fileStart, fileStart + fileSize);\n outputStream.end(fileData);\n\n // Track extraction and release cache when all files from this folder are done\n this.extractedPerFolder[folderIdx] = (this.extractedPerFolder[folderIdx] || 0) + 1;\n if (this.extractedPerFolder[folderIdx] >= this.filesPerFolder[folderIdx]) {\n delete this.decompressedCache[folderIdx];\n }\n\n callback(null, outputStream);\n });\n }\n\n /**\n * Check if a folder uses BCJ2 codec\n */\n private folderHasBcj2(folder: { coders: { id: number[] }[] }): boolean {\n for (var i = 0; i < folder.coders.length; i++) {\n if (isBcj2Codec(folder.coders[i].id)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get decompressed data for a folder, with smart caching for solid archives\n * Only caches when multiple files share a block, releases when last file extracted\n */\n private getDecompressedFolder(folderIndex: number): Buffer {\n // Check cache first\n if (this.decompressedCache[folderIndex]) {\n return this.decompressedCache[folderIndex];\n }\n\n if (!this.streamsInfo) {\n throw createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER);\n }\n\n var folder = this.streamsInfo.folders[folderIndex];\n\n // Check how many files remain in this folder\n var filesInFolder = this.filesPerFolder[folderIndex] || 1;\n var extractedFromFolder = this.extractedPerFolder[folderIndex] || 0;\n var remainingFiles = filesInFolder - extractedFromFolder;\n // Only cache if more than 1 file remains (including the current one being extracted)\n var shouldCache = remainingFiles > 1;\n\n // Check if this folder uses BCJ2 (requires special multi-stream handling)\n if (this.folderHasBcj2(folder)) {\n var data = this.decompressBcj2Folder(folderIndex);\n if (shouldCache) {\n this.decompressedCache[folderIndex] = data;\n }\n return data;\n }\n\n // Calculate packed data position\n var packPos = SIGNATURE_HEADER_SIZE + this.streamsInfo.packPos;\n\n // Find which pack stream this folder uses\n var packStreamIndex = 0;\n for (var j = 0; j < folderIndex; j++) {\n packStreamIndex += this.streamsInfo.folders[j].packedStreams.length;\n }\n\n // Calculate position of this pack stream\n for (var k = 0; k < packStreamIndex; k++) {\n packPos += this.streamsInfo.packSizes[k];\n }\n\n var packSize = this.streamsInfo.packSizes[packStreamIndex];\n\n // Read packed data\n var packedData = this.source.read(packPos, packSize);\n\n // Decompress through codec chain\n var data2 = packedData;\n for (var l = 0; l < folder.coders.length; l++) {\n var coderInfo = folder.coders[l];\n var codec = getCodec(coderInfo.id);\n // Get unpack size for this coder (needed by LZMA)\n var unpackSize = folder.unpackSizes[l];\n data2 = codec.decode(data2, coderInfo.properties, unpackSize);\n }\n\n // Cache only if more files remain in this folder\n if (shouldCache) {\n this.decompressedCache[folderIndex] = data2;\n }\n\n return data2;\n }\n\n /**\n * Get decompressed data for a folder using streaming (callback-based async)\n * Uses createDecoder() streams for non-blocking decompression\n */\n private getDecompressedFolderAsync(folderIndex: number, callback: DecompressCallback): void {\n var self = this;\n\n // Check cache first\n if (this.decompressedCache[folderIndex]) {\n callback(null, this.decompressedCache[folderIndex]);\n return;\n }\n\n if (!this.streamsInfo) {\n callback(createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER));\n return;\n }\n\n var folder = this.streamsInfo.folders[folderIndex];\n\n // Check how many files remain in this folder\n var filesInFolder = this.filesPerFolder[folderIndex] || 1;\n var extractedFromFolder = this.extractedPerFolder[folderIndex] || 0;\n var remainingFiles = filesInFolder - extractedFromFolder;\n var shouldCache = remainingFiles > 1;\n\n // BCJ2 requires special handling - use sync version for now\n // TODO: Add async BCJ2 support\n if (this.folderHasBcj2(folder)) {\n try {\n var data = this.decompressBcj2Folder(folderIndex);\n if (shouldCache) {\n this.decompressedCache[folderIndex] = data;\n }\n callback(null, data);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Calculate packed data position\n var packPos = SIGNATURE_HEADER_SIZE + this.streamsInfo.packPos;\n\n // Find which pack stream this folder uses\n var packStreamIndex = 0;\n for (var j = 0; j < folderIndex; j++) {\n packStreamIndex += this.streamsInfo.folders[j].packedStreams.length;\n }\n\n // Calculate position of this pack stream\n for (var k = 0; k < packStreamIndex; k++) {\n packPos += this.streamsInfo.packSizes[k];\n }\n\n var packSize = this.streamsInfo.packSizes[packStreamIndex];\n\n // Read packed data\n var packedData = this.source.read(packPos, packSize);\n\n // Create decoder stream chain and decompress\n var coders = folder.coders;\n var unpackSizes = folder.unpackSizes;\n\n // Helper to decompress through a single codec stream\n function decompressWithStream(input: Buffer, coderIdx: number, cb: DecompressCallback): void {\n var coderInfo = coders[coderIdx];\n var codec = getCodec(coderInfo.id);\n var decoder = codec.createDecoder(coderInfo.properties, unpackSizes[coderIdx]);\n\n var chunks: Buffer[] = [];\n var errorOccurred = false;\n\n decoder.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n\n oo(decoder, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (errorOccurred) return;\n if (err) {\n errorOccurred = true;\n return cb(err);\n }\n cb(null, Buffer.concat(chunks));\n });\n\n // Write input data to decoder and signal end\n decoder.end(input);\n }\n\n // Chain decompression through all codecs\n function decompressChain(input: Buffer, idx: number): void {\n if (idx >= coders.length) {\n // All done - cache and return\n if (shouldCache) {\n self.decompressedCache[folderIndex] = input;\n }\n callback(null, input);\n return;\n }\n\n decompressWithStream(input, idx, (err, output) => {\n if (err) {\n callback(err);\n return;\n }\n decompressChain(output as Buffer, idx + 1);\n });\n }\n\n // Start the chain\n decompressChain(packedData, 0);\n }\n\n /**\n * Decompress a BCJ2 folder with multi-stream handling\n * BCJ2 uses 4 input streams: main, call, jump, range coder\n */\n private decompressBcj2Folder(folderIndex: number): Buffer {\n if (!this.streamsInfo) {\n throw createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER);\n }\n\n var folder = this.streamsInfo.folders[folderIndex];\n\n // Calculate starting pack position\n var packPos = SIGNATURE_HEADER_SIZE + this.streamsInfo.packPos;\n\n // Find which pack stream index this folder starts at\n var packStreamIndex = 0;\n for (var j = 0; j < folderIndex; j++) {\n packStreamIndex += this.streamsInfo.folders[j].packedStreams.length;\n }\n\n // Calculate position\n for (var k = 0; k < packStreamIndex; k++) {\n packPos += this.streamsInfo.packSizes[k];\n }\n\n // Read all pack streams for this folder\n var numPackStreams = folder.packedStreams.length;\n var packStreams: Buffer[] = [];\n var currentPos = packPos;\n\n for (var p = 0; p < numPackStreams; p++) {\n var size = this.streamsInfo.packSizes[packStreamIndex + p];\n packStreams.push(this.source.read(currentPos, size));\n currentPos += size;\n }\n\n // Build a map of coder outputs\n // For BCJ2, typical structure is:\n // Coder 0: LZMA2 (main stream) - 1 in, 1 out\n // Coder 1: LZMA (call stream) - 1 in, 1 out\n // Coder 2: LZMA (jump stream) - 1 in, 1 out\n // Coder 3: BCJ2 - 4 in, 1 out\n // Pack streams map to: coder inputs not bound to other coder outputs\n\n // First, decompress each non-BCJ2 coder\n var coderOutputs: { [key: number]: Buffer } = {};\n\n // Find the BCJ2 coder\n var bcj2CoderIndex = -1;\n for (var c = 0; c < folder.coders.length; c++) {\n if (isBcj2Codec(folder.coders[c].id)) {\n bcj2CoderIndex = c;\n break;\n }\n }\n\n if (bcj2CoderIndex === -1) {\n throw createCodedError('BCJ2 coder not found in folder', ErrorCode.CORRUPT_HEADER);\n }\n\n // Build input stream index -> pack stream mapping\n // folder.packedStreams tells us which input indices are unbound and their order\n var inputToPackStream: { [key: number]: number } = {};\n for (var pi = 0; pi < folder.packedStreams.length; pi++) {\n inputToPackStream[folder.packedStreams[pi]] = pi;\n }\n\n // Build output stream index -> coder mapping\n var outputToCoder: { [key: number]: number } = {};\n var totalOutputs = 0;\n for (var co = 0; co < folder.coders.length; co++) {\n var numOut = folder.coders[co].numOutStreams;\n for (var outp = 0; outp < numOut; outp++) {\n outputToCoder[totalOutputs + outp] = co;\n }\n totalOutputs += numOut;\n }\n\n // Decompress non-BCJ2 coders (LZMA, LZMA2)\n // We need to process in dependency order\n var processed: { [key: number]: boolean } = {};\n\n var processOrder = this.getCoderProcessOrder(folder, bcj2CoderIndex);\n\n for (var po = 0; po < processOrder.length; po++) {\n var coderIdx = processOrder[po];\n if (coderIdx === bcj2CoderIndex) continue;\n\n var coder = folder.coders[coderIdx];\n var codec = getCodec(coder.id);\n\n // Find input for this coder\n var coderInputStart = 0;\n for (var ci2 = 0; ci2 < coderIdx; ci2++) {\n coderInputStart += folder.coders[ci2].numInStreams;\n }\n\n // Get input data (from pack stream)\n var inputIdx = coderInputStart;\n var packStreamIdx = inputToPackStream[inputIdx];\n var inputData = packStreams[packStreamIdx];\n\n // Decompress\n var unpackSize = folder.unpackSizes[coderIdx];\n var outputData = codec.decode(inputData, coder.properties, unpackSize);\n\n // Store in coder outputs\n var coderOutputStart = 0;\n for (var co2 = 0; co2 < coderIdx; co2++) {\n coderOutputStart += folder.coders[co2].numOutStreams;\n }\n coderOutputs[coderOutputStart] = outputData;\n processed[coderIdx] = true;\n }\n\n // Now process BCJ2\n // BCJ2 has 4 inputs, need to map them correctly\n // Standard order: main(LZMA2 output), call(LZMA output), jump(LZMA output), range(raw pack)\n var bcj2InputStart = 0;\n for (var ci3 = 0; ci3 < bcj2CoderIndex; ci3++) {\n bcj2InputStart += folder.coders[ci3].numInStreams;\n }\n\n var bcj2Inputs: Buffer[] = [];\n for (var bi = 0; bi < 4; bi++) {\n var globalIdx = bcj2InputStart + bi;\n\n // Check if this input is bound to a coder output\n var boundOutput = -1;\n for (var bp2 = 0; bp2 < folder.bindPairs.length; bp2++) {\n if (folder.bindPairs[bp2].inIndex === globalIdx) {\n boundOutput = folder.bindPairs[bp2].outIndex;\n break;\n }\n }\n\n if (boundOutput >= 0) {\n // Get from coder outputs\n bcj2Inputs.push(coderOutputs[boundOutput]);\n } else {\n // Get from pack streams\n var psIdx = inputToPackStream[globalIdx];\n bcj2Inputs.push(packStreams[psIdx]);\n }\n }\n\n // Get BCJ2 unpack size\n var bcj2OutputStart = 0;\n for (var co3 = 0; co3 < bcj2CoderIndex; co3++) {\n bcj2OutputStart += folder.coders[co3].numOutStreams;\n }\n var bcj2UnpackSize = folder.unpackSizes[bcj2OutputStart];\n\n // Memory optimization: Clear intermediate buffers to help GC\n // These are no longer needed after bcj2Inputs is built\n for (var key in coderOutputs) {\n delete coderOutputs[key];\n }\n // Clear packStreams array (allows GC to free compressed data)\n packStreams.length = 0;\n\n // Decode BCJ2\n return decodeBcj2Multi(bcj2Inputs, undefined, bcj2UnpackSize);\n }\n\n /**\n * Get processing order for coders (dependency order)\n */\n private getCoderProcessOrder(folder: { coders: { numInStreams: number; numOutStreams: number }[]; bindPairs: { inIndex: number; outIndex: number }[] }, excludeIdx: number): number[] {\n var order: number[] = [];\n var processed: { [key: number]: boolean } = {};\n\n // Simple approach: process coders that don't depend on unprocessed outputs\n var changed = true;\n while (changed) {\n changed = false;\n for (var c = 0; c < folder.coders.length; c++) {\n if (processed[c] || c === excludeIdx) continue;\n\n // Check if all inputs are satisfied\n var inputStart = 0;\n for (var i = 0; i < c; i++) {\n inputStart += folder.coders[i].numInStreams;\n }\n\n var canProcess = true;\n for (var inp = 0; inp < folder.coders[c].numInStreams; inp++) {\n var globalIdx = inputStart + inp;\n // Check if bound to an unprocessed coder\n for (var bp = 0; bp < folder.bindPairs.length; bp++) {\n if (folder.bindPairs[bp].inIndex === globalIdx) {\n // Find which coder produces this output\n var outIdx = folder.bindPairs[bp].outIndex;\n var outStart = 0;\n for (var oc = 0; oc < folder.coders.length; oc++) {\n var numOut = folder.coders[oc].numOutStreams;\n if (outIdx < outStart + numOut) {\n if (!processed[oc] && oc !== excludeIdx) {\n canProcess = false;\n }\n break;\n }\n outStart += numOut;\n }\n }\n }\n }\n\n if (canProcess) {\n order.push(c);\n processed[c] = true;\n changed = true;\n }\n }\n }\n\n return order;\n }\n\n /**\n * Close the parser and release resources\n */\n close(): void {\n if (this.source) {\n this.source.close();\n }\n }\n}\n\n/**\n * Get base name from a path\n */\nfunction getBaseName(path: string): string {\n var lastSlash = path.lastIndexOf('/');\n var lastBackslash = path.lastIndexOf('\\\\');\n var lastSep = Math.max(lastSlash, lastBackslash);\n return lastSep >= 0 ? path.slice(lastSep + 1) : path;\n}\n"],"names":["BufferSource","FileSource","SevenZipParser","buffer","read","position","length","slice","getSize","close","fd","size","buf","allocBuffer","bytesRead","fs","readSync","closeSync","_e","source","signature","streamsInfo","filesInfo","entries","parsed","decompressedCache","filesPerFolder","extractedPerFolder","parse","sigBuf","SIGNATURE_HEADER_SIZE","createCodedError","ErrorCode","TRUNCATED_ARCHIVE","parseSignatureHeader","headerOffset","nextHeaderOffset","headerBuf","nextHeaderSize","headerResult","parseEncodedHeader","nextHeaderCRC","err","codedErr","code","COMPRESSED_HEADER","handleCompressedHeader","buildEntries","offset","propertyId","PropertyId","kMainStreamsInfo","kPackInfo","CORRUPT_HEADER","packInfoResult","parseEncodedHeaderStreams","compressedStart","packPos","compressedData","packSize","codec","getCodec","codecId","decompressedHeader","decode","properties","unpackSize","unpackCRC","undefined","actualCRC","crc32","packAreaEnd","searchStart","searchEnd","Math","max","scanChunkSize","searchLoop","chunkStart","chunk","i","min","candidateData","subarray","candidateDecompressed","candCRC","decompOffset","headerId","kHeader","result","parseHeaderContent","kEnd","packPosResult","readNumber","value","numPackResult","kSize","sizeResult","kUnpackInfo","kFolder","numFoldersResult","numCodersResult","flags","idSize","hasAttributes","push","propsLenResult","kCodersUnpackSize","unpackSizeResult","kCRC","allDefined","readUInt32LE","file","createEntry","streamsPerFolder","numUnpackStreamsPerFolder","f","streamIndex","folderIndex","streamInFolder","folderStreamCount","j","fileInfo","hasStream","unpackSizes","entry","_streamIndex","type","isDirectory","mode","attributes","FileAttribute","UNIX_EXTENSION","name","getBaseName","path","mtime","atime","ctime","isAntiFile","_folderIndex","_streamIndexInFolder","_hasStream","getEntries","getEntryStream","emptyStream","PassThrough","end","folder","folders","coders","coder","isCodecSupported","id","codecName","getCodecName","UNSUPPORTED_CODEC","folderIdx","data","getDecompressedFolder","fileStart","m","prevStreamGlobalIndex","fileSize","outputStream","DECOMPRESSION_FAILED","fileData","getEntryStreamAsync","callback","getDecompressedFolderAsync","Error","folderHasBcj2","isBcj2Codec","filesInFolder","extractedFromFolder","remainingFiles","shouldCache","decompressBcj2Folder","packStreamIndex","packedStreams","k","packSizes","packedData","data2","l","coderInfo","self","decompressWithStream","input","coderIdx","cb","decoder","createDecoder","chunks","errorOccurred","on","oo","Buffer","concat","decompressChain","idx","output","numPackStreams","packStreams","currentPos","p","coderOutputs","bcj2CoderIndex","c","inputToPackStream","pi","outputToCoder","totalOutputs","co","numOut","numOutStreams","outp","processed","processOrder","getCoderProcessOrder","po","coderInputStart","ci2","numInStreams","inputIdx","packStreamIdx","inputData","outputData","coderOutputStart","co2","bcj2InputStart","ci3","bcj2Inputs","bi","globalIdx","boundOutput","bp2","bindPairs","inIndex","outIndex","psIdx","bcj2OutputStart","co3","bcj2UnpackSize","key","decodeBcj2Multi","excludeIdx","order","changed","inputStart","canProcess","inp","bp","outIdx","outStart","oc","lastSlash","lastIndexOf","lastBackslash","lastSep"],"mappings":"AAAA,0CAA0C;AAC1C,+DAA+D;;;;;;;;;;;;QA4ClDA;eAAAA;;QAuBAC;eAAAA;;QAkCAC;eAAAA;;;mCAnGsB;yDACpB;4DACA;8BAC4B;uBAC4C;2BACwB;yBACqB;6BACzG;;;;;;;;;;;AAmCpB,IAAA,AAAMF,6BAAN;;aAAMA,aAGCG,MAAc;gCAHfH;QAIT,IAAI,CAACG,MAAM,GAAGA;;iBAJLH;IAOXI,OAAAA,IAEC,GAFDA,SAAAA,KAAKC,QAAgB,EAAEC,MAAc;QACnC,OAAO,IAAI,CAACH,MAAM,CAACI,KAAK,CAACF,UAAUA,WAAWC;IAChD;IAEAE,OAAAA,OAEC,GAFDA,SAAAA;QACE,OAAO,IAAI,CAACL,MAAM,CAACG,MAAM;IAC3B;IAEAG,OAAAA,KAEC,GAFDA,SAAAA;IACE,8BAA8B;IAChC;WAjBWT;;AAuBN,IAAA,AAAMC,2BAAN;;aAAMA,WAICS,EAAU,EAAEC,IAAY;gCAJzBV;QAKT,IAAI,CAACS,EAAE,GAAGA;QACV,IAAI,CAACC,IAAI,GAAGA;;iBANHV;IASXG,OAAAA,IAOC,GAPDA,SAAAA,KAAKC,QAAgB,EAAEC,MAAc;QACnC,IAAIM,MAAMC,IAAAA,gCAAW,EAACP;QACtB,IAAIQ,YAAYC,WAAE,CAACC,QAAQ,CAAC,IAAI,CAACN,EAAE,EAAEE,KAAK,GAAGN,QAAQD;QACrD,IAAIS,YAAYR,QAAQ;YACtB,OAAOM,IAAIL,KAAK,CAAC,GAAGO;QACtB;QACA,OAAOF;IACT;IAEAJ,OAAAA,OAEC,GAFDA,SAAAA;QACE,OAAO,IAAI,CAACG,IAAI;IAClB;IAEAF,OAAAA,KAMC,GANDA,SAAAA;QACE,IAAI;YACFM,WAAE,CAACE,SAAS,CAAC,IAAI,CAACP,EAAE;QACtB,EAAE,OAAOQ,IAAI;QACX,sBAAsB;QACxB;IACF;WA5BWjB;;AAkCN,IAAA,AAAMC,+BAAN;;aAAMA,eAcCiB,MAAqB;gCAdtBjB;aAEHkB,YAAoC;aACpCC,cAAkC;aAClCC,YAAwB,EAAE;aAC1BC,UAA2B,EAAE;aAC7BC,SAAS;QACjB,4CAA4C;QAC5C,mFAAmF;aAC3EC,oBAA+C,CAAC;QACxD,0DAA0D;aAClDC,iBAA4C,CAAC;aAC7CC,qBAAgD,CAAC;QAGvD,IAAI,CAACR,MAAM,GAAGA;;iBAfLjB;IAkBX;;;GAGC,GACD0B,OAAAA,KAqCC,GArCDA,SAAAA;QACE,IAAI,IAAI,CAACJ,MAAM,EAAE;QAEjB,wBAAwB;QACxB,IAAIK,SAAS,IAAI,CAACV,MAAM,CAACf,IAAI,CAAC,GAAG0B,kCAAqB;QACtD,IAAID,OAAOvB,MAAM,GAAGwB,kCAAqB,EAAE;YACzC,MAAMC,IAAAA,6BAAgB,EAAC,qBAAqBC,sBAAS,CAACC,iBAAiB;QACzE;QAEA,IAAI,CAACb,SAAS,GAAGc,IAAAA,+BAAoB,EAACL;QAEtC,sBAAsB;QACtB,IAAIM,eAAeL,kCAAqB,GAAG,IAAI,CAACV,SAAS,CAACgB,gBAAgB;QAC1E,IAAIC,YAAY,IAAI,CAAClB,MAAM,CAACf,IAAI,CAAC+B,cAAc,IAAI,CAACf,SAAS,CAACkB,cAAc;QAE5E,IAAID,UAAU/B,MAAM,GAAG,IAAI,CAACc,SAAS,CAACkB,cAAc,EAAE;YACpD,MAAMP,IAAAA,6BAAgB,EAAC,oBAAoBC,sBAAS,CAACC,iBAAiB;QACxE;QAEA,gDAAgD;QAChD,IAAI;YACF,IAAIM,eAAeC,IAAAA,6BAAkB,EAACH,WAAW,IAAI,CAACjB,SAAS,CAACqB,aAAa;YAC7E,IAAI,CAACpB,WAAW,GAAGkB,aAAalB,WAAW,IAAI;YAC/C,IAAI,CAACC,SAAS,GAAGiB,aAAajB,SAAS;QACzC,EAAE,OAAOoB,KAAc;YACrB,IAAIC,WAAWD;YACf,IAAIC,YAAYA,SAASC,IAAI,KAAKZ,sBAAS,CAACa,iBAAiB,EAAE;gBAC7D,kDAAkD;gBAClD,IAAI,CAACC,sBAAsB,CAACT;YAC9B,OAAO;gBACL,MAAMK;YACR;QACF;QAEA,qBAAqB;QACrB,IAAI,CAACK,YAAY;QACjB,IAAI,CAACvB,MAAM,GAAG;IAChB;IAEA;;GAEC,GACD,OAAQsB,sBA8FP,GA9FD,SAAQA,uBAAuBT,SAAiB;QAC9C,gEAAgE;QAChE,IAAIW,SAAS,GAAG,2BAA2B;QAE3C,gDAAgD;QAChD,IAAIC,aAAaZ,SAAS,CAACW,SAAS;QACpC,IAAIC,eAAeC,uBAAU,CAACC,gBAAgB,IAAIF,eAAeC,uBAAU,CAACE,SAAS,EAAE;YACrF,MAAMrB,IAAAA,6BAAgB,EAAC,0CAA0CC,sBAAS,CAACqB,cAAc;QAC3F;QAEA,mEAAmE;QACnE,oDAAoD;QAEpD,mDAAmD;QACnD,IAAIC,iBAAiB,IAAI,CAACC,yBAAyB,CAAClB,WAAW;QAE/D,uCAAuC;QACvC,oEAAoE;QACpE,wEAAwE;QACxE,4EAA4E;QAC5E,IAAImB,kBAAkB1B,kCAAqB,GAAGwB,eAAeG,OAAO;QACpE,IAAIC,iBAAiB,IAAI,CAACvC,MAAM,CAACf,IAAI,CAACoD,iBAAiBF,eAAeK,QAAQ;QAE9E,uCAAuC;QACvC,IAAIC,QAAQC,IAAAA,iBAAQ,EAACP,eAAeQ,OAAO;QAC3C,IAAIC,qBAAoC;QAExC,uDAAuD;QACvD,IAAI;YACFA,qBAAqBH,MAAMI,MAAM,CAACN,gBAAgBJ,eAAeW,UAAU,EAAEX,eAAeY,UAAU;YACtG,wBAAwB;YACxB,IAAIZ,eAAea,SAAS,KAAKC,WAAW;gBAC1C,IAAIC,YAAYC,IAAAA,0BAAK,EAACP;gBACtB,IAAIM,cAAcf,eAAea,SAAS,EAAE;oBAC1CJ,qBAAqB,MAAM,+BAA+B;gBAC5D;YACF;QACF,EAAE,UAAM;YACNA,qBAAqB,MAAM,uCAAuC;QACpE;QAEA,iFAAiF;QACjF,mFAAmF;QACnF,IAAIA,uBAAuB,QAAQ,IAAI,CAAC3C,SAAS,EAAE;YACjD,IAAImD,cAAczC,kCAAqB,GAAG,IAAI,CAACV,SAAS,CAACgB,gBAAgB;YACzE,IAAIoC,cAAcD,cAAcjB,eAAeK,QAAQ;YACvD,IAAIc,YAAYC,KAAKC,GAAG,CAAC7C,kCAAqB,EAAE0B,kBAAkB;YAElE,2DAA2D;YAC3D,2CAA2C;YAC3C,IAAIoB,gBAAgB;YACpBC,YAAY,IAAK,IAAIC,aAAaN,aAAaM,cAAcL,WAAWK,cAAcF,cAAe;gBACnG,IAAIG,QAAQ,IAAI,CAAC5D,MAAM,CAACf,IAAI,CAAC0E,YAAYF,gBAAgBtB,eAAeK,QAAQ;gBAChF,IAAK,IAAIqB,IAAI,GAAGA,IAAIN,KAAKO,GAAG,CAACF,MAAMzE,MAAM,EAAEsE,gBAAgBI,IAAK;oBAC9D,IAAID,KAAK,CAACC,EAAE,KAAK,MAAM;wBACrB,IAAIE,gBAAgBH,MAAMI,QAAQ,CAACH,GAAGA,IAAI1B,eAAeK,QAAQ;wBACjE,IAAIuB,cAAc5E,MAAM,KAAKgD,eAAeK,QAAQ,EAAE;4BACpD,IAAI;gCACF,IAAIyB,wBAAwBxB,MAAMI,MAAM,CAACkB,eAAe5B,eAAeW,UAAU,EAAEX,eAAeY,UAAU;gCAC5G,IAAIZ,eAAea,SAAS,KAAKC,WAAW;oCAC1C,IAAIiB,UAAUf,IAAAA,0BAAK,EAACc;oCACpB,IAAIC,YAAY/B,eAAea,SAAS,EAAE;wCACxCJ,qBAAqBqB;wCACrB,MAAMP;oCACR;gCACF,OAAO;oCACLd,qBAAqBqB;oCACrB,MAAMP;gCACR;4BACF,EAAE,UAAM;4BACN,2CAA2C;4BAC7C;wBACF;oBACF;gBACF;YACF;QACF;QAEA,IAAId,uBAAuB,MAAM;YAC/B,MAAMhC,IAAAA,6BAAgB,EAAC,gEAAgEC,sBAAS,CAACqB,cAAc;QACjH;QAEA,oCAAoC;QACpC,+BAA+B;QAC/B,IAAIiC,eAAe;QACnB,IAAIC,WAAWxB,kBAAkB,CAACuB,eAAe;QACjD,IAAIC,aAAarC,uBAAU,CAACsC,OAAO,EAAE;YACnC,MAAMzD,IAAAA,6BAAgB,EAAC,2CAA2CC,sBAAS,CAACqB,cAAc;QAC5F;QAEA,sEAAsE;QACtE,IAAIoC,SAASC,IAAAA,6BAAkB,EAAC3B,oBAAoBuB;QACpD,IAAI,CAACjE,WAAW,GAAGoE,OAAOpE,WAAW,IAAI;QACzC,IAAI,CAACC,SAAS,GAAGmE,OAAOnE,SAAS;IACnC;IAEA;;;GAGC,GACD,OAAQiC,yBAqGP,GArGD,SAAQA,0BACN3C,GAAW,EACXoC,MAAc;QASd,wEAAwE;QACxE,IAAIS,UAAU;QACd,IAAIE,WAAW;QACf,IAAIO,aAAa;QACjB,IAAIJ,UAAoB,EAAE;QAC1B,IAAIG;QACJ,IAAIE;QAEJ,MAAOnB,SAASpC,IAAIN,MAAM,CAAE;YAC1B,IAAI2C,aAAarC,GAAG,CAACoC,SAAS;YAE9B,IAAIC,eAAeC,uBAAU,CAACyC,IAAI,EAAE;gBAClC;YACF;YAEA,OAAQ1C;gBACN,KAAKC,uBAAU,CAACE,SAAS;oBAAE;wBACzB,IAAIwC,gBAAgBC,IAAAA,yBAAU,EAACjF,KAAKoC;wBACpCS,UAAUmC,cAAcE,KAAK;wBAC7B9C,UAAU4C,cAAc9E,SAAS;wBAEjC,IAAIiF,gBAAgBF,IAAAA,yBAAU,EAACjF,KAAKoC;wBACpCA,UAAU+C,cAAcjF,SAAS;wBAEjC,kBAAkB;wBAClB,MAAOF,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAACyC,IAAI,CAAE;4BACtC,IAAI/E,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAAC8C,KAAK,EAAE;gCACpChD;gCACA,IAAIiD,aAAaJ,IAAAA,yBAAU,EAACjF,KAAKoC;gCACjCW,WAAWsC,WAAWH,KAAK;gCAC3B9C,UAAUiD,WAAWnF,SAAS;4BAChC,OAAO;gCACLkC;4BACF;wBACF;wBACAA,UAAU,YAAY;wBACtB;oBACF;gBAEA,KAAKE,uBAAU,CAACgD,WAAW;oBACzB,yBAAyB;oBACzB,MAAOlD,SAASpC,IAAIN,MAAM,IAAIM,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAACyC,IAAI,CAAE;wBAC7D,IAAI/E,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAACiD,OAAO,EAAE;4BACtCnD;4BACA,IAAIoD,mBAAmBP,IAAAA,yBAAU,EAACjF,KAAKoC;4BACvCA,UAAUoD,iBAAiBtF,SAAS;4BACpCkC,UAAU,gBAAgB;4BAE1B,cAAc;4BACd,IAAIqD,kBAAkBR,IAAAA,yBAAU,EAACjF,KAAKoC;4BACtCA,UAAUqD,gBAAgBvF,SAAS;4BAEnC,IAAIwF,QAAQ1F,GAAG,CAACoC,SAAS;4BACzB,IAAIuD,SAASD,QAAQ;4BACrB,IAAIE,gBAAgB,AAACF,CAAAA,QAAQ,IAAG,MAAO;4BAEvCxC,UAAU,EAAE;4BACZ,IAAK,IAAIkB,IAAI,GAAGA,IAAIuB,QAAQvB,IAAK;gCAC/BlB,QAAQ2C,IAAI,CAAC7F,GAAG,CAACoC,SAAS;4BAC5B;4BAEA,IAAIwD,eAAe;gCACjB,IAAIE,iBAAiBb,IAAAA,yBAAU,EAACjF,KAAKoC;gCACrCA,UAAU0D,eAAe5F,SAAS;gCAClCmD,aAAarD,IAAIL,KAAK,CAACyC,QAAQA,SAAS0D,eAAeZ,KAAK;gCAC5D9C,UAAU0D,eAAeZ,KAAK;4BAChC;wBACF,OAAO,IAAIlF,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAACyD,iBAAiB,EAAE;4BACvD3D;4BACA,6CAA6C;4BAC7C,IAAI4D,mBAAmBf,IAAAA,yBAAU,EAACjF,KAAKoC;4BACvCkB,aAAa0C,iBAAiBd,KAAK;4BACnC9C,UAAU4D,iBAAiB9F,SAAS;wBACtC,OAAO,IAAIF,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAAC2D,IAAI,EAAE;4BAC1C7D;4BACA,IAAI8D,aAAalG,GAAG,CAACoC,SAAS;4BAC9B,IAAI8D,YAAY;gCACd3C,YAAYvD,IAAImG,YAAY,CAAC/D;gCAC7BA,UAAU;4BACZ;wBACF,OAAO;4BACLA;wBACF;oBACF;oBACA,IAAIpC,GAAG,CAACoC,OAAO,KAAKE,uBAAU,CAACyC,IAAI,EAAE3C;oBACrC;YACJ;QACF;QAEA,OAAO;YAAES,SAASA;YAASE,UAAUA;YAAUO,YAAYA;YAAYJ,SAASA;YAASG,YAAYA;YAAYE,WAAWA;QAAU;IACxI;IAEA;;GAEC,GACD,OAAQpB,YAqDP,GArDD,SAAQA;QACN,IAAI,CAACxB,OAAO,GAAG,EAAE;QAEjB,IAAI,CAAC,IAAI,CAACF,WAAW,EAAE;YACrB,uDAAuD;YACvD,IAAK,IAAI2D,IAAI,GAAGA,IAAI,IAAI,CAAC1D,SAAS,CAAChB,MAAM,EAAE0E,IAAK;gBAC9C,IAAIgC,OAAO,IAAI,CAAC1F,SAAS,CAAC0D,EAAE;gBAC5B,IAAI,CAACzD,OAAO,CAACkF,IAAI,CAAC,IAAI,CAACQ,WAAW,CAACD,MAAM,GAAG,GAAG;YACjD;YACA;QACF;QAEA,4EAA4E;QAC5E,IAAIE,mBAAmB,IAAI,CAAC7F,WAAW,CAAC8F,yBAAyB;QAEjE,wDAAwD;QACxD,IAAK,IAAIC,IAAI,GAAGA,IAAIF,iBAAiB5G,MAAM,EAAE8G,IAAK;YAChD,IAAI,CAAC1F,cAAc,CAAC0F,EAAE,GAAGF,gBAAgB,CAACE,EAAE;YAC5C,IAAI,CAACzF,kBAAkB,CAACyF,EAAE,GAAG;QAC/B;QAEA,uDAAuD;QACvD,IAAIC,cAAc;QAClB,IAAIC,cAAc;QAClB,IAAIC,iBAAiB;QACrB,IAAIC,oBAAoBN,gBAAgB,CAAC,EAAE,IAAI;QAE/C,IAAK,IAAIO,IAAI,GAAGA,IAAI,IAAI,CAACnG,SAAS,CAAChB,MAAM,EAAEmH,IAAK;YAC9C,IAAIC,WAAW,IAAI,CAACpG,SAAS,CAACmG,EAAE;YAEhC,mDAAmD;YACnD,IAAI9G,OAAO;YACX,IAAI+G,SAASC,SAAS,IAAIN,cAAc,IAAI,CAAChG,WAAW,CAACuG,WAAW,CAACtH,MAAM,EAAE;gBAC3EK,OAAO,IAAI,CAACU,WAAW,CAACuG,WAAW,CAACP,YAAY;YAClD;YAEA,IAAIQ,QAAQ,IAAI,CAACZ,WAAW,CAACS,UAAU/G,MAAM2G,aAAaC;YAC1DM,MAAMC,YAAY,GAAGT;YACrB,IAAI,CAAC9F,OAAO,CAACkF,IAAI,CAACoB;YAElB,iDAAiD;YACjD,IAAIH,SAASC,SAAS,EAAE;gBACtBN;gBACAE;gBAEA,kDAAkD;gBAClD,IAAIA,kBAAkBC,mBAAmB;oBACvCF;oBACAC,iBAAiB;oBACjBC,oBAAoBN,gBAAgB,CAACI,YAAY,IAAI;gBACvD;YACF;QACF;IACF;IAEA;;GAEC,GACD,OAAQL,WA0CP,GA1CD,SAAQA,YAAYD,IAAc,EAAErG,IAAY,EAAE2G,WAAmB,EAAEC,cAAsB;QAC3F,uBAAuB;QACvB,4EAA4E;QAC5E,6DAA6D;QAC7D,IAAIQ,OAAsC;QAC1C,IAAIf,KAAKgB,WAAW,EAAE;YACpBD,OAAO;QACT;QAEA,yCAAyC;QACzC,IAAIE;QACJ,IAAIjB,KAAKkB,UAAU,KAAK9D,WAAW;YACjC,+BAA+B;YAC/B,IAAI,AAAC4C,CAAAA,KAAKkB,UAAU,GAAGC,0BAAa,CAACC,cAAc,AAAD,MAAO,GAAG;gBAC1DH,OAAO,AAACjB,KAAKkB,UAAU,KAAK,KAAM;gBAClC,uCAAuC;gBACvC,iEAAiE;gBACjE,IAAI,AAACD,CAAAA,OAAO,MAAK,MAAO,QAAQ;oBAC9BF,OAAO;gBACT;YACF,OAAO,IAAIf,KAAKgB,WAAW,EAAE;gBAC3BC,OAAO,KAAK,QAAQ;YACtB,OAAO;gBACLA,OAAO,KAAK,QAAQ;YACtB;QACF;QAEA,OAAO;YACLI,MAAMC,YAAYtB,KAAKqB,IAAI;YAC3BE,MAAMvB,KAAKqB,IAAI;YACfN,MAAMA;YACNpH,MAAMA;YACN6H,OAAOxB,KAAKwB,KAAK;YACjBC,OAAOzB,KAAKyB,KAAK;YACjBC,OAAO1B,KAAK0B,KAAK;YACjBT,MAAMA;YACNU,YAAY3B,KAAK2B,UAAU;YAC3BC,cAActB;YACdQ,cAAc;YACde,sBAAsBtB;YACtBuB,YAAY9B,KAAKW,SAAS;QAC5B;IACF;IAEA;;GAEC,GACDoB,OAAAA,UAKC,GALDA,SAAAA;QACE,IAAI,CAAC,IAAI,CAACvH,MAAM,EAAE;YAChB,IAAI,CAACI,KAAK;QACZ;QACA,OAAO,IAAI,CAACL,OAAO;IACrB;IAEA;;GAEC,GACDyH,OAAAA,cA6DC,GA7DDA,SAAAA,eAAenB,KAAoB;QACjC,IAAI,CAACA,MAAMiB,UAAU,IAAIjB,MAAME,IAAI,KAAK,aAAa;YACnD,sDAAsD;YACtD,IAAIkB,cAAc,IAAIC,2BAAW;YACjCD,YAAYE,GAAG;YACf,OAAOF;QACT;QAEA,IAAI,CAAC,IAAI,CAAC5H,WAAW,EAAE;YACrB,MAAMU,IAAAA,6BAAgB,EAAC,6BAA6BC,sBAAS,CAACqB,cAAc;QAC9E;QAEA,kBAAkB;QAClB,IAAI+F,SAAS,IAAI,CAAC/H,WAAW,CAACgI,OAAO,CAACxB,MAAMe,YAAY,CAAC;QACzD,IAAI,CAACQ,QAAQ;YACX,MAAMrH,IAAAA,6BAAgB,EAAC,wBAAwBC,sBAAS,CAACqB,cAAc;QACzE;QAEA,sBAAsB;QACtB,IAAK,IAAI2B,IAAI,GAAGA,IAAIoE,OAAOE,MAAM,CAAChJ,MAAM,EAAE0E,IAAK;YAC7C,IAAIuE,QAAQH,OAAOE,MAAM,CAACtE,EAAE;YAC5B,IAAI,CAACwE,IAAAA,yBAAgB,EAACD,MAAME,EAAE,GAAG;gBAC/B,IAAIC,YAAYC,IAAAA,qBAAY,EAACJ,MAAME,EAAE;gBACrC,MAAM1H,IAAAA,6BAAgB,EAAC,AAAC,sBAA+B,OAAV2H,YAAa1H,sBAAS,CAAC4H,iBAAiB;YACvF;QACF;QAEA,6DAA6D;QAC7D,IAAIC,YAAYhC,MAAMe,YAAY;QAClC,IAAIkB,OAAO,IAAI,CAACC,qBAAqB,CAACF;QAEtC,sDAAsD;QACtD,mEAAmE;QACnE,IAAIG,YAAY;QAChB,IAAK,IAAIC,IAAI,GAAGA,IAAIpC,MAAMgB,oBAAoB,EAAEoB,IAAK;YACnD,yDAAyD;YACzD,IAAIC,wBAAwBrC,MAAMC,YAAY,GAAGD,MAAMgB,oBAAoB,GAAGoB;YAC9ED,aAAa,IAAI,CAAC3I,WAAW,CAACuG,WAAW,CAACsC,sBAAsB;QAClE;QAEA,IAAIC,WAAWtC,MAAMlH,IAAI;QAEzB,iDAAiD;QACjD,IAAIyJ,eAAe,IAAIlB,2BAAW;QAElC,6DAA6D;QAC7D,IAAIc,YAAYG,WAAWL,KAAKxJ,MAAM,EAAE;YACtC,MAAMyB,IAAAA,6BAAgB,EAAC,AAAC,mCAAsDoI,OAApBH,WAAU,YAA4CF,OAAlCK,UAAS,2BAAqC,OAAZL,KAAKxJ,MAAM,GAAI0B,sBAAS,CAACqI,oBAAoB;QAC/J;QAEA,IAAIC,WAAWR,KAAKvJ,KAAK,CAACyJ,WAAWA,YAAYG;QACjDC,aAAajB,GAAG,CAACmB;QAEjB,8EAA8E;QAC9E,IAAI,CAAC3I,kBAAkB,CAACkI,UAAU,GAAG,AAAC,CAAA,IAAI,CAAClI,kBAAkB,CAACkI,UAAU,IAAI,CAAA,IAAK;QACjF,IAAI,IAAI,CAAClI,kBAAkB,CAACkI,UAAU,IAAI,IAAI,CAACnI,cAAc,CAACmI,UAAU,EAAE;YACxE,sDAAsD;YACtD,OAAO,IAAI,CAACpI,iBAAiB,CAACoI,UAAU;QAC1C;QAEA,OAAOO;IACT;IAEA;;;GAGC,GACDG,OAAAA,mBAkEC,GAlEDA,SAAAA,oBAAoB1C,KAAoB,EAAE2C,QAAwD;;QAChG,IAAI,CAAC3C,MAAMiB,UAAU,IAAIjB,MAAME,IAAI,KAAK,aAAa;YACnD,sDAAsD;YACtD,IAAIkB,cAAc,IAAIC,2BAAW;YACjCD,YAAYE,GAAG;YACfqB,SAAS,MAAMvB;YACf;QACF;QAEA,IAAI,CAAC,IAAI,CAAC5H,WAAW,EAAE;YACrBmJ,SAASzI,IAAAA,6BAAgB,EAAC,6BAA6BC,sBAAS,CAACqB,cAAc;YAC/E;QACF;QAEA,kBAAkB;QAClB,IAAI+F,SAAS,IAAI,CAAC/H,WAAW,CAACgI,OAAO,CAACxB,MAAMe,YAAY,CAAC;QACzD,IAAI,CAACQ,QAAQ;YACXoB,SAASzI,IAAAA,6BAAgB,EAAC,wBAAwBC,sBAAS,CAACqB,cAAc;YAC1E;QACF;QAEA,sBAAsB;QACtB,IAAK,IAAI2B,IAAI,GAAGA,IAAIoE,OAAOE,MAAM,CAAChJ,MAAM,EAAE0E,IAAK;YAC7C,IAAIuE,QAAQH,OAAOE,MAAM,CAACtE,EAAE;YAC5B,IAAI,CAACwE,IAAAA,yBAAgB,EAACD,MAAME,EAAE,GAAG;gBAC/B,IAAIC,YAAYC,IAAAA,qBAAY,EAACJ,MAAME,EAAE;gBACrCe,SAASzI,IAAAA,6BAAgB,EAAC,AAAC,sBAA+B,OAAV2H,YAAa1H,sBAAS,CAAC4H,iBAAiB;gBACxF;YACF;QACF;QAEA,2DAA2D;QAC3D,IAAIC,YAAYhC,MAAMe,YAAY;QAClC,IAAIvH,cAAc,IAAI,CAACA,WAAW;QAElC,IAAI,CAACoJ,0BAA0B,CAACZ,WAAW,SAACnH,KAAKoH;YAC/C,IAAIpH,KAAK,OAAO8H,SAAS9H;YACzB,IAAI,CAACoH,MAAM,OAAOU,SAAS,IAAIE,MAAM;YAErC,sDAAsD;YACtD,IAAIV,YAAY;YAChB,IAAK,IAAIC,IAAI,GAAGA,IAAIpC,MAAMgB,oBAAoB,EAAEoB,IAAK;gBACnD,IAAIC,wBAAwBrC,MAAMC,YAAY,GAAGD,MAAMgB,oBAAoB,GAAGoB;gBAC9ED,aAAa3I,YAAYuG,WAAW,CAACsC,sBAAsB;YAC7D;YAEA,IAAIC,WAAWtC,MAAMlH,IAAI;YAEzB,eAAe;YACf,IAAIqJ,YAAYG,WAAWL,KAAKxJ,MAAM,EAAE;gBACtC,OAAOkK,SAASzI,IAAAA,6BAAgB,EAAC,AAAC,mCAAsDoI,OAApBH,WAAU,YAA4CF,OAAlCK,UAAS,2BAAqC,OAAZL,KAAKxJ,MAAM,GAAI0B,sBAAS,CAACqI,oBAAoB;YACzK;YAEA,iDAAiD;YACjD,IAAID,eAAe,IAAIlB,2BAAW;YAClC,IAAIoB,WAAWR,KAAKvJ,KAAK,CAACyJ,WAAWA,YAAYG;YACjDC,aAAajB,GAAG,CAACmB;YAEjB,8EAA8E;YAC9E,MAAK3I,kBAAkB,CAACkI,UAAU,GAAG,AAAC,CAAA,MAAKlI,kBAAkB,CAACkI,UAAU,IAAI,CAAA,IAAK;YACjF,IAAI,MAAKlI,kBAAkB,CAACkI,UAAU,IAAI,MAAKnI,cAAc,CAACmI,UAAU,EAAE;gBACxE,OAAO,MAAKpI,iBAAiB,CAACoI,UAAU;YAC1C;YAEAW,SAAS,MAAMJ;QACjB;IACF;IAEA;;GAEC,GACD,OAAQO,aAOP,GAPD,SAAQA,cAAcvB,MAAsC;QAC1D,IAAK,IAAIpE,IAAI,GAAGA,IAAIoE,OAAOE,MAAM,CAAChJ,MAAM,EAAE0E,IAAK;YAC7C,IAAI4F,IAAAA,oBAAW,EAACxB,OAAOE,MAAM,CAACtE,EAAE,CAACyE,EAAE,GAAG;gBACpC,OAAO;YACT;QACF;QACA,OAAO;IACT;IAEA;;;GAGC,GACD,OAAQM,qBA+DP,GA/DD,SAAQA,sBAAsBzC,WAAmB;QAC/C,oBAAoB;QACpB,IAAI,IAAI,CAAC7F,iBAAiB,CAAC6F,YAAY,EAAE;YACvC,OAAO,IAAI,CAAC7F,iBAAiB,CAAC6F,YAAY;QAC5C;QAEA,IAAI,CAAC,IAAI,CAACjG,WAAW,EAAE;YACrB,MAAMU,IAAAA,6BAAgB,EAAC,6BAA6BC,sBAAS,CAACqB,cAAc;QAC9E;QAEA,IAAI+F,SAAS,IAAI,CAAC/H,WAAW,CAACgI,OAAO,CAAC/B,YAAY;QAElD,6CAA6C;QAC7C,IAAIuD,gBAAgB,IAAI,CAACnJ,cAAc,CAAC4F,YAAY,IAAI;QACxD,IAAIwD,sBAAsB,IAAI,CAACnJ,kBAAkB,CAAC2F,YAAY,IAAI;QAClE,IAAIyD,iBAAiBF,gBAAgBC;QACrC,qFAAqF;QACrF,IAAIE,cAAcD,iBAAiB;QAEnC,0EAA0E;QAC1E,IAAI,IAAI,CAACJ,aAAa,CAACvB,SAAS;YAC9B,IAAIU,OAAO,IAAI,CAACmB,oBAAoB,CAAC3D;YACrC,IAAI0D,aAAa;gBACf,IAAI,CAACvJ,iBAAiB,CAAC6F,YAAY,GAAGwC;YACxC;YACA,OAAOA;QACT;QAEA,iCAAiC;QACjC,IAAIrG,UAAU3B,kCAAqB,GAAG,IAAI,CAACT,WAAW,CAACoC,OAAO;QAE9D,0CAA0C;QAC1C,IAAIyH,kBAAkB;QACtB,IAAK,IAAIzD,IAAI,GAAGA,IAAIH,aAAaG,IAAK;YACpCyD,mBAAmB,IAAI,CAAC7J,WAAW,CAACgI,OAAO,CAAC5B,EAAE,CAAC0D,aAAa,CAAC7K,MAAM;QACrE;QAEA,yCAAyC;QACzC,IAAK,IAAI8K,IAAI,GAAGA,IAAIF,iBAAiBE,IAAK;YACxC3H,WAAW,IAAI,CAACpC,WAAW,CAACgK,SAAS,CAACD,EAAE;QAC1C;QAEA,IAAIzH,WAAW,IAAI,CAACtC,WAAW,CAACgK,SAAS,CAACH,gBAAgB;QAE1D,mBAAmB;QACnB,IAAII,aAAa,IAAI,CAACnK,MAAM,CAACf,IAAI,CAACqD,SAASE;QAE3C,iCAAiC;QACjC,IAAI4H,QAAQD;QACZ,IAAK,IAAIE,IAAI,GAAGA,IAAIpC,OAAOE,MAAM,CAAChJ,MAAM,EAAEkL,IAAK;YAC7C,IAAIC,YAAYrC,OAAOE,MAAM,CAACkC,EAAE;YAChC,IAAI5H,QAAQC,IAAAA,iBAAQ,EAAC4H,UAAUhC,EAAE;YACjC,kDAAkD;YAClD,IAAIvF,aAAakF,OAAOxB,WAAW,CAAC4D,EAAE;YACtCD,QAAQ3H,MAAMI,MAAM,CAACuH,OAAOE,UAAUxH,UAAU,EAAEC;QACpD;QAEA,iDAAiD;QACjD,IAAI8G,aAAa;YACf,IAAI,CAACvJ,iBAAiB,CAAC6F,YAAY,GAAGiE;QACxC;QAEA,OAAOA;IACT;IAEA;;;GAGC,GACD,OAAQd,0BA4GP,GA5GD,SAAQA,2BAA2BnD,WAAmB,EAAEkD,QAA4B;QAClF,IAAIkB,OAAO,IAAI;QAEf,oBAAoB;QACpB,IAAI,IAAI,CAACjK,iBAAiB,CAAC6F,YAAY,EAAE;YACvCkD,SAAS,MAAM,IAAI,CAAC/I,iBAAiB,CAAC6F,YAAY;YAClD;QACF;QAEA,IAAI,CAAC,IAAI,CAACjG,WAAW,EAAE;YACrBmJ,SAASzI,IAAAA,6BAAgB,EAAC,6BAA6BC,sBAAS,CAACqB,cAAc;YAC/E;QACF;QAEA,IAAI+F,SAAS,IAAI,CAAC/H,WAAW,CAACgI,OAAO,CAAC/B,YAAY;QAElD,6CAA6C;QAC7C,IAAIuD,gBAAgB,IAAI,CAACnJ,cAAc,CAAC4F,YAAY,IAAI;QACxD,IAAIwD,sBAAsB,IAAI,CAACnJ,kBAAkB,CAAC2F,YAAY,IAAI;QAClE,IAAIyD,iBAAiBF,gBAAgBC;QACrC,IAAIE,cAAcD,iBAAiB;QAEnC,4DAA4D;QAC5D,+BAA+B;QAC/B,IAAI,IAAI,CAACJ,aAAa,CAACvB,SAAS;YAC9B,IAAI;gBACF,IAAIU,OAAO,IAAI,CAACmB,oBAAoB,CAAC3D;gBACrC,IAAI0D,aAAa;oBACf,IAAI,CAACvJ,iBAAiB,CAAC6F,YAAY,GAAGwC;gBACxC;gBACAU,SAAS,MAAMV;YACjB,EAAE,OAAOpH,KAAK;gBACZ8H,SAAS9H;YACX;YACA;QACF;QAEA,iCAAiC;QACjC,IAAIe,UAAU3B,kCAAqB,GAAG,IAAI,CAACT,WAAW,CAACoC,OAAO;QAE9D,0CAA0C;QAC1C,IAAIyH,kBAAkB;QACtB,IAAK,IAAIzD,IAAI,GAAGA,IAAIH,aAAaG,IAAK;YACpCyD,mBAAmB,IAAI,CAAC7J,WAAW,CAACgI,OAAO,CAAC5B,EAAE,CAAC0D,aAAa,CAAC7K,MAAM;QACrE;QAEA,yCAAyC;QACzC,IAAK,IAAI8K,IAAI,GAAGA,IAAIF,iBAAiBE,IAAK;YACxC3H,WAAW,IAAI,CAACpC,WAAW,CAACgK,SAAS,CAACD,EAAE;QAC1C;QAEA,IAAIzH,WAAW,IAAI,CAACtC,WAAW,CAACgK,SAAS,CAACH,gBAAgB;QAE1D,mBAAmB;QACnB,IAAII,aAAa,IAAI,CAACnK,MAAM,CAACf,IAAI,CAACqD,SAASE;QAE3C,6CAA6C;QAC7C,IAAI2F,SAASF,OAAOE,MAAM;QAC1B,IAAI1B,cAAcwB,OAAOxB,WAAW;QAEpC,qDAAqD;QACrD,SAAS+D,qBAAqBC,KAAa,EAAEC,QAAgB,EAAEC,EAAsB;YACnF,IAAIL,YAAYnC,MAAM,CAACuC,SAAS;YAChC,IAAIjI,QAAQC,IAAAA,iBAAQ,EAAC4H,UAAUhC,EAAE;YACjC,IAAIsC,UAAUnI,MAAMoI,aAAa,CAACP,UAAUxH,UAAU,EAAE2D,WAAW,CAACiE,SAAS;YAE7E,IAAII,SAAmB,EAAE;YACzB,IAAIC,gBAAgB;YAEpBH,QAAQI,EAAE,CAAC,QAAQ,SAACpH;gBAClBkH,OAAOxF,IAAI,CAAC1B;YACd;YAEAqH,IAAAA,cAAE,EAACL,SAAS;gBAAC;gBAAS;gBAAO;gBAAS;aAAS,EAAE,SAACrJ;gBAChD,IAAIwJ,eAAe;gBACnB,IAAIxJ,KAAK;oBACPwJ,gBAAgB;oBAChB,OAAOJ,GAAGpJ;gBACZ;gBACAoJ,GAAG,MAAMO,OAAOC,MAAM,CAACL;YACzB;YAEA,6CAA6C;YAC7CF,QAAQ5C,GAAG,CAACyC;QACd;QAEA,yCAAyC;QACzC,SAASW,gBAAgBX,KAAa,EAAEY,GAAW;YACjD,IAAIA,OAAOlD,OAAOhJ,MAAM,EAAE;gBACxB,8BAA8B;gBAC9B,IAAI0K,aAAa;oBACfU,KAAKjK,iBAAiB,CAAC6F,YAAY,GAAGsE;gBACxC;gBACApB,SAAS,MAAMoB;gBACf;YACF;YAEAD,qBAAqBC,OAAOY,KAAK,SAAC9J,KAAK+J;gBACrC,IAAI/J,KAAK;oBACP8H,SAAS9H;oBACT;gBACF;gBACA6J,gBAAgBE,QAAkBD,MAAM;YAC1C;QACF;QAEA,kBAAkB;QAClBD,gBAAgBjB,YAAY;IAC9B;IAEA;;;GAGC,GACD,OAAQL,oBA+JP,GA/JD,SAAQA,qBAAqB3D,WAAmB;QAC9C,IAAI,CAAC,IAAI,CAACjG,WAAW,EAAE;YACrB,MAAMU,IAAAA,6BAAgB,EAAC,6BAA6BC,sBAAS,CAACqB,cAAc;QAC9E;QAEA,IAAI+F,SAAS,IAAI,CAAC/H,WAAW,CAACgI,OAAO,CAAC/B,YAAY;QAElD,mCAAmC;QACnC,IAAI7D,UAAU3B,kCAAqB,GAAG,IAAI,CAACT,WAAW,CAACoC,OAAO;QAE9D,qDAAqD;QACrD,IAAIyH,kBAAkB;QACtB,IAAK,IAAIzD,IAAI,GAAGA,IAAIH,aAAaG,IAAK;YACpCyD,mBAAmB,IAAI,CAAC7J,WAAW,CAACgI,OAAO,CAAC5B,EAAE,CAAC0D,aAAa,CAAC7K,MAAM;QACrE;QAEA,qBAAqB;QACrB,IAAK,IAAI8K,IAAI,GAAGA,IAAIF,iBAAiBE,IAAK;YACxC3H,WAAW,IAAI,CAACpC,WAAW,CAACgK,SAAS,CAACD,EAAE;QAC1C;QAEA,wCAAwC;QACxC,IAAIsB,iBAAiBtD,OAAO+B,aAAa,CAAC7K,MAAM;QAChD,IAAIqM,cAAwB,EAAE;QAC9B,IAAIC,aAAanJ;QAEjB,IAAK,IAAIoJ,IAAI,GAAGA,IAAIH,gBAAgBG,IAAK;YACvC,IAAIlM,OAAO,IAAI,CAACU,WAAW,CAACgK,SAAS,CAACH,kBAAkB2B,EAAE;YAC1DF,YAAYlG,IAAI,CAAC,IAAI,CAACtF,MAAM,CAACf,IAAI,CAACwM,YAAYjM;YAC9CiM,cAAcjM;QAChB;QAEA,+BAA+B;QAC/B,kCAAkC;QAClC,+CAA+C;QAC/C,8CAA8C;QAC9C,8CAA8C;QAC9C,gCAAgC;QAChC,qEAAqE;QAErE,wCAAwC;QACxC,IAAImM,eAA0C,CAAC;QAE/C,sBAAsB;QACtB,IAAIC,iBAAiB,CAAC;QACtB,IAAK,IAAIC,IAAI,GAAGA,IAAI5D,OAAOE,MAAM,CAAChJ,MAAM,EAAE0M,IAAK;YAC7C,IAAIpC,IAAAA,oBAAW,EAACxB,OAAOE,MAAM,CAAC0D,EAAE,CAACvD,EAAE,GAAG;gBACpCsD,iBAAiBC;gBACjB;YACF;QACF;QAEA,IAAID,mBAAmB,CAAC,GAAG;YACzB,MAAMhL,IAAAA,6BAAgB,EAAC,kCAAkCC,sBAAS,CAACqB,cAAc;QACnF;QAEA,kDAAkD;QAClD,gFAAgF;QAChF,IAAI4J,oBAA+C,CAAC;QACpD,IAAK,IAAIC,KAAK,GAAGA,KAAK9D,OAAO+B,aAAa,CAAC7K,MAAM,EAAE4M,KAAM;YACvDD,iBAAiB,CAAC7D,OAAO+B,aAAa,CAAC+B,GAAG,CAAC,GAAGA;QAChD;QAEA,6CAA6C;QAC7C,IAAIC,gBAA2C,CAAC;QAChD,IAAIC,eAAe;QACnB,IAAK,IAAIC,KAAK,GAAGA,KAAKjE,OAAOE,MAAM,CAAChJ,MAAM,EAAE+M,KAAM;YAChD,IAAIC,SAASlE,OAAOE,MAAM,CAAC+D,GAAG,CAACE,aAAa;YAC5C,IAAK,IAAIC,OAAO,GAAGA,OAAOF,QAAQE,OAAQ;gBACxCL,aAAa,CAACC,eAAeI,KAAK,GAAGH;YACvC;YACAD,gBAAgBE;QAClB;QAEA,2CAA2C;QAC3C,yCAAyC;QACzC,IAAIG,YAAwC,CAAC;QAE7C,IAAIC,eAAe,IAAI,CAACC,oBAAoB,CAACvE,QAAQ2D;QAErD,IAAK,IAAIa,KAAK,GAAGA,KAAKF,aAAapN,MAAM,EAAEsN,KAAM;YAC/C,IAAI/B,WAAW6B,YAAY,CAACE,GAAG;YAC/B,IAAI/B,aAAakB,gBAAgB;YAEjC,IAAIxD,QAAQH,OAAOE,MAAM,CAACuC,SAAS;YACnC,IAAIjI,QAAQC,IAAAA,iBAAQ,EAAC0F,MAAME,EAAE;YAE7B,4BAA4B;YAC5B,IAAIoE,kBAAkB;YACtB,IAAK,IAAIC,MAAM,GAAGA,MAAMjC,UAAUiC,MAAO;gBACvCD,mBAAmBzE,OAAOE,MAAM,CAACwE,IAAI,CAACC,YAAY;YACpD;YAEA,oCAAoC;YACpC,IAAIC,WAAWH;YACf,IAAII,gBAAgBhB,iBAAiB,CAACe,SAAS;YAC/C,IAAIE,YAAYvB,WAAW,CAACsB,cAAc;YAE1C,aAAa;YACb,IAAI/J,aAAakF,OAAOxB,WAAW,CAACiE,SAAS;YAC7C,IAAIsC,aAAavK,MAAMI,MAAM,CAACkK,WAAW3E,MAAMtF,UAAU,EAAEC;YAE3D,yBAAyB;YACzB,IAAIkK,mBAAmB;YACvB,IAAK,IAAIC,MAAM,GAAGA,MAAMxC,UAAUwC,MAAO;gBACvCD,oBAAoBhF,OAAOE,MAAM,CAAC+E,IAAI,CAACd,aAAa;YACtD;YACAT,YAAY,CAACsB,iBAAiB,GAAGD;YACjCV,SAAS,CAAC5B,SAAS,GAAG;QACxB;QAEA,mBAAmB;QACnB,gDAAgD;QAChD,4FAA4F;QAC5F,IAAIyC,iBAAiB;QACrB,IAAK,IAAIC,MAAM,GAAGA,MAAMxB,gBAAgBwB,MAAO;YAC7CD,kBAAkBlF,OAAOE,MAAM,CAACiF,IAAI,CAACR,YAAY;QACnD;QAEA,IAAIS,aAAuB,EAAE;QAC7B,IAAK,IAAIC,KAAK,GAAGA,KAAK,GAAGA,KAAM;YAC7B,IAAIC,YAAYJ,iBAAiBG;YAEjC,iDAAiD;YACjD,IAAIE,cAAc,CAAC;YACnB,IAAK,IAAIC,MAAM,GAAGA,MAAMxF,OAAOyF,SAAS,CAACvO,MAAM,EAAEsO,MAAO;gBACtD,IAAIxF,OAAOyF,SAAS,CAACD,IAAI,CAACE,OAAO,KAAKJ,WAAW;oBAC/CC,cAAcvF,OAAOyF,SAAS,CAACD,IAAI,CAACG,QAAQ;oBAC5C;gBACF;YACF;YAEA,IAAIJ,eAAe,GAAG;gBACpB,yBAAyB;gBACzBH,WAAW/H,IAAI,CAACqG,YAAY,CAAC6B,YAAY;YAC3C,OAAO;gBACL,wBAAwB;gBACxB,IAAIK,QAAQ/B,iBAAiB,CAACyB,UAAU;gBACxCF,WAAW/H,IAAI,CAACkG,WAAW,CAACqC,MAAM;YACpC;QACF;QAEA,uBAAuB;QACvB,IAAIC,kBAAkB;QACtB,IAAK,IAAIC,MAAM,GAAGA,MAAMnC,gBAAgBmC,MAAO;YAC7CD,mBAAmB7F,OAAOE,MAAM,CAAC4F,IAAI,CAAC3B,aAAa;QACrD;QACA,IAAI4B,iBAAiB/F,OAAOxB,WAAW,CAACqH,gBAAgB;QAExD,6DAA6D;QAC7D,uDAAuD;QACvD,IAAK,IAAIG,OAAOtC,aAAc;YAC5B,OAAOA,YAAY,CAACsC,IAAI;QAC1B;QACA,8DAA8D;QAC9DzC,YAAYrM,MAAM,GAAG;QAErB,cAAc;QACd,OAAO+O,IAAAA,wBAAe,EAACb,YAAYpK,WAAW+K;IAChD;IAEA;;GAEC,GACD,OAAQxB,oBAiDP,GAjDD,SAAQA,qBAAqBvE,MAAyH,EAAEkG,UAAkB;QACxK,IAAIC,QAAkB,EAAE;QACxB,IAAI9B,YAAwC,CAAC;QAE7C,2EAA2E;QAC3E,IAAI+B,UAAU;QACd,MAAOA,QAAS;YACdA,UAAU;YACV,IAAK,IAAIxC,IAAI,GAAGA,IAAI5D,OAAOE,MAAM,CAAChJ,MAAM,EAAE0M,IAAK;gBAC7C,IAAIS,SAAS,CAACT,EAAE,IAAIA,MAAMsC,YAAY;gBAEtC,oCAAoC;gBACpC,IAAIG,aAAa;gBACjB,IAAK,IAAIzK,IAAI,GAAGA,IAAIgI,GAAGhI,IAAK;oBAC1ByK,cAAcrG,OAAOE,MAAM,CAACtE,EAAE,CAAC+I,YAAY;gBAC7C;gBAEA,IAAI2B,aAAa;gBACjB,IAAK,IAAIC,MAAM,GAAGA,MAAMvG,OAAOE,MAAM,CAAC0D,EAAE,CAACe,YAAY,EAAE4B,MAAO;oBAC5D,IAAIjB,YAAYe,aAAaE;oBAC7B,yCAAyC;oBACzC,IAAK,IAAIC,KAAK,GAAGA,KAAKxG,OAAOyF,SAAS,CAACvO,MAAM,EAAEsP,KAAM;wBACnD,IAAIxG,OAAOyF,SAAS,CAACe,GAAG,CAACd,OAAO,KAAKJ,WAAW;4BAC9C,wCAAwC;4BACxC,IAAImB,SAASzG,OAAOyF,SAAS,CAACe,GAAG,CAACb,QAAQ;4BAC1C,IAAIe,WAAW;4BACf,IAAK,IAAIC,KAAK,GAAGA,KAAK3G,OAAOE,MAAM,CAAChJ,MAAM,EAAEyP,KAAM;gCAChD,IAAIzC,SAASlE,OAAOE,MAAM,CAACyG,GAAG,CAACxC,aAAa;gCAC5C,IAAIsC,SAASC,WAAWxC,QAAQ;oCAC9B,IAAI,CAACG,SAAS,CAACsC,GAAG,IAAIA,OAAOT,YAAY;wCACvCI,aAAa;oCACf;oCACA;gCACF;gCACAI,YAAYxC;4BACd;wBACF;oBACF;gBACF;gBAEA,IAAIoC,YAAY;oBACdH,MAAM9I,IAAI,CAACuG;oBACXS,SAAS,CAACT,EAAE,GAAG;oBACfwC,UAAU;gBACZ;YACF;QACF;QAEA,OAAOD;IACT;IAEA;;GAEC,GACD9O,OAAAA,KAIC,GAJDA,SAAAA;QACE,IAAI,IAAI,CAACU,MAAM,EAAE;YACf,IAAI,CAACA,MAAM,CAACV,KAAK;QACnB;IACF;WA76BWP;;AAg7Bb;;CAEC,GACD,SAASoI,YAAYC,IAAY;IAC/B,IAAIyH,YAAYzH,KAAK0H,WAAW,CAAC;IACjC,IAAIC,gBAAgB3H,KAAK0H,WAAW,CAAC;IACrC,IAAIE,UAAUzL,KAAKC,GAAG,CAACqL,WAAWE;IAClC,OAAOC,WAAW,IAAI5H,KAAKhI,KAAK,CAAC4P,UAAU,KAAK5H;AAClD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/SevenZipParser.ts"],"sourcesContent":["// SevenZipParser - Main 7z archive parser\n// Handles reading archive structure and providing file streams\n\nimport { allocBuffer, crc32 } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport Stream from 'stream';\nimport { decodeBcj2Multi, getCodec, getCodecName, isBcj2Codec, isCodecSupported } from './codecs/index.ts';\n\n// Use native streams when available, readable-stream only for Node 0.x\nconst major = +process.versions.node.split('.')[0];\nlet PassThrough: typeof Stream.PassThrough;\nif (major > 0) {\n PassThrough = Stream.PassThrough;\n} else {\n PassThrough = require('readable-stream').PassThrough;\n}\ntype Readable = Stream.Readable;\n\nimport { type CodedError, createCodedError, ErrorCode, FileAttribute, PropertyId, SIGNATURE_HEADER_SIZE } from './constants.ts';\nimport { type FileInfo, parseEncodedHeader, parseHeaderContent, parseSignatureHeader, type SignatureHeader, type StreamsInfo } from './headers.ts';\nimport { readNumber } from './NumberCodec.ts';\n\n// Callback type for async operations\ntype DecompressCallback = (err: Error | null, data?: Buffer) => void;\n\n// Entry type for iteration\nexport interface SevenZipEntry {\n name: string;\n path: string;\n type: 'file' | 'directory' | 'link';\n size: number;\n mtime?: Date;\n atime?: Date;\n ctime?: Date;\n mode?: number;\n isAntiFile: boolean;\n // Internal tracking\n _folderIndex: number;\n _streamIndex: number; // Global stream index\n _streamIndexInFolder: number; // Stream index within folder (for solid archives)\n _hasStream: boolean;\n}\n\n/**\n * Archive source abstraction - allows reading from file descriptor or buffer\n */\nexport interface ArchiveSource {\n read(position: number, length: number): Buffer;\n getSize(): number;\n close(): void;\n}\n\n/**\n * Buffer-based archive source\n */\nexport class BufferSource implements ArchiveSource {\n private buffer: Buffer;\n\n constructor(buffer: Buffer) {\n this.buffer = buffer;\n }\n\n read(position: number, length: number): Buffer {\n return this.buffer.slice(position, position + length);\n }\n\n getSize(): number {\n return this.buffer.length;\n }\n\n close(): void {\n // Nothing to close for buffer\n }\n}\n\n/**\n * File descriptor based archive source\n */\nexport class FileSource implements ArchiveSource {\n private fd: number;\n private size: number;\n\n constructor(fd: number, size: number) {\n this.fd = fd;\n this.size = size;\n }\n\n read(position: number, length: number): Buffer {\n var buf = allocBuffer(length);\n var bytesRead = fs.readSync(this.fd, buf, 0, length, position);\n if (bytesRead < length) {\n return buf.slice(0, bytesRead);\n }\n return buf;\n }\n\n getSize(): number {\n return this.size;\n }\n\n close(): void {\n try {\n fs.closeSync(this.fd);\n } catch (_e) {\n // Ignore close errors\n }\n }\n}\n\n/**\n * SevenZipParser - parses 7z archives and provides entry iteration\n */\nexport class SevenZipParser {\n private source: ArchiveSource;\n private signature: SignatureHeader | null = null;\n private streamsInfo: StreamsInfo | null = null;\n private filesInfo: FileInfo[] = [];\n private entries: SevenZipEntry[] = [];\n private parsed = false;\n // Smart cache for decompressed solid blocks\n // Only caches when multiple files share a block, releases when last file extracted\n private decompressedCache: { [key: number]: Buffer } = {};\n // Track files per folder and how many have been extracted\n private filesPerFolder: { [key: number]: number } = {};\n private extractedPerFolder: { [key: number]: number } = {};\n\n constructor(source: ArchiveSource) {\n this.source = source;\n }\n\n /**\n * Parse the archive structure\n * Must be called before iterating entries\n */\n parse(): void {\n if (this.parsed) return;\n\n // Read signature header\n var sigBuf = this.source.read(0, SIGNATURE_HEADER_SIZE);\n if (sigBuf.length < SIGNATURE_HEADER_SIZE) {\n throw createCodedError('Archive too small', ErrorCode.TRUNCATED_ARCHIVE);\n }\n\n this.signature = parseSignatureHeader(sigBuf);\n\n // Read encoded header\n var headerOffset = SIGNATURE_HEADER_SIZE + this.signature.nextHeaderOffset;\n var headerBuf = this.source.read(headerOffset, this.signature.nextHeaderSize);\n\n if (headerBuf.length < this.signature.nextHeaderSize) {\n throw createCodedError('Truncated header', ErrorCode.TRUNCATED_ARCHIVE);\n }\n\n // Parse encoded header (may need decompression)\n try {\n var headerResult = parseEncodedHeader(headerBuf, this.signature.nextHeaderCRC);\n this.streamsInfo = headerResult.streamsInfo || null;\n this.filesInfo = headerResult.filesInfo;\n } catch (err: unknown) {\n var codedErr = err as CodedError;\n if (codedErr && codedErr.code === ErrorCode.COMPRESSED_HEADER) {\n // Header is compressed - need to decompress first\n this.handleCompressedHeader(headerBuf);\n } else {\n throw err;\n }\n }\n\n // Build entries list\n this.buildEntries();\n this.parsed = true;\n }\n\n /**\n * Handle compressed header (kEncodedHeader)\n */\n private handleCompressedHeader(headerBuf: Buffer): void {\n // Parse the encoded header info to get decompression parameters\n var offset = 1; // Skip kEncodedHeader byte\n\n // Should have StreamsInfo for the header itself\n var propertyId = headerBuf[offset++];\n if (propertyId !== PropertyId.kMainStreamsInfo && propertyId !== PropertyId.kPackInfo) {\n throw createCodedError('Expected StreamsInfo in encoded header', ErrorCode.CORRUPT_HEADER);\n }\n\n // For now, we parse the streams info from the encoded header block\n // This tells us how to decompress the actual header\n\n // Read pack info from the encoded header structure\n var packInfoResult = this.parseEncodedHeaderStreams(headerBuf, 1);\n\n // Calculate compressed header position\n // For simple archives: header is at SIGNATURE_HEADER_SIZE + packPos\n // For BCJ2/complex archives: header may be at the END of pack data area\n // The pack data area ends at nextHeaderOffset (where encoded header starts)\n var compressedStart = SIGNATURE_HEADER_SIZE + packInfoResult.packPos;\n var compressedData = this.source.read(compressedStart, packInfoResult.packSize);\n\n // Decompress using the specified codec\n var codec = getCodec(packInfoResult.codecId);\n var decompressedHeader: Buffer | null = null;\n\n // Try decompressing from the calculated position first\n try {\n decompressedHeader = codec.decode(compressedData, packInfoResult.properties, packInfoResult.unpackSize);\n // Verify CRC if present\n if (packInfoResult.unpackCRC !== undefined) {\n var actualCRC = crc32(decompressedHeader);\n if (actualCRC !== packInfoResult.unpackCRC) {\n decompressedHeader = null; // CRC mismatch, need to search\n }\n }\n } catch {\n decompressedHeader = null; // Decompression failed, need to search\n }\n\n // If initial decompression failed, search for the correct position as a fallback\n // This handles edge cases where packPos doesn't point directly to header pack data\n if (decompressedHeader === null && this.signature) {\n var packAreaEnd = SIGNATURE_HEADER_SIZE + this.signature.nextHeaderOffset;\n var searchStart = packAreaEnd - packInfoResult.packSize;\n var searchEnd = Math.max(SIGNATURE_HEADER_SIZE, compressedStart - 100000);\n\n // Scan for LZMA data starting with 0x00 (range coder init)\n // Try each candidate and validate with CRC\n var scanChunkSize = 4096;\n searchLoop: for (var chunkStart = searchStart; chunkStart >= searchEnd; chunkStart -= scanChunkSize) {\n var chunk = this.source.read(chunkStart, scanChunkSize + packInfoResult.packSize);\n for (var i = 0; i < Math.min(chunk.length, scanChunkSize); i++) {\n if (chunk[i] === 0x00) {\n var candidateData = chunk.subarray(i, i + packInfoResult.packSize);\n if (candidateData.length === packInfoResult.packSize) {\n try {\n var candidateDecompressed = codec.decode(candidateData, packInfoResult.properties, packInfoResult.unpackSize);\n if (packInfoResult.unpackCRC !== undefined) {\n var candCRC = crc32(candidateDecompressed);\n if (candCRC === packInfoResult.unpackCRC) {\n decompressedHeader = candidateDecompressed;\n break searchLoop;\n }\n } else {\n decompressedHeader = candidateDecompressed;\n break searchLoop;\n }\n } catch {\n // Decompression failed, continue searching\n }\n }\n }\n }\n }\n }\n\n if (decompressedHeader === null) {\n throw createCodedError('Failed to decompress header - could not find valid LZMA data', ErrorCode.CORRUPT_HEADER);\n }\n\n // Now parse the decompressed header\n // It should start with kHeader\n var decompOffset = 0;\n var headerId = decompressedHeader[decompOffset++];\n if (headerId !== PropertyId.kHeader) {\n throw createCodedError('Expected kHeader in decompressed header', ErrorCode.CORRUPT_HEADER);\n }\n\n // Parse the decompressed header using shared function from headers.ts\n var result = parseHeaderContent(decompressedHeader, decompOffset);\n this.streamsInfo = result.streamsInfo || null;\n this.filesInfo = result.filesInfo;\n }\n\n /**\n * Parse streams info from encoded header block\n * This is a simplified parser for the header's own compression info\n */\n private parseEncodedHeaderStreams(\n buf: Buffer,\n offset: number\n ): {\n packPos: number;\n packSize: number;\n unpackSize: number;\n codecId: number[];\n properties?: Buffer;\n unpackCRC?: number;\n } {\n // This is a simplified parser for the encoded header's own streams info\n var packPos = 0;\n var packSize = 0;\n var unpackSize = 0;\n var codecId: number[] = [];\n var properties: Buffer | undefined;\n var unpackCRC: number | undefined;\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kPackInfo: {\n var packPosResult = readNumber(buf, offset);\n packPos = packPosResult.value;\n offset += packPosResult.bytesRead;\n\n var numPackResult = readNumber(buf, offset);\n offset += numPackResult.bytesRead;\n\n // Read until kEnd\n while (buf[offset] !== PropertyId.kEnd) {\n if (buf[offset] === PropertyId.kSize) {\n offset++;\n var sizeResult = readNumber(buf, offset);\n packSize = sizeResult.value;\n offset += sizeResult.bytesRead;\n } else {\n offset++;\n }\n }\n offset++; // Skip kEnd\n break;\n }\n\n case PropertyId.kUnpackInfo:\n // Find folder/coder info\n while (offset < buf.length && buf[offset] !== PropertyId.kEnd) {\n if (buf[offset] === PropertyId.kFolder) {\n offset++;\n var numFoldersResult = readNumber(buf, offset);\n offset += numFoldersResult.bytesRead;\n offset++; // external flag\n\n // Parse coder\n var numCodersResult = readNumber(buf, offset);\n offset += numCodersResult.bytesRead;\n\n var flags = buf[offset++];\n var idSize = flags & 0x0f;\n var hasAttributes = (flags & 0x20) !== 0;\n\n codecId = [];\n for (var i = 0; i < idSize; i++) {\n codecId.push(buf[offset++]);\n }\n\n if (hasAttributes) {\n var propsLenResult = readNumber(buf, offset);\n offset += propsLenResult.bytesRead;\n properties = buf.slice(offset, offset + propsLenResult.value);\n offset += propsLenResult.value;\n }\n } else if (buf[offset] === PropertyId.kCodersUnpackSize) {\n offset++;\n // Read unpack size - needed for LZMA decoder\n var unpackSizeResult = readNumber(buf, offset);\n unpackSize = unpackSizeResult.value;\n offset += unpackSizeResult.bytesRead;\n } else if (buf[offset] === PropertyId.kCRC) {\n offset++;\n var allDefined = buf[offset++];\n if (allDefined) {\n unpackCRC = buf.readUInt32LE(offset);\n offset += 4;\n }\n } else {\n offset++;\n }\n }\n if (buf[offset] === PropertyId.kEnd) offset++;\n break;\n }\n }\n\n return { packPos: packPos, packSize: packSize, unpackSize: unpackSize, codecId: codecId, properties: properties, unpackCRC: unpackCRC };\n }\n\n /**\n * Build the entries list from parsed file info\n */\n private buildEntries(): void {\n this.entries = [];\n\n if (!this.streamsInfo) {\n // No streams info - just create entries from file info\n for (var i = 0; i < this.filesInfo.length; i++) {\n var file = this.filesInfo[i];\n this.entries.push(this.createEntry(file, 0, 0, 0));\n }\n return;\n }\n\n // Use the properly parsed numUnpackStreamsPerFolder from the archive header\n var streamsPerFolder = this.streamsInfo.numUnpackStreamsPerFolder;\n\n // Initialize files per folder count (for smart caching)\n for (var f = 0; f < streamsPerFolder.length; f++) {\n this.filesPerFolder[f] = streamsPerFolder[f];\n this.extractedPerFolder[f] = 0;\n }\n\n // Now build entries with proper folder/stream tracking\n var streamIndex = 0;\n var folderIndex = 0;\n var streamInFolder = 0;\n var folderStreamCount = streamsPerFolder[0] || 0;\n\n for (var j = 0; j < this.filesInfo.length; j++) {\n var fileInfo = this.filesInfo[j];\n\n // Get size from unpackSizes for files with streams\n var size = 0;\n if (fileInfo.hasStream && streamIndex < this.streamsInfo.unpackSizes.length) {\n size = this.streamsInfo.unpackSizes[streamIndex];\n }\n\n var entry = this.createEntry(fileInfo, size, folderIndex, streamInFolder);\n entry._streamIndex = streamIndex;\n this.entries.push(entry);\n\n // Advance stream tracking for files with streams\n if (fileInfo.hasStream) {\n streamIndex++;\n streamInFolder++;\n\n // Check if we've exhausted streams in this folder\n if (streamInFolder >= folderStreamCount) {\n folderIndex++;\n streamInFolder = 0;\n folderStreamCount = streamsPerFolder[folderIndex] || 0;\n }\n }\n }\n }\n\n /**\n * Create an entry from file info\n */\n private createEntry(file: FileInfo, size: number, folderIndex: number, streamInFolder: number): SevenZipEntry {\n // Determine entry type\n // Note: 7z format doesn't natively support symlinks. p7zip with -snl stores\n // symlinks as regular files with the target path as content.\n var type: 'file' | 'directory' | 'link' = 'file';\n if (file.isDirectory) {\n type = 'directory';\n }\n\n // Calculate mode from Windows attributes\n var mode: number | undefined;\n if (file.attributes !== undefined) {\n // Check for Unix extension bit\n if ((file.attributes & FileAttribute.UNIX_EXTENSION) !== 0) {\n mode = (file.attributes >>> 16) & 0xffff;\n // Check for symlink (S_IFLNK = 0xA000)\n // Note: Most 7z implementations don't preserve symlink mode bits\n if ((mode & 0xf000) === 0xa000) {\n type = 'link';\n }\n } else if (file.isDirectory) {\n mode = 493; // 0o755\n } else {\n mode = 420; // 0o644\n }\n }\n\n return {\n name: getBaseName(file.name),\n path: file.name,\n type: type,\n size: size,\n mtime: file.mtime,\n atime: file.atime,\n ctime: file.ctime,\n mode: mode,\n isAntiFile: file.isAntiFile,\n _folderIndex: folderIndex,\n _streamIndex: 0, // Set by caller\n _streamIndexInFolder: streamInFolder,\n _hasStream: file.hasStream,\n };\n }\n\n /**\n * Get the list of entries\n */\n getEntries(): SevenZipEntry[] {\n if (!this.parsed) {\n this.parse();\n }\n return this.entries;\n }\n\n /**\n * Get a readable stream for an entry's content\n */\n getEntryStream(entry: SevenZipEntry): Readable {\n if (!entry._hasStream || entry.type === 'directory') {\n // Return empty stream for directories and empty files\n var emptyStream = new PassThrough();\n emptyStream.end();\n return emptyStream;\n }\n\n if (!this.streamsInfo) {\n throw createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER);\n }\n\n // Get folder info\n var folder = this.streamsInfo.folders[entry._folderIndex];\n if (!folder) {\n throw createCodedError('Invalid folder index', ErrorCode.CORRUPT_HEADER);\n }\n\n // Check codec support\n for (var i = 0; i < folder.coders.length; i++) {\n var coder = folder.coders[i];\n if (!isCodecSupported(coder.id)) {\n var codecName = getCodecName(coder.id);\n throw createCodedError(`Unsupported codec: ${codecName}`, ErrorCode.UNSUPPORTED_CODEC);\n }\n }\n\n // Get decompressed data for this folder (with smart caching)\n var folderIdx = entry._folderIndex;\n var data = this.getDecompressedFolder(folderIdx);\n\n // Calculate file offset within the decompressed block\n // For solid archives, multiple files are concatenated in the block\n var fileStart = 0;\n for (var m = 0; m < entry._streamIndexInFolder; m++) {\n // Sum sizes of all streams before this one in the folder\n var prevStreamGlobalIndex = entry._streamIndex - entry._streamIndexInFolder + m;\n fileStart += this.streamsInfo.unpackSizes[prevStreamGlobalIndex];\n }\n\n var fileSize = entry.size;\n\n // Create a PassThrough stream with the file data\n var outputStream = new PassThrough();\n\n // Bounds check to prevent \"oob\" error on older Node versions\n if (fileStart + fileSize > data.length) {\n throw createCodedError(`File data out of bounds: offset ${fileStart} + size ${fileSize} > decompressed length ${data.length}`, ErrorCode.DECOMPRESSION_FAILED);\n }\n\n var fileData = data.slice(fileStart, fileStart + fileSize);\n outputStream.end(fileData);\n\n // Track extraction and release cache when all files from this folder are done\n this.extractedPerFolder[folderIdx] = (this.extractedPerFolder[folderIdx] || 0) + 1;\n if (this.extractedPerFolder[folderIdx] >= this.filesPerFolder[folderIdx]) {\n // All files from this folder extracted, release cache\n delete this.decompressedCache[folderIdx];\n }\n\n return outputStream;\n }\n\n /**\n * Get a readable stream for an entry's content (callback-based async version)\n * Uses streaming decompression for non-blocking I/O\n */\n getEntryStreamAsync(entry: SevenZipEntry, callback: (err: Error | null, stream?: Readable) => void): void {\n if (!entry._hasStream || entry.type === 'directory') {\n // Return empty stream for directories and empty files\n var emptyStream = new PassThrough();\n emptyStream.end();\n callback(null, emptyStream);\n return;\n }\n\n if (!this.streamsInfo) {\n callback(createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER));\n return;\n }\n\n // Get folder info\n var folder = this.streamsInfo.folders[entry._folderIndex];\n if (!folder) {\n callback(createCodedError('Invalid folder index', ErrorCode.CORRUPT_HEADER));\n return;\n }\n\n // Check codec support\n for (var i = 0; i < folder.coders.length; i++) {\n var coder = folder.coders[i];\n if (!isCodecSupported(coder.id)) {\n var codecName = getCodecName(coder.id);\n callback(createCodedError(`Unsupported codec: ${codecName}`, ErrorCode.UNSUPPORTED_CODEC));\n return;\n }\n }\n\n // Get decompressed data for this folder using async method\n var folderIdx = entry._folderIndex;\n var streamsInfo = this.streamsInfo;\n\n this.getDecompressedFolderAsync(folderIdx, (err, data) => {\n if (err) return callback(err);\n if (!data) return callback(new Error('No data returned from decompression'));\n\n // Calculate file offset within the decompressed block\n var fileStart = 0;\n for (var m = 0; m < entry._streamIndexInFolder; m++) {\n var prevStreamGlobalIndex = entry._streamIndex - entry._streamIndexInFolder + m;\n fileStart += streamsInfo.unpackSizes[prevStreamGlobalIndex];\n }\n\n var fileSize = entry.size;\n\n // Bounds check\n if (fileStart + fileSize > data.length) {\n return callback(createCodedError(`File data out of bounds: offset ${fileStart} + size ${fileSize} > decompressed length ${data.length}`, ErrorCode.DECOMPRESSION_FAILED));\n }\n\n // Create a PassThrough stream with the file data\n var outputStream = new PassThrough();\n var fileData = data.slice(fileStart, fileStart + fileSize);\n outputStream.end(fileData);\n\n // Track extraction and release cache when all files from this folder are done\n this.extractedPerFolder[folderIdx] = (this.extractedPerFolder[folderIdx] || 0) + 1;\n if (this.extractedPerFolder[folderIdx] >= this.filesPerFolder[folderIdx]) {\n delete this.decompressedCache[folderIdx];\n }\n\n callback(null, outputStream);\n });\n }\n\n /**\n * Check if a folder uses BCJ2 codec\n */\n private folderHasBcj2(folder: { coders: { id: number[] }[] }): boolean {\n for (var i = 0; i < folder.coders.length; i++) {\n if (isBcj2Codec(folder.coders[i].id)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get decompressed data for a folder, with smart caching for solid archives\n * Only caches when multiple files share a block, releases when last file extracted\n */\n private getDecompressedFolder(folderIndex: number): Buffer {\n // Check cache first\n if (this.decompressedCache[folderIndex]) {\n return this.decompressedCache[folderIndex];\n }\n\n if (!this.streamsInfo) {\n throw createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER);\n }\n\n var folder = this.streamsInfo.folders[folderIndex];\n\n // Check how many files remain in this folder\n var filesInFolder = this.filesPerFolder[folderIndex] || 1;\n var extractedFromFolder = this.extractedPerFolder[folderIndex] || 0;\n var remainingFiles = filesInFolder - extractedFromFolder;\n // Only cache if more than 1 file remains (including the current one being extracted)\n var shouldCache = remainingFiles > 1;\n\n // Check if this folder uses BCJ2 (requires special multi-stream handling)\n if (this.folderHasBcj2(folder)) {\n var data = this.decompressBcj2Folder(folderIndex);\n if (shouldCache) {\n this.decompressedCache[folderIndex] = data;\n }\n return data;\n }\n\n // Calculate packed data position\n var packPos = SIGNATURE_HEADER_SIZE + this.streamsInfo.packPos;\n\n // Find which pack stream this folder uses\n var packStreamIndex = 0;\n for (var j = 0; j < folderIndex; j++) {\n packStreamIndex += this.streamsInfo.folders[j].packedStreams.length;\n }\n\n // Calculate position of this pack stream\n for (var k = 0; k < packStreamIndex; k++) {\n packPos += this.streamsInfo.packSizes[k];\n }\n\n var packSize = this.streamsInfo.packSizes[packStreamIndex];\n\n // Read packed data\n var packedData = this.source.read(packPos, packSize);\n\n // Decompress through codec chain\n var data2 = packedData;\n for (var l = 0; l < folder.coders.length; l++) {\n var coderInfo = folder.coders[l];\n var codec = getCodec(coderInfo.id);\n // Get unpack size for this coder (needed by LZMA)\n var unpackSize = folder.unpackSizes[l];\n data2 = codec.decode(data2, coderInfo.properties, unpackSize);\n }\n\n // Cache only if more files remain in this folder\n if (shouldCache) {\n this.decompressedCache[folderIndex] = data2;\n }\n\n return data2;\n }\n\n /**\n * Get decompressed data for a folder using streaming (callback-based async)\n * Uses createDecoder() streams for non-blocking decompression\n */\n private getDecompressedFolderAsync(folderIndex: number, callback: DecompressCallback): void {\n var self = this;\n\n // Check cache first\n if (this.decompressedCache[folderIndex]) {\n callback(null, this.decompressedCache[folderIndex]);\n return;\n }\n\n if (!this.streamsInfo) {\n callback(createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER));\n return;\n }\n\n var folder = this.streamsInfo.folders[folderIndex];\n\n // Check how many files remain in this folder\n var filesInFolder = this.filesPerFolder[folderIndex] || 1;\n var extractedFromFolder = this.extractedPerFolder[folderIndex] || 0;\n var remainingFiles = filesInFolder - extractedFromFolder;\n var shouldCache = remainingFiles > 1;\n\n // BCJ2 requires special handling - use sync version for now\n // TODO: Add async BCJ2 support\n if (this.folderHasBcj2(folder)) {\n try {\n var data = this.decompressBcj2Folder(folderIndex);\n if (shouldCache) {\n this.decompressedCache[folderIndex] = data;\n }\n callback(null, data);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Calculate packed data position\n var packPos = SIGNATURE_HEADER_SIZE + this.streamsInfo.packPos;\n\n // Find which pack stream this folder uses\n var packStreamIndex = 0;\n for (var j = 0; j < folderIndex; j++) {\n packStreamIndex += this.streamsInfo.folders[j].packedStreams.length;\n }\n\n // Calculate position of this pack stream\n for (var k = 0; k < packStreamIndex; k++) {\n packPos += this.streamsInfo.packSizes[k];\n }\n\n var packSize = this.streamsInfo.packSizes[packStreamIndex];\n\n // Read packed data\n var packedData = this.source.read(packPos, packSize);\n\n // Create decoder stream chain and decompress\n var coders = folder.coders;\n var unpackSizes = folder.unpackSizes;\n\n // Helper to decompress through a single codec stream\n function decompressWithStream(input: Buffer, coderIdx: number, cb: DecompressCallback): void {\n var coderInfo = coders[coderIdx];\n var codec = getCodec(coderInfo.id);\n var decoder = codec.createDecoder(coderInfo.properties, unpackSizes[coderIdx]);\n\n var chunks: Buffer[] = [];\n var errorOccurred = false;\n\n decoder.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n\n oo(decoder, ['error', 'end', 'close', 'finish'], (err?: Error) => {\n if (errorOccurred) return;\n if (err) {\n errorOccurred = true;\n return cb(err);\n }\n cb(null, Buffer.concat(chunks));\n });\n\n // Write input data to decoder and signal end\n decoder.end(input);\n }\n\n // Chain decompression through all codecs\n function decompressChain(input: Buffer, idx: number): void {\n if (idx >= coders.length) {\n // All done - cache and return\n if (shouldCache) {\n self.decompressedCache[folderIndex] = input;\n }\n callback(null, input);\n return;\n }\n\n decompressWithStream(input, idx, (err, output) => {\n if (err) {\n callback(err);\n return;\n }\n decompressChain(output as Buffer, idx + 1);\n });\n }\n\n // Start the chain\n decompressChain(packedData, 0);\n }\n\n /**\n * Decompress a BCJ2 folder with multi-stream handling\n * BCJ2 uses 4 input streams: main, call, jump, range coder\n */\n private decompressBcj2Folder(folderIndex: number): Buffer {\n if (!this.streamsInfo) {\n throw createCodedError('No streams info available', ErrorCode.CORRUPT_HEADER);\n }\n\n var folder = this.streamsInfo.folders[folderIndex];\n\n // Calculate starting pack position\n var packPos = SIGNATURE_HEADER_SIZE + this.streamsInfo.packPos;\n\n // Find which pack stream index this folder starts at\n var packStreamIndex = 0;\n for (var j = 0; j < folderIndex; j++) {\n packStreamIndex += this.streamsInfo.folders[j].packedStreams.length;\n }\n\n // Calculate position\n for (var k = 0; k < packStreamIndex; k++) {\n packPos += this.streamsInfo.packSizes[k];\n }\n\n // Read all pack streams for this folder\n var numPackStreams = folder.packedStreams.length;\n var packStreams: Buffer[] = [];\n var currentPos = packPos;\n\n for (var p = 0; p < numPackStreams; p++) {\n var size = this.streamsInfo.packSizes[packStreamIndex + p];\n packStreams.push(this.source.read(currentPos, size));\n currentPos += size;\n }\n\n // Build a map of coder outputs\n // For BCJ2, typical structure is:\n // Coder 0: LZMA2 (main stream) - 1 in, 1 out\n // Coder 1: LZMA (call stream) - 1 in, 1 out\n // Coder 2: LZMA (jump stream) - 1 in, 1 out\n // Coder 3: BCJ2 - 4 in, 1 out\n // Pack streams map to: coder inputs not bound to other coder outputs\n\n // First, decompress each non-BCJ2 coder\n var coderOutputs: { [key: number]: Buffer } = {};\n\n // Find the BCJ2 coder\n var bcj2CoderIndex = -1;\n for (var c = 0; c < folder.coders.length; c++) {\n if (isBcj2Codec(folder.coders[c].id)) {\n bcj2CoderIndex = c;\n break;\n }\n }\n\n if (bcj2CoderIndex === -1) {\n throw createCodedError('BCJ2 coder not found in folder', ErrorCode.CORRUPT_HEADER);\n }\n\n // Build input stream index -> pack stream mapping\n // folder.packedStreams tells us which input indices are unbound and their order\n var inputToPackStream: { [key: number]: number } = {};\n for (var pi = 0; pi < folder.packedStreams.length; pi++) {\n inputToPackStream[folder.packedStreams[pi]] = pi;\n }\n\n // Build output stream index -> coder mapping\n var outputToCoder: { [key: number]: number } = {};\n var totalOutputs = 0;\n for (var co = 0; co < folder.coders.length; co++) {\n var numOut = folder.coders[co].numOutStreams;\n for (var outp = 0; outp < numOut; outp++) {\n outputToCoder[totalOutputs + outp] = co;\n }\n totalOutputs += numOut;\n }\n\n // Decompress non-BCJ2 coders (LZMA, LZMA2)\n // We need to process in dependency order\n var processed: { [key: number]: boolean } = {};\n\n var processOrder = this.getCoderProcessOrder(folder, bcj2CoderIndex);\n\n for (var po = 0; po < processOrder.length; po++) {\n var coderIdx = processOrder[po];\n if (coderIdx === bcj2CoderIndex) continue;\n\n var coder = folder.coders[coderIdx];\n var codec = getCodec(coder.id);\n\n // Find input for this coder\n var coderInputStart = 0;\n for (var ci2 = 0; ci2 < coderIdx; ci2++) {\n coderInputStart += folder.coders[ci2].numInStreams;\n }\n\n // Get input data (from pack stream)\n var inputIdx = coderInputStart;\n var packStreamIdx = inputToPackStream[inputIdx];\n var inputData = packStreams[packStreamIdx];\n\n // Decompress\n var unpackSize = folder.unpackSizes[coderIdx];\n var outputData = codec.decode(inputData, coder.properties, unpackSize);\n\n // Store in coder outputs\n var coderOutputStart = 0;\n for (var co2 = 0; co2 < coderIdx; co2++) {\n coderOutputStart += folder.coders[co2].numOutStreams;\n }\n coderOutputs[coderOutputStart] = outputData;\n processed[coderIdx] = true;\n }\n\n // Now process BCJ2\n // BCJ2 has 4 inputs, need to map them correctly\n // Standard order: main(LZMA2 output), call(LZMA output), jump(LZMA output), range(raw pack)\n var bcj2InputStart = 0;\n for (var ci3 = 0; ci3 < bcj2CoderIndex; ci3++) {\n bcj2InputStart += folder.coders[ci3].numInStreams;\n }\n\n var bcj2Inputs: Buffer[] = [];\n for (var bi = 0; bi < 4; bi++) {\n var globalIdx = bcj2InputStart + bi;\n\n // Check if this input is bound to a coder output\n var boundOutput = -1;\n for (var bp2 = 0; bp2 < folder.bindPairs.length; bp2++) {\n if (folder.bindPairs[bp2].inIndex === globalIdx) {\n boundOutput = folder.bindPairs[bp2].outIndex;\n break;\n }\n }\n\n if (boundOutput >= 0) {\n // Get from coder outputs\n bcj2Inputs.push(coderOutputs[boundOutput]);\n } else {\n // Get from pack streams\n var psIdx = inputToPackStream[globalIdx];\n bcj2Inputs.push(packStreams[psIdx]);\n }\n }\n\n // Get BCJ2 unpack size\n var bcj2OutputStart = 0;\n for (var co3 = 0; co3 < bcj2CoderIndex; co3++) {\n bcj2OutputStart += folder.coders[co3].numOutStreams;\n }\n var bcj2UnpackSize = folder.unpackSizes[bcj2OutputStart];\n\n // Memory optimization: Clear intermediate buffers to help GC\n // These are no longer needed after bcj2Inputs is built\n for (var key in coderOutputs) {\n delete coderOutputs[key];\n }\n // Clear packStreams array (allows GC to free compressed data)\n packStreams.length = 0;\n\n // Decode BCJ2\n return decodeBcj2Multi(bcj2Inputs, undefined, bcj2UnpackSize);\n }\n\n /**\n * Get processing order for coders (dependency order)\n */\n private getCoderProcessOrder(folder: { coders: { numInStreams: number; numOutStreams: number }[]; bindPairs: { inIndex: number; outIndex: number }[] }, excludeIdx: number): number[] {\n var order: number[] = [];\n var processed: { [key: number]: boolean } = {};\n\n // Simple approach: process coders that don't depend on unprocessed outputs\n var changed = true;\n while (changed) {\n changed = false;\n for (var c = 0; c < folder.coders.length; c++) {\n if (processed[c] || c === excludeIdx) continue;\n\n // Check if all inputs are satisfied\n var inputStart = 0;\n for (var i = 0; i < c; i++) {\n inputStart += folder.coders[i].numInStreams;\n }\n\n var canProcess = true;\n for (var inp = 0; inp < folder.coders[c].numInStreams; inp++) {\n var globalIdx = inputStart + inp;\n // Check if bound to an unprocessed coder\n for (var bp = 0; bp < folder.bindPairs.length; bp++) {\n if (folder.bindPairs[bp].inIndex === globalIdx) {\n // Find which coder produces this output\n var outIdx = folder.bindPairs[bp].outIndex;\n var outStart = 0;\n for (var oc = 0; oc < folder.coders.length; oc++) {\n var numOut = folder.coders[oc].numOutStreams;\n if (outIdx < outStart + numOut) {\n if (!processed[oc] && oc !== excludeIdx) {\n canProcess = false;\n }\n break;\n }\n outStart += numOut;\n }\n }\n }\n }\n\n if (canProcess) {\n order.push(c);\n processed[c] = true;\n changed = true;\n }\n }\n }\n\n return order;\n }\n\n /**\n * Close the parser and release resources\n */\n close(): void {\n if (this.source) {\n this.source.close();\n }\n }\n}\n\n/**\n * Get base name from a path\n */\nfunction getBaseName(path: string): string {\n var lastSlash = path.lastIndexOf('/');\n var lastBackslash = path.lastIndexOf('\\\\');\n var lastSep = Math.max(lastSlash, lastBackslash);\n return lastSep >= 0 ? path.slice(lastSep + 1) : path;\n}\n"],"names":["BufferSource","FileSource","SevenZipParser","major","process","versions","node","split","PassThrough","Stream","require","buffer","read","position","length","slice","getSize","close","fd","size","buf","allocBuffer","bytesRead","fs","readSync","closeSync","_e","source","signature","streamsInfo","filesInfo","entries","parsed","decompressedCache","filesPerFolder","extractedPerFolder","parse","sigBuf","SIGNATURE_HEADER_SIZE","createCodedError","ErrorCode","TRUNCATED_ARCHIVE","parseSignatureHeader","headerOffset","nextHeaderOffset","headerBuf","nextHeaderSize","headerResult","parseEncodedHeader","nextHeaderCRC","err","codedErr","code","COMPRESSED_HEADER","handleCompressedHeader","buildEntries","offset","propertyId","PropertyId","kMainStreamsInfo","kPackInfo","CORRUPT_HEADER","packInfoResult","parseEncodedHeaderStreams","compressedStart","packPos","compressedData","packSize","codec","getCodec","codecId","decompressedHeader","decode","properties","unpackSize","unpackCRC","undefined","actualCRC","crc32","packAreaEnd","searchStart","searchEnd","Math","max","scanChunkSize","searchLoop","chunkStart","chunk","i","min","candidateData","subarray","candidateDecompressed","candCRC","decompOffset","headerId","kHeader","result","parseHeaderContent","kEnd","packPosResult","readNumber","value","numPackResult","kSize","sizeResult","kUnpackInfo","kFolder","numFoldersResult","numCodersResult","flags","idSize","hasAttributes","push","propsLenResult","kCodersUnpackSize","unpackSizeResult","kCRC","allDefined","readUInt32LE","file","createEntry","streamsPerFolder","numUnpackStreamsPerFolder","f","streamIndex","folderIndex","streamInFolder","folderStreamCount","j","fileInfo","hasStream","unpackSizes","entry","_streamIndex","type","isDirectory","mode","attributes","FileAttribute","UNIX_EXTENSION","name","getBaseName","path","mtime","atime","ctime","isAntiFile","_folderIndex","_streamIndexInFolder","_hasStream","getEntries","getEntryStream","emptyStream","end","folder","folders","coders","coder","isCodecSupported","id","codecName","getCodecName","UNSUPPORTED_CODEC","folderIdx","data","getDecompressedFolder","fileStart","m","prevStreamGlobalIndex","fileSize","outputStream","DECOMPRESSION_FAILED","fileData","getEntryStreamAsync","callback","getDecompressedFolderAsync","Error","folderHasBcj2","isBcj2Codec","filesInFolder","extractedFromFolder","remainingFiles","shouldCache","decompressBcj2Folder","packStreamIndex","packedStreams","k","packSizes","packedData","data2","l","coderInfo","self","decompressWithStream","input","coderIdx","cb","decoder","createDecoder","chunks","errorOccurred","on","oo","Buffer","concat","decompressChain","idx","output","numPackStreams","packStreams","currentPos","p","coderOutputs","bcj2CoderIndex","c","inputToPackStream","pi","outputToCoder","totalOutputs","co","numOut","numOutStreams","outp","processed","processOrder","getCoderProcessOrder","po","coderInputStart","ci2","numInStreams","inputIdx","packStreamIdx","inputData","outputData","coderOutputStart","co2","bcj2InputStart","ci3","bcj2Inputs","bi","globalIdx","boundOutput","bp2","bindPairs","inIndex","outIndex","psIdx","bcj2OutputStart","co3","bcj2UnpackSize","key","decodeBcj2Multi","excludeIdx","order","changed","inputStart","canProcess","inp","bp","outIdx","outStart","oc","lastSlash","lastIndexOf","lastBackslash","lastSep"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { type Transform } from 'readable-stream';
1
+ import Stream from 'stream';
2
+ type Transform = Stream.Transform;
2
3
  /**
3
4
  * Create a Copy decoder stream
4
5
  * Simply passes through data unchanged
@@ -12,3 +13,4 @@ export declare function createCopyDecoder(): Transform;
12
13
  * @returns Same buffer (no transformation)
13
14
  */
14
15
  export declare function decodeCopy(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
16
+ export {};
@@ -1,4 +1,5 @@
1
- import { type Transform } from 'readable-stream';
1
+ import Stream from 'stream';
2
+ type Transform = Stream.Transform;
2
3
  /**
3
4
  * Create a Copy decoder stream
4
5
  * Simply passes through data unchanged
@@ -12,3 +13,4 @@ export declare function createCopyDecoder(): Transform;
12
13
  * @returns Same buffer (no transformation)
13
14
  */
14
15
  export declare function decodeCopy(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
16
+ export {};
@@ -18,9 +18,22 @@ _export(exports, {
18
18
  return decodeCopy;
19
19
  }
20
20
  });
21
- var _readablestream = require("readable-stream");
21
+ var _stream = /*#__PURE__*/ _interop_require_default(require("stream"));
22
+ function _interop_require_default(obj) {
23
+ return obj && obj.__esModule ? obj : {
24
+ default: obj
25
+ };
26
+ }
27
+ // Use native streams when available, readable-stream only for Node 0.x
28
+ var major = +process.versions.node.split('.')[0];
29
+ var PassThrough;
30
+ if (major > 0) {
31
+ PassThrough = _stream.default.PassThrough;
32
+ } else {
33
+ PassThrough = require('readable-stream').PassThrough;
34
+ }
22
35
  function createCopyDecoder() {
23
- return new _readablestream.PassThrough();
36
+ return new PassThrough();
24
37
  }
25
38
  function decodeCopy(input, _properties, _unpackSize) {
26
39
  return input;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/Copy.ts"],"sourcesContent":["// Copy codec - passthrough (no compression)\n// This is the simplest codec, just passes data through unchanged\n\nimport { PassThrough, type Transform } from 'readable-stream';\n\n/**\n * Create a Copy decoder stream\n * Simply passes through data unchanged\n */\nexport function createCopyDecoder(): Transform {\n return new PassThrough();\n}\n\n/**\n * Decode a buffer using Copy codec (no-op)\n * @param input - Input buffer\n * @param _properties - Unused\n * @param _unpackSize - Unused\n * @returns Same buffer (no transformation)\n */\nexport function decodeCopy(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n return input;\n}\n"],"names":["createCopyDecoder","decodeCopy","PassThrough","input","_properties","_unpackSize"],"mappings":"AAAA,4CAA4C;AAC5C,iEAAiE;;;;;;;;;;;;QAQjDA;eAAAA;;QAWAC;eAAAA;;;8BAjB4B;AAMrC,SAASD;IACd,OAAO,IAAIE,2BAAW;AACxB;AASO,SAASD,WAAWE,KAAa,EAAEC,WAAoB,EAAEC,WAAoB;IAClF,OAAOF;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/Copy.ts"],"sourcesContent":["// Copy codec - passthrough (no compression)\n// This is the simplest codec, just passes data through unchanged\n\nimport Stream from 'stream';\n\n// Use native streams when available, readable-stream only for Node 0.x\nconst major = +process.versions.node.split('.')[0];\nlet PassThrough: typeof Stream.PassThrough;\nif (major > 0) {\n PassThrough = Stream.PassThrough;\n} else {\n PassThrough = require('readable-stream').PassThrough;\n}\ntype Transform = Stream.Transform;\n\n/**\n * Create a Copy decoder stream\n * Simply passes through data unchanged\n */\nexport function createCopyDecoder(): Transform {\n return new PassThrough();\n}\n\n/**\n * Decode a buffer using Copy codec (no-op)\n * @param input - Input buffer\n * @param _properties - Unused\n * @param _unpackSize - Unused\n * @returns Same buffer (no transformation)\n */\nexport function decodeCopy(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n return input;\n}\n"],"names":["createCopyDecoder","decodeCopy","major","process","versions","node","split","PassThrough","Stream","require","input","_properties","_unpackSize"],"mappings":"AAAA,4CAA4C;AAC5C,iEAAiE;;;;;;;;;;;;QAkBjDA;eAAAA;;QAWAC;eAAAA;;;6DA3BG;;;;;;AAEnB,uEAAuE;AACvE,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,IAAIC;AACJ,IAAIL,QAAQ,GAAG;IACbK,cAAcC,eAAM,CAACD,WAAW;AAClC,OAAO;IACLA,cAAcE,QAAQ,mBAAmBF,WAAW;AACtD;AAOO,SAASP;IACd,OAAO,IAAIO;AACb;AASO,SAASN,WAAWS,KAAa,EAAEC,WAAoB,EAAEC,WAAoB;IAClF,OAAOF;AACT"}
@@ -1,7 +1,7 @@
1
- import { Transform } from 'readable-stream';
1
+ import Stream from 'stream';
2
2
  export type DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;
3
3
  /**
4
4
  * Create a Transform stream that buffers all input, then decodes in flush
5
5
  * This is the common pattern for codecs that can't stream (need full input)
6
6
  */
7
- export default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): Transform;
7
+ export default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): Stream.Transform;