7z-iterator 0.2.12 → 0.3.0

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 (46) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/FileEntry.d.cts +3 -3
  3. package/dist/cjs/FileEntry.d.ts +3 -3
  4. package/dist/cjs/FileEntry.js.map +1 -1
  5. package/dist/cjs/SevenZipIterator.d.cts +4 -4
  6. package/dist/cjs/SevenZipIterator.d.ts +4 -4
  7. package/dist/cjs/SevenZipIterator.js +70 -9
  8. package/dist/cjs/SevenZipIterator.js.map +1 -1
  9. package/dist/cjs/compat.js +1 -3
  10. package/dist/cjs/compat.js.map +1 -1
  11. package/dist/cjs/sevenz/ArchiveSource.d.cts +40 -0
  12. package/dist/cjs/sevenz/ArchiveSource.d.ts +40 -0
  13. package/dist/cjs/sevenz/ArchiveSource.js +82 -0
  14. package/dist/cjs/sevenz/ArchiveSource.js.map +1 -0
  15. package/dist/cjs/sevenz/SevenZipParser.d.cts +21 -30
  16. package/dist/cjs/sevenz/SevenZipParser.d.ts +21 -30
  17. package/dist/cjs/sevenz/SevenZipParser.js +22 -52
  18. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
  19. package/dist/cjs/types.d.cts +4 -12
  20. package/dist/cjs/types.d.ts +4 -12
  21. package/dist/cjs/types.js +3 -0
  22. package/dist/cjs/types.js.map +1 -1
  23. package/dist/esm/FileEntry.d.ts +3 -3
  24. package/dist/esm/FileEntry.js.map +1 -1
  25. package/dist/esm/SevenZipIterator.d.ts +4 -4
  26. package/dist/esm/SevenZipIterator.js +26 -8
  27. package/dist/esm/SevenZipIterator.js.map +1 -1
  28. package/dist/esm/compat.js +1 -3
  29. package/dist/esm/compat.js.map +1 -1
  30. package/dist/esm/sevenz/ArchiveSource.d.ts +40 -0
  31. package/dist/esm/sevenz/ArchiveSource.js +54 -0
  32. package/dist/esm/sevenz/ArchiveSource.js.map +1 -0
  33. package/dist/esm/sevenz/SevenZipParser.d.ts +21 -30
  34. package/dist/esm/sevenz/SevenZipParser.js +21 -46
  35. package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
  36. package/dist/esm/types.d.ts +4 -12
  37. package/dist/esm/types.js +1 -1
  38. package/dist/esm/types.js.map +1 -1
  39. package/package.json +16 -16
  40. package/dist/cjs/lib/Lock.d.cts +0 -12
  41. package/dist/cjs/lib/Lock.d.ts +0 -12
  42. package/dist/cjs/lib/Lock.js +0 -71
  43. package/dist/cjs/lib/Lock.js.map +0 -1
  44. package/dist/esm/lib/Lock.d.ts +0 -12
  45. package/dist/esm/lib/Lock.js +0 -47
  46. package/dist/esm/lib/Lock.js.map +0 -1
package/README.md CHANGED
@@ -7,7 +7,7 @@ Extract contents from zip archive type using an iterator API using streams or pa
7
7
  ```js
8
8
  var assert = require('assert');
9
9
  var fs = require('fs');
10
- var ZipIterator = require('7z-iterator'));
10
+ var ZipIterator = require('7z-iterator');
11
11
 
12
12
  (async function() {
13
13
  let iterator = new ZipIterator('/path/to/archive');
@@ -54,7 +54,7 @@ var ZipIterator = require('7z-iterator'));
54
54
 
55
55
  ```js
56
56
  var assert = require('assert');
57
- var ZipIterator = require('7z-iterator'));
57
+ var ZipIterator = require('7z-iterator');
58
58
 
59
59
  // one by one
60
60
  (async function() {
@@ -108,7 +108,7 @@ var ZipIterator = require('7z-iterator'));
108
108
  ```js
109
109
  var assert = require('assert');
110
110
  var Queue = require('queue-cb');
111
- var ZipIterator = require('7z-iterator'));
111
+ var ZipIterator = require('7z-iterator');
112
112
 
113
113
  var iterator = new ZipIterator('/path/to/archive');
114
114
 
@@ -1,11 +1,11 @@
1
- import { type FileAttributes, FileEntry, type NoParamCallback } from 'extract-base-iterator';
1
+ import { type FileAttributes, FileEntry, type Lock, type NoParamCallback } from 'extract-base-iterator';
2
2
  import type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.js';
3
- import type { ExtractOptions, LockT } from './types.js';
3
+ import type { ExtractOptions } from './types.js';
4
4
  export default class SevenZipFileEntry extends FileEntry {
5
5
  private lock;
6
6
  private entry;
7
7
  private parser;
8
- constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: LockT);
8
+ constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: Lock);
9
9
  create(dest: string, options: ExtractOptions | NoParamCallback, callback: NoParamCallback): undefined | Promise<boolean>;
10
10
  _writeFile(fullPath: string, _options: ExtractOptions, callback: NoParamCallback): undefined;
11
11
  destroy(): void;
@@ -1,11 +1,11 @@
1
- import { type FileAttributes, FileEntry, type NoParamCallback } from 'extract-base-iterator';
1
+ import { type FileAttributes, FileEntry, type Lock, type NoParamCallback } from 'extract-base-iterator';
2
2
  import type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.js';
3
- import type { ExtractOptions, LockT } from './types.js';
3
+ import type { ExtractOptions } from './types.js';
4
4
  export default class SevenZipFileEntry extends FileEntry {
5
5
  private lock;
6
6
  private entry;
7
7
  private parser;
8
- constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: LockT);
8
+ constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: Lock);
9
9
  create(dest: string, options: ExtractOptions | NoParamCallback, callback: NoParamCallback): undefined | Promise<boolean>;
10
10
  _writeFile(fullPath: string, _options: ExtractOptions, callback: NoParamCallback): undefined;
11
11
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/FileEntry.ts"],"sourcesContent":["import { type FileAttributes, FileEntry, type NoParamCallback, waitForAccess } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\nimport type { ExtractOptions, LockT } from './types.ts';\n\nexport default class SevenZipFileEntry extends FileEntry {\n private lock: LockT;\n private entry: SevenZipEntry;\n private parser: SevenZipParser;\n\n constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: LockT) {\n super(attributes);\n this.entry = entry;\n this.parser = parser;\n this.lock = lock;\n this.lock.retain();\n }\n\n create(dest: string, options: ExtractOptions | NoParamCallback, callback: NoParamCallback): undefined | Promise<boolean> {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n\n if (typeof callback === 'function') {\n options = options || {};\n return FileEntry.prototype.create.call(this, dest, options, (err?: Error) => {\n callback(err);\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n });\n }\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => {\n err ? reject(err) : resolve(done);\n });\n });\n }\n\n _writeFile(fullPath: string, _options: ExtractOptions, callback: NoParamCallback): undefined {\n if (!this.entry || !this.parser) {\n callback(new Error('7z FileEntry missing entry. Check for calling create multiple times'));\n return;\n }\n\n // Use callback-based async decompression\n this.parser.getEntryStreamAsync(this.entry, (err, stream) => {\n if (err) return callback(err);\n if (!stream) return callback(new Error('No stream returned'));\n\n const res = stream.pipe(fs.createWriteStream(fullPath));\n oo(res, ['error', 'end', 'close', 'finish'], (writeErr?: Error) => {\n writeErr ? callback(writeErr) : waitForAccess(fullPath, callback);\n });\n });\n }\n\n destroy() {\n FileEntry.prototype.destroy.call(this);\n this.entry = null;\n this.parser = null;\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n }\n}\n"],"names":["SevenZipFileEntry","attributes","entry","parser","lock","retain","create","dest","options","callback","FileEntry","prototype","call","err","release","Promise","resolve","reject","done","_writeFile","fullPath","_options","Error","getEntryStreamAsync","stream","res","pipe","fs","createWriteStream","oo","writeErr","waitForAccess","destroy"],"mappings":";;;;;;;eAMqBA;;;mCAN+D;yDACrE;4DACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAA,AAAMA,kCAAN;;cAAMA;aAAAA,kBAKPC,UAA0B,EAAEC,KAAoB,EAAEC,MAAsB,EAAEC,IAAW;gCAL9EJ;;gBAMjB,kBANiBA;YAMXC;;QACN,MAAKC,KAAK,GAAGA;QACb,MAAKC,MAAM,GAAGA;QACd,MAAKC,IAAI,GAAGA;QACZ,MAAKA,IAAI,CAACC,MAAM;;;iBAVCL;IAanBM,OAAAA,MAqBC,GArBDA,SAAAA,OAAOC,IAAY,EAAEC,OAAyC,EAAEC,QAAyB;;QACvF,IAAI,OAAOD,YAAY,YAAY;YACjCC,WAAWD;YACXA,UAAU;QACZ;QAEA,IAAI,OAAOC,aAAa,YAAY;YAClCD,UAAUA,WAAW,CAAC;YACtB,OAAOE,8BAAS,CAACC,SAAS,CAACL,MAAM,CAACM,IAAI,CAAC,IAAI,EAAEL,MAAMC,SAAS,SAACK;gBAC3DJ,SAASI;gBACT,IAAI,MAAKT,IAAI,EAAE;oBACb,MAAKA,IAAI,CAACU,OAAO;oBACjB,MAAKV,IAAI,GAAG;gBACd;YACF;QACF;QACA,OAAO,IAAIW,QAAQ,SAACC,SAASC;YAC3B,MAAKX,MAAM,CAACC,MAAMC,SAAS,SAACK,KAAaK;gBACvCL,MAAMI,OAAOJ,OAAOG,QAAQE;YAC9B;QACF;IACF;IAEAC,OAAAA,UAgBC,GAhBDA,SAAAA,WAAWC,QAAgB,EAAEC,QAAwB,EAAEZ,QAAyB;QAC9E,IAAI,CAAC,IAAI,CAACP,KAAK,IAAI,CAAC,IAAI,CAACC,MAAM,EAAE;YAC/BM,SAAS,IAAIa,MAAM;YACnB;QACF;QAEA,yCAAyC;QACzC,IAAI,CAACnB,MAAM,CAACoB,mBAAmB,CAAC,IAAI,CAACrB,KAAK,EAAE,SAACW,KAAKW;YAChD,IAAIX,KAAK,OAAOJ,SAASI;YACzB,IAAI,CAACW,QAAQ,OAAOf,SAAS,IAAIa,MAAM;YAEvC,IAAMG,MAAMD,OAAOE,IAAI,CAACC,WAAE,CAACC,iBAAiB,CAACR;YAC7CS,IAAAA,cAAE,EAACJ,KAAK;gBAAC;gBAAS;gBAAO;gBAAS;aAAS,EAAE,SAACK;gBAC5CA,WAAWrB,SAASqB,YAAYC,IAAAA,kCAAa,EAACX,UAAUX;YAC1D;QACF;IACF;IAEAuB,OAAAA,OAQC,GARDA,SAAAA;QACEtB,8BAAS,CAACC,SAAS,CAACqB,OAAO,CAACpB,IAAI,CAAC,IAAI;QACrC,IAAI,CAACV,KAAK,GAAG;QACb,IAAI,CAACC,MAAM,GAAG;QACd,IAAI,IAAI,CAACC,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACU,OAAO;YACjB,IAAI,CAACV,IAAI,GAAG;QACd;IACF;WA9DmBJ;EAA0BU,8BAAS"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/FileEntry.ts"],"sourcesContent":["import { type FileAttributes, FileEntry, type Lock, type NoParamCallback, waitForAccess } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\nimport type { ExtractOptions } from './types.ts';\n\nexport default class SevenZipFileEntry extends FileEntry {\n private lock: Lock;\n private entry: SevenZipEntry;\n private parser: SevenZipParser;\n\n constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: Lock) {\n super(attributes);\n this.entry = entry;\n this.parser = parser;\n this.lock = lock;\n this.lock.retain();\n }\n\n create(dest: string, options: ExtractOptions | NoParamCallback, callback: NoParamCallback): undefined | Promise<boolean> {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n\n if (typeof callback === 'function') {\n options = options || {};\n return FileEntry.prototype.create.call(this, dest, options, (err?: Error) => {\n callback(err);\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n });\n }\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => {\n err ? reject(err) : resolve(done);\n });\n });\n }\n\n _writeFile(fullPath: string, _options: ExtractOptions, callback: NoParamCallback): undefined {\n if (!this.entry || !this.parser) {\n callback(new Error('7z FileEntry missing entry. Check for calling create multiple times'));\n return;\n }\n\n // Use callback-based async decompression\n this.parser.getEntryStreamAsync(this.entry, (err, stream) => {\n if (err) return callback(err);\n if (!stream) return callback(new Error('No stream returned'));\n\n const res = stream.pipe(fs.createWriteStream(fullPath));\n oo(res, ['error', 'end', 'close', 'finish'], (writeErr?: Error) => {\n writeErr ? callback(writeErr) : waitForAccess(fullPath, callback);\n });\n });\n }\n\n destroy() {\n FileEntry.prototype.destroy.call(this);\n this.entry = null;\n this.parser = null;\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n }\n}\n"],"names":["SevenZipFileEntry","attributes","entry","parser","lock","retain","create","dest","options","callback","FileEntry","prototype","call","err","release","Promise","resolve","reject","done","_writeFile","fullPath","_options","Error","getEntryStreamAsync","stream","res","pipe","fs","createWriteStream","oo","writeErr","waitForAccess","destroy"],"mappings":";;;;;;;eAMqBA;;;mCAN0E;yDAChF;4DACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAA,AAAMA,kCAAN;;cAAMA;aAAAA,kBAKPC,UAA0B,EAAEC,KAAoB,EAAEC,MAAsB,EAAEC,IAAU;gCAL7EJ;;gBAMjB,kBANiBA;YAMXC;;QACN,MAAKC,KAAK,GAAGA;QACb,MAAKC,MAAM,GAAGA;QACd,MAAKC,IAAI,GAAGA;QACZ,MAAKA,IAAI,CAACC,MAAM;;;iBAVCL;IAanBM,OAAAA,MAqBC,GArBDA,SAAAA,OAAOC,IAAY,EAAEC,OAAyC,EAAEC,QAAyB;;QACvF,IAAI,OAAOD,YAAY,YAAY;YACjCC,WAAWD;YACXA,UAAU;QACZ;QAEA,IAAI,OAAOC,aAAa,YAAY;YAClCD,UAAUA,WAAW,CAAC;YACtB,OAAOE,8BAAS,CAACC,SAAS,CAACL,MAAM,CAACM,IAAI,CAAC,IAAI,EAAEL,MAAMC,SAAS,SAACK;gBAC3DJ,SAASI;gBACT,IAAI,MAAKT,IAAI,EAAE;oBACb,MAAKA,IAAI,CAACU,OAAO;oBACjB,MAAKV,IAAI,GAAG;gBACd;YACF;QACF;QACA,OAAO,IAAIW,QAAQ,SAACC,SAASC;YAC3B,MAAKX,MAAM,CAACC,MAAMC,SAAS,SAACK,KAAaK;gBACvCL,MAAMI,OAAOJ,OAAOG,QAAQE;YAC9B;QACF;IACF;IAEAC,OAAAA,UAgBC,GAhBDA,SAAAA,WAAWC,QAAgB,EAAEC,QAAwB,EAAEZ,QAAyB;QAC9E,IAAI,CAAC,IAAI,CAACP,KAAK,IAAI,CAAC,IAAI,CAACC,MAAM,EAAE;YAC/BM,SAAS,IAAIa,MAAM;YACnB;QACF;QAEA,yCAAyC;QACzC,IAAI,CAACnB,MAAM,CAACoB,mBAAmB,CAAC,IAAI,CAACrB,KAAK,EAAE,SAACW,KAAKW;YAChD,IAAIX,KAAK,OAAOJ,SAASI;YACzB,IAAI,CAACW,QAAQ,OAAOf,SAAS,IAAIa,MAAM;YAEvC,IAAMG,MAAMD,OAAOE,IAAI,CAACC,WAAE,CAACC,iBAAiB,CAACR;YAC7CS,IAAAA,cAAE,EAACJ,KAAK;gBAAC;gBAAS;gBAAO;gBAAS;aAAS,EAAE,SAACK;gBAC5CA,WAAWrB,SAASqB,YAAYC,IAAAA,kCAAa,EAACX,UAAUX;YAC1D;QACF;IACF;IAEAuB,OAAAA,OAQC,GARDA,SAAAA;QACEtB,8BAAS,CAACC,SAAS,CAACqB,OAAO,CAACpB,IAAI,CAAC,IAAI;QACrC,IAAI,CAACV,KAAK,GAAG;QACb,IAAI,CAACC,MAAM,GAAG;QACd,IAAI,IAAI,CAACC,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACU,OAAO;YACjB,IAAI,CAACV,IAAI,GAAG;QACd;IACF;WA9DmBJ;EAA0BU,8BAAS"}
@@ -1,7 +1,7 @@
1
- import BaseIterator from 'extract-base-iterator';
2
- import type { ExtractOptions, LockT, SevenZipFileIterator } from './types.js';
3
- export default class SevenZipIterator extends BaseIterator {
4
- lock: LockT;
1
+ import BaseIterator, { Lock } from 'extract-base-iterator';
2
+ import type { Entry, ExtractOptions, SevenZipFileIterator } from './types.js';
3
+ export default class SevenZipIterator extends BaseIterator<Entry> {
4
+ lock: Lock | null;
5
5
  iterator: SevenZipFileIterator;
6
6
  constructor(source: string | NodeJS.ReadableStream, options?: ExtractOptions);
7
7
  end(err?: Error): void;
@@ -1,7 +1,7 @@
1
- import BaseIterator from 'extract-base-iterator';
2
- import type { ExtractOptions, LockT, SevenZipFileIterator } from './types.js';
3
- export default class SevenZipIterator extends BaseIterator {
4
- lock: LockT;
1
+ import BaseIterator, { Lock } from 'extract-base-iterator';
2
+ import type { Entry, ExtractOptions, SevenZipFileIterator } from './types.js';
3
+ export default class SevenZipIterator extends BaseIterator<Entry> {
4
+ lock: Lock | null;
5
5
  iterator: SevenZipFileIterator;
6
6
  constructor(source: string | NodeJS.ReadableStream, options?: ExtractOptions);
7
7
  end(err?: Error): void;
@@ -8,14 +8,14 @@ Object.defineProperty(exports, "default", {
8
8
  return SevenZipIterator;
9
9
  }
10
10
  });
11
- var _extractbaseiterator = /*#__PURE__*/ _interop_require_default(require("extract-base-iterator"));
11
+ var _extractbaseiterator = /*#__PURE__*/ _interop_require_wildcard(require("extract-base-iterator"));
12
12
  var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
13
+ var _fsremovecompat = require("fs-remove-compat");
13
14
  var _path = /*#__PURE__*/ _interop_require_default(require("path"));
14
15
  var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
15
16
  var _shorthash = /*#__PURE__*/ _interop_require_default(require("short-hash"));
16
17
  var _tempsuffix = /*#__PURE__*/ _interop_require_default(require("temp-suffix"));
17
18
  var _compatts = require("./compat.js");
18
- var _Lockts = /*#__PURE__*/ _interop_require_default(require("./lib/Lock.js"));
19
19
  var _streamToSourcets = /*#__PURE__*/ _interop_require_default(require("./lib/streamToSource.js"));
20
20
  var _nextEntryts = /*#__PURE__*/ _interop_require_default(require("./nextEntry.js"));
21
21
  var _indexts = require("./sevenz/codecs/index.js");
@@ -59,6 +59,47 @@ function _interop_require_default(obj) {
59
59
  default: obj
60
60
  };
61
61
  }
62
+ function _getRequireWildcardCache(nodeInterop) {
63
+ if (typeof WeakMap !== "function") return null;
64
+ var cacheBabelInterop = new WeakMap();
65
+ var cacheNodeInterop = new WeakMap();
66
+ return (_getRequireWildcardCache = function(nodeInterop) {
67
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
68
+ })(nodeInterop);
69
+ }
70
+ function _interop_require_wildcard(obj, nodeInterop) {
71
+ if (!nodeInterop && obj && obj.__esModule) {
72
+ return obj;
73
+ }
74
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
75
+ return {
76
+ default: obj
77
+ };
78
+ }
79
+ var cache = _getRequireWildcardCache(nodeInterop);
80
+ if (cache && cache.has(obj)) {
81
+ return cache.get(obj);
82
+ }
83
+ var newObj = {
84
+ __proto__: null
85
+ };
86
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
87
+ for(var key in obj){
88
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
89
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
90
+ if (desc && (desc.get || desc.set)) {
91
+ Object.defineProperty(newObj, key, desc);
92
+ } else {
93
+ newObj[key] = obj[key];
94
+ }
95
+ }
96
+ }
97
+ newObj.default = obj;
98
+ if (cache) {
99
+ cache.set(obj, newObj);
100
+ }
101
+ return newObj;
102
+ }
62
103
  function _possible_constructor_return(self, call) {
63
104
  if (call && (_type_of(call) === "object" || typeof call === "function")) {
64
105
  return call;
@@ -116,8 +157,10 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
116
157
  _this = _call_super(this, SevenZipIterator, [
117
158
  options
118
159
  ]);
119
- _this.lock = new _Lockts.default();
120
- _this.lock.iterator = _this;
160
+ _this.lock = new _extractbaseiterator.Lock();
161
+ _this.lock.onDestroy = function(err) {
162
+ return _extractbaseiterator.default.prototype.end.call(_this, err);
163
+ };
121
164
  var queue = new _queuecb.default(1);
122
165
  var cancelled = false;
123
166
  var archiveSource = null;
@@ -138,15 +181,22 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
138
181
  if (_this.done || cancelled) return;
139
182
  if (err) return cb(err);
140
183
  archiveSource = new _SevenZipParserts.FileSource(fd, stats.size);
141
- _this.lock.fd = fd;
184
+ // Register cleanup for file descriptor
185
+ _this.lock.registerCleanup(function() {
186
+ _fs.default.closeSync(fd);
187
+ });
142
188
  cb();
143
189
  });
144
190
  });
145
191
  });
146
192
  } else {
147
193
  // Stream input - use hybrid memory/temp-file approach
148
- // Store source stream in lock for cleanup if destroyed during download
149
- _this.lock.sourceStream = source;
194
+ // Register cleanup for source stream
195
+ var stream = source;
196
+ _this.lock.registerCleanup(function() {
197
+ var s = stream;
198
+ if (typeof s.destroy === 'function') s.destroy();
199
+ });
150
200
  var tempPath = _path.default.join((0, _compatts.tmpdir)(), '7z-iterator', (0, _shorthash.default)(process.cwd()), (0, _tempsuffix.default)('tmp.7z'));
151
201
  queue.defer(function(cb) {
152
202
  (0, _streamToSourcets.default)(source, {
@@ -158,10 +208,21 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
158
208
  if (!result) return cb(new Error('No result from streamToSource'));
159
209
  archiveSource = result.source;
160
210
  if (result.fd !== undefined) {
161
- _this.lock.fd = result.fd;
211
+ var fd = result.fd;
212
+ // Register cleanup for file descriptor
213
+ _this.lock.registerCleanup(function() {
214
+ _fs.default.closeSync(fd);
215
+ });
162
216
  }
163
217
  if (result.tempPath) {
164
- _this.lock.tempPath = result.tempPath;
218
+ var tp = result.tempPath;
219
+ // Register cleanup for temp file
220
+ _this.lock.registerCleanup(function() {
221
+ try {
222
+ (0, _fsremovecompat.rmSync)(tp);
223
+ } catch (_e) {
224
+ /* ignore */ }
225
+ });
165
226
  }
166
227
  cb();
167
228
  });
@@ -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 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 const queue = new Queue(1);\n let cancelled = false;\n let archiveSource: ArchiveSource | null = null;\n const 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 const 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 const 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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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator, { Lock } from 'extract-base-iterator';\nimport fs from 'fs';\nimport { rmSync } from 'fs-remove-compat';\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 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 { Entry, ExtractOptions, 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<Entry> {\n lock: Lock | null;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.onDestroy = (err) => BaseIterator.prototype.end.call(this, err);\n const queue = new Queue(1);\n let cancelled = false;\n let archiveSource: ArchiveSource | null = null;\n const 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 // Register cleanup for file descriptor\n this.lock.registerCleanup(() => {\n fs.closeSync(fd);\n });\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n // Register cleanup for source stream\n const stream = source as NodeJS.ReadableStream;\n this.lock.registerCleanup(() => {\n const s = stream as NodeJS.ReadableStream & { destroy?: () => void };\n if (typeof s.destroy === 'function') s.destroy();\n });\n\n const 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 const fd = result.fd;\n // Register cleanup for file descriptor\n this.lock.registerCleanup(() => {\n fs.closeSync(fd);\n });\n }\n if (result.tempPath) {\n const tp = result.tempPath;\n // Register cleanup for temp file\n this.lock.registerCleanup(() => {\n try {\n rmSync(tp);\n } catch (_e) {\n /* ignore */\n }\n });\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 const 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","onDestroy","err","BaseIterator","prototype","end","call","queue","Queue","cancelled","archiveSource","setup","undefined","processing","push","setPassword","password","defer","cb","fs","stat","statErr","stats","done","open","fd","FileSource","size","registerCleanup","closeSync","stream","s","destroy","tempPath","path","join","tmpdir","shortHash","process","cwd","tempSuffix","streamToSource","memoryThreshold","result","Error","tp","rmSync","_e","SevenZipParser","parse","iterator","parseErr","await","remove","nextEntry","release"],"mappings":"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"}
@@ -23,9 +23,7 @@ function _interop_require_default(obj) {
23
23
  * - Falls back to os-shim on Node 0.8
24
24
  */ var hasTmpdir = typeof _os.default.tmpdir === 'function';
25
25
  function tmpdir() {
26
- if (hasTmpdir) {
27
- return _os.default.tmpdir();
28
- }
26
+ if (hasTmpdir) return _os.default.tmpdir();
29
27
  var osShim = require('os-shim');
30
28
  return osShim.tmpdir();
31
29
  }
@@ -1 +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 */\nconst hasTmpdir = typeof os.tmpdir === 'function';\n\nexport function tmpdir(): string {\n if (hasTmpdir) {\n return os.tmpdir();\n }\n const 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,IAAMC,YAAY,OAAOC,WAAE,CAACF,MAAM,KAAK;AAEhC,SAASA;IACd,IAAIC,WAAW;QACb,OAAOC,WAAE,CAACF,MAAM;IAClB;IACA,IAAMG,SAASC,QAAQ;IACvB,OAAOD,OAAOH,MAAM;AACtB"}
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 */\nconst hasTmpdir = typeof os.tmpdir === 'function';\nexport function tmpdir(): string {\n if (hasTmpdir) return os.tmpdir();\n const osShim = require('os-shim');\n return osShim.tmpdir();\n}\n"],"names":["tmpdir","hasTmpdir","os","osShim","require"],"mappings":"AAAA;;;CAGC;;;;+BASeA;;;eAAAA;;;yDARD;;;;;;AAEf;;;;CAIC,GACD,IAAMC,YAAY,OAAOC,WAAE,CAACF,MAAM,KAAK;AAChC,SAASA;IACd,IAAIC,WAAW,OAAOC,WAAE,CAACF,MAAM;IAC/B,IAAMG,SAASC,QAAQ;IACvB,OAAOD,OAAOH,MAAM;AACtB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ArchiveSource - Abstraction for reading 7z archive data
3
+ *
4
+ * Provides a common interface for reading archive data from either
5
+ * a file descriptor or an in-memory buffer.
6
+ */
7
+ /**
8
+ * Archive source abstraction - allows reading from file descriptor or buffer
9
+ */
10
+ export interface ArchiveSource {
11
+ read(position: number, length: number): Buffer;
12
+ getSize(): number;
13
+ close(): void;
14
+ }
15
+ /**
16
+ * Buffer-based archive source
17
+ *
18
+ * Used when the entire archive is already in memory.
19
+ */
20
+ export declare class BufferSource implements ArchiveSource {
21
+ private buffer;
22
+ constructor(buffer: Buffer);
23
+ read(position: number, length: number): Buffer;
24
+ getSize(): number;
25
+ close(): void;
26
+ }
27
+ /**
28
+ * File descriptor based archive source
29
+ *
30
+ * Used for reading directly from a file on disk.
31
+ * More memory efficient for large archives.
32
+ */
33
+ export declare class FileSource implements ArchiveSource {
34
+ private fd;
35
+ private size;
36
+ constructor(fd: number, size: number);
37
+ read(position: number, length: number): Buffer;
38
+ getSize(): number;
39
+ close(): void;
40
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ArchiveSource - Abstraction for reading 7z archive data
3
+ *
4
+ * Provides a common interface for reading archive data from either
5
+ * a file descriptor or an in-memory buffer.
6
+ */
7
+ /**
8
+ * Archive source abstraction - allows reading from file descriptor or buffer
9
+ */
10
+ export interface ArchiveSource {
11
+ read(position: number, length: number): Buffer;
12
+ getSize(): number;
13
+ close(): void;
14
+ }
15
+ /**
16
+ * Buffer-based archive source
17
+ *
18
+ * Used when the entire archive is already in memory.
19
+ */
20
+ export declare class BufferSource implements ArchiveSource {
21
+ private buffer;
22
+ constructor(buffer: Buffer);
23
+ read(position: number, length: number): Buffer;
24
+ getSize(): number;
25
+ close(): void;
26
+ }
27
+ /**
28
+ * File descriptor based archive source
29
+ *
30
+ * Used for reading directly from a file on disk.
31
+ * More memory efficient for large archives.
32
+ */
33
+ export declare class FileSource implements ArchiveSource {
34
+ private fd;
35
+ private size;
36
+ constructor(fd: number, size: number);
37
+ read(position: number, length: number): Buffer;
38
+ getSize(): number;
39
+ close(): void;
40
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ArchiveSource - Abstraction for reading 7z archive data
3
+ *
4
+ * Provides a common interface for reading archive data from either
5
+ * a file descriptor or an in-memory buffer.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ function _export(target, all) {
11
+ for(var name in all)Object.defineProperty(target, name, {
12
+ enumerable: true,
13
+ get: Object.getOwnPropertyDescriptor(all, name).get
14
+ });
15
+ }
16
+ _export(exports, {
17
+ get BufferSource () {
18
+ return BufferSource;
19
+ },
20
+ get FileSource () {
21
+ return FileSource;
22
+ }
23
+ });
24
+ var _extractbaseiterator = require("extract-base-iterator");
25
+ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
26
+ function _class_call_check(instance, Constructor) {
27
+ if (!(instance instanceof Constructor)) {
28
+ throw new TypeError("Cannot call a class as a function");
29
+ }
30
+ }
31
+ function _interop_require_default(obj) {
32
+ return obj && obj.__esModule ? obj : {
33
+ default: obj
34
+ };
35
+ }
36
+ var BufferSource = /*#__PURE__*/ function() {
37
+ "use strict";
38
+ function BufferSource(buffer) {
39
+ _class_call_check(this, BufferSource);
40
+ this.buffer = buffer;
41
+ }
42
+ var _proto = BufferSource.prototype;
43
+ _proto.read = function read(position, length) {
44
+ return this.buffer.slice(position, position + length);
45
+ };
46
+ _proto.getSize = function getSize() {
47
+ return this.buffer.length;
48
+ };
49
+ _proto.close = function close() {
50
+ // Nothing to close for buffer
51
+ };
52
+ return BufferSource;
53
+ }();
54
+ var FileSource = /*#__PURE__*/ function() {
55
+ "use strict";
56
+ function FileSource(fd, size) {
57
+ _class_call_check(this, FileSource);
58
+ this.fd = fd;
59
+ this.size = size;
60
+ }
61
+ var _proto = FileSource.prototype;
62
+ _proto.read = function read(position, length) {
63
+ var buf = (0, _extractbaseiterator.allocBuffer)(length);
64
+ var bytesRead = _fs.default.readSync(this.fd, buf, 0, length, position);
65
+ if (bytesRead < length) {
66
+ return buf.slice(0, bytesRead);
67
+ }
68
+ return buf;
69
+ };
70
+ _proto.getSize = function getSize() {
71
+ return this.size;
72
+ };
73
+ _proto.close = function close() {
74
+ try {
75
+ _fs.default.closeSync(this.fd);
76
+ } catch (_e) {
77
+ // Ignore close errors
78
+ }
79
+ };
80
+ return FileSource;
81
+ }();
82
+ /* 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/sevenz/ArchiveSource.ts"],"sourcesContent":["/**\n * ArchiveSource - Abstraction for reading 7z archive data\n *\n * Provides a common interface for reading archive data from either\n * a file descriptor or an in-memory buffer.\n */\n\nimport { allocBuffer } from 'extract-base-iterator';\nimport fs from 'fs';\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 *\n * Used when the entire archive is already in memory.\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 *\n * Used for reading directly from a file on disk.\n * More memory efficient for large archives.\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 const buf = allocBuffer(length);\n const 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"],"names":["BufferSource","FileSource","buffer","read","position","length","slice","getSize","close","fd","size","buf","allocBuffer","bytesRead","fs","readSync","closeSync","_e"],"mappings":"AAAA;;;;;CAKC;;;;;;;;;;;QAmBYA;eAAAA;;QA0BAC;eAAAA;;;mCA3Ce;yDACb;;;;;;;;;;;AAgBR,IAAA,AAAMD,6BAAN;;aAAMA,aAGCE,MAAc;gCAHfF;QAIT,IAAI,CAACE,MAAM,GAAGA;;iBAJLF;IAOXG,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;WAjBWR;;AA0BN,IAAA,AAAMC,2BAAN;;aAAMA,WAICQ,EAAU,EAAEC,IAAY;gCAJzBT;QAKT,IAAI,CAACQ,EAAE,GAAGA;QACV,IAAI,CAACC,IAAI,GAAGA;;iBANHT;IASXE,OAAAA,IAOC,GAPDA,SAAAA,KAAKC,QAAgB,EAAEC,MAAc;QACnC,IAAMM,MAAMC,IAAAA,gCAAW,EAACP;QACxB,IAAMQ,YAAYC,WAAE,CAACC,QAAQ,CAAC,IAAI,CAACN,EAAE,EAAEE,KAAK,GAAGN,QAAQD;QACvD,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;WA5BWhB"}
@@ -1,5 +1,26 @@
1
+ /**
2
+ * SevenZipParser - Main 7z archive parser
3
+ *
4
+ * Handles reading archive structure and providing file streams.
5
+ *
6
+ * Parser Flow:
7
+ * 1. Read signature header (32 bytes) to get header location
8
+ * 2. Read encoded header from nextHeaderOffset
9
+ * 3. If header is compressed, decompress it first
10
+ * 4. Parse streams info (folder structure, pack positions)
11
+ * 5. Parse files info (names, sizes, attributes)
12
+ * 6. Build entry list for iteration
13
+ *
14
+ * Decompression:
15
+ * - 7z uses "folders" as decompression units
16
+ * - Solid archives: multiple files share one folder (decompress once)
17
+ * - Non-solid: one file per folder
18
+ * - Supports LZMA, LZMA2, COPY, BCJ2, and other codecs
19
+ */
1
20
  import Stream from 'stream';
21
+ import type { ArchiveSource } from './ArchiveSource.js';
2
22
  type Readable = Stream.Readable;
23
+ export { type ArchiveSource, BufferSource, FileSource } from './ArchiveSource.js';
3
24
  export interface SevenZipEntry {
4
25
  name: string;
5
26
  path: string;
@@ -16,35 +37,6 @@ export interface SevenZipEntry {
16
37
  _hasStream: boolean;
17
38
  _crc?: number;
18
39
  }
19
- /**
20
- * Archive source abstraction - allows reading from file descriptor or buffer
21
- */
22
- export interface ArchiveSource {
23
- read(position: number, length: number): Buffer;
24
- getSize(): number;
25
- close(): void;
26
- }
27
- /**
28
- * Buffer-based archive source
29
- */
30
- export declare class BufferSource implements ArchiveSource {
31
- private buffer;
32
- constructor(buffer: Buffer);
33
- read(position: number, length: number): Buffer;
34
- getSize(): number;
35
- close(): void;
36
- }
37
- /**
38
- * File descriptor based archive source
39
- */
40
- export declare class FileSource implements ArchiveSource {
41
- private fd;
42
- private size;
43
- constructor(fd: number, size: number);
44
- read(position: number, length: number): Buffer;
45
- getSize(): number;
46
- close(): void;
47
- }
48
40
  /**
49
41
  * SevenZipParser - parses 7z archives and provides entry iteration
50
42
  */
@@ -122,4 +114,3 @@ export declare class SevenZipParser {
122
114
  */
123
115
  close(): void;
124
116
  }
125
- export {};
@@ -1,5 +1,26 @@
1
+ /**
2
+ * SevenZipParser - Main 7z archive parser
3
+ *
4
+ * Handles reading archive structure and providing file streams.
5
+ *
6
+ * Parser Flow:
7
+ * 1. Read signature header (32 bytes) to get header location
8
+ * 2. Read encoded header from nextHeaderOffset
9
+ * 3. If header is compressed, decompress it first
10
+ * 4. Parse streams info (folder structure, pack positions)
11
+ * 5. Parse files info (names, sizes, attributes)
12
+ * 6. Build entry list for iteration
13
+ *
14
+ * Decompression:
15
+ * - 7z uses "folders" as decompression units
16
+ * - Solid archives: multiple files share one folder (decompress once)
17
+ * - Non-solid: one file per folder
18
+ * - Supports LZMA, LZMA2, COPY, BCJ2, and other codecs
19
+ */
1
20
  import Stream from 'stream';
21
+ import type { ArchiveSource } from './ArchiveSource.js';
2
22
  type Readable = Stream.Readable;
23
+ export { type ArchiveSource, BufferSource, FileSource } from './ArchiveSource.js';
3
24
  export interface SevenZipEntry {
4
25
  name: string;
5
26
  path: string;
@@ -16,35 +37,6 @@ export interface SevenZipEntry {
16
37
  _hasStream: boolean;
17
38
  _crc?: number;
18
39
  }
19
- /**
20
- * Archive source abstraction - allows reading from file descriptor or buffer
21
- */
22
- export interface ArchiveSource {
23
- read(position: number, length: number): Buffer;
24
- getSize(): number;
25
- close(): void;
26
- }
27
- /**
28
- * Buffer-based archive source
29
- */
30
- export declare class BufferSource implements ArchiveSource {
31
- private buffer;
32
- constructor(buffer: Buffer);
33
- read(position: number, length: number): Buffer;
34
- getSize(): number;
35
- close(): void;
36
- }
37
- /**
38
- * File descriptor based archive source
39
- */
40
- export declare class FileSource implements ArchiveSource {
41
- private fd;
42
- private size;
43
- constructor(fd: number, size: number);
44
- read(position: number, length: number): Buffer;
45
- getSize(): number;
46
- close(): void;
47
- }
48
40
  /**
49
41
  * SevenZipParser - parses 7z archives and provides entry iteration
50
42
  */
@@ -122,4 +114,3 @@ export declare class SevenZipParser {
122
114
  */
123
115
  close(): void;
124
116
  }
125
- export {};