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.
- package/README.md +3 -3
- package/dist/cjs/FileEntry.d.cts +3 -3
- package/dist/cjs/FileEntry.d.ts +3 -3
- package/dist/cjs/FileEntry.js.map +1 -1
- package/dist/cjs/SevenZipIterator.d.cts +4 -4
- package/dist/cjs/SevenZipIterator.d.ts +4 -4
- package/dist/cjs/SevenZipIterator.js +70 -9
- package/dist/cjs/SevenZipIterator.js.map +1 -1
- package/dist/cjs/compat.js +1 -3
- package/dist/cjs/compat.js.map +1 -1
- package/dist/cjs/sevenz/ArchiveSource.d.cts +40 -0
- package/dist/cjs/sevenz/ArchiveSource.d.ts +40 -0
- package/dist/cjs/sevenz/ArchiveSource.js +82 -0
- package/dist/cjs/sevenz/ArchiveSource.js.map +1 -0
- package/dist/cjs/sevenz/SevenZipParser.d.cts +21 -30
- package/dist/cjs/sevenz/SevenZipParser.d.ts +21 -30
- package/dist/cjs/sevenz/SevenZipParser.js +22 -52
- package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
- package/dist/cjs/types.d.cts +4 -12
- package/dist/cjs/types.d.ts +4 -12
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/FileEntry.d.ts +3 -3
- package/dist/esm/FileEntry.js.map +1 -1
- package/dist/esm/SevenZipIterator.d.ts +4 -4
- package/dist/esm/SevenZipIterator.js +26 -8
- package/dist/esm/SevenZipIterator.js.map +1 -1
- package/dist/esm/compat.js +1 -3
- package/dist/esm/compat.js.map +1 -1
- package/dist/esm/sevenz/ArchiveSource.d.ts +40 -0
- package/dist/esm/sevenz/ArchiveSource.js +54 -0
- package/dist/esm/sevenz/ArchiveSource.js.map +1 -0
- package/dist/esm/sevenz/SevenZipParser.d.ts +21 -30
- package/dist/esm/sevenz/SevenZipParser.js +21 -46
- package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
- package/dist/esm/types.d.ts +4 -12
- package/dist/esm/types.js +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +16 -16
- package/dist/cjs/lib/Lock.d.cts +0 -12
- package/dist/cjs/lib/Lock.d.ts +0 -12
- package/dist/cjs/lib/Lock.js +0 -71
- package/dist/cjs/lib/Lock.js.map +0 -1
- package/dist/esm/lib/Lock.d.ts +0 -12
- package/dist/esm/lib/Lock.js +0 -47
- 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
|
|
package/dist/cjs/FileEntry.d.cts
CHANGED
|
@@ -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
|
|
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:
|
|
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;
|
package/dist/cjs/FileEntry.d.ts
CHANGED
|
@@ -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
|
|
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:
|
|
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
|
|
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 {
|
|
3
|
-
export default class SevenZipIterator extends BaseIterator {
|
|
4
|
-
lock:
|
|
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 {
|
|
3
|
-
export default class SevenZipIterator extends BaseIterator {
|
|
4
|
-
lock:
|
|
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__*/
|
|
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
|
|
120
|
-
_this.lock.
|
|
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
|
-
|
|
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
|
-
//
|
|
149
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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":";;;;;;;eAwCqBA;;;2EAxCc;yDACpB;8BACQ;2DACN;8DACC;gEACI;iEACC;wBACA;uEAC2B;kEAC5B;uBACM;gCACuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAInF;;CAEC,GACD,IAAA,AAAMC,8BAAN;;aAAMA,cAKQC,MAAsB;gCAL9BD;aAGIE,QAAQ;QAGd,IAAI,CAACD,MAAM,GAAGA;QACd,IAAI,CAACE,OAAO,GAAGF,OAAOG,UAAU;;iBAP9BJ;IAUJK,OAAAA,IAKC,GALDA,SAAAA;QACE,IAAI,IAAI,CAACH,KAAK,IAAI,IAAI,CAACC,OAAO,CAACG,MAAM,EAAE;YACrC,OAAO;QACT;QACA,OAAO,IAAI,CAACH,OAAO,CAAC,IAAI,CAACD,KAAK,GAAG;IACnC;IAEAK,OAAAA,SAEC,GAFDA,SAAAA;QACE,OAAO,IAAI,CAACN,MAAM;IACpB;WAnBID;;AAsBS,IAAA,AAAMD,iCAAN;;cAAMA;aAAAA,iBAIPS,MAAsC;YAAEC,UAAAA,iEAA0B,CAAC;gCAJ5DV;;gBAKjB,kBALiBA;YAKXU;;QACN,MAAKC,IAAI,GAAG,IAAIC,yBAAI;QACpB,MAAKD,IAAI,CAACE,SAAS,GAAG,SAACC;mBAAQC,4BAAY,CAACC,SAAS,CAACC,GAAG,CAACC,IAAI,QAAOJ;;QACrE,IAAMK,QAAQ,IAAIC,gBAAK,CAAC;QACxB,IAAIC,YAAY;QAChB,IAAIC,gBAAsC;QAC1C,IAAMC,QAAQ;YACZF,YAAY;YACZ,OAAOG;QACT;QACA,MAAKC,UAAU,CAACC,IAAI,CAACH;QAErB,0CAA0C;QAC1CI,IAAAA,oBAAW,EAACjB,QAAQkB,QAAQ,IAAI;QAEhC,IAAI,OAAOnB,WAAW,UAAU;YAC9B,4CAA4C;YAC5CU,MAAMU,KAAK,CAAC,SAACC;gBACXC,WAAE,CAACC,IAAI,CAACvB,QAAQ,SAACwB,SAASC;oBACxB,IAAI,MAAKC,IAAI,IAAId,WAAW;oBAC5B,IAAIY,SAAS,OAAOH,GAAGG;oBAEvBF,WAAE,CAACK,IAAI,CAAC3B,QAAQ,KAAK,SAACK,KAAKuB;wBACzB,IAAI,MAAKF,IAAI,IAAId,WAAW;wBAC5B,IAAIP,KAAK,OAAOgB,GAAGhB;wBAEnBQ,gBAAgB,IAAIgB,4BAAU,CAACD,IAAIH,MAAMK,IAAI;wBAC7C,uCAAuC;wBACvC,MAAK5B,IAAI,CAAC6B,eAAe,CAAC;4BACxBT,WAAE,CAACU,SAAS,CAACJ;wBACf;wBACAP;oBACF;gBACF;YACF;QACF,OAAO;YACL,sDAAsD;YACtD,qCAAqC;YACrC,IAAMY,SAASjC;YACf,MAAKE,IAAI,CAAC6B,eAAe,CAAC;gBACxB,IAAMG,IAAID;gBACV,IAAI,OAAOC,EAAEC,OAAO,KAAK,YAAYD,EAAEC,OAAO;YAChD;YAEA,IAAMC,WAAWC,aAAI,CAACC,IAAI,CAACC,IAAAA,gBAAM,KAAI,eAAeC,IAAAA,kBAAS,EAACC,QAAQC,GAAG,KAAKC,IAAAA,mBAAU,EAAC;YACzFjC,MAAMU,KAAK,CAAC,SAACC;gBACXuB,IAAAA,yBAAc,EACZ5C,QACA;oBACE6C,iBAAiB5C,QAAQ4C,eAAe;oBACxCT,UAAUA;gBACZ,GACA,SAAC/B,KAAayC;oBACZ,IAAI,MAAKpB,IAAI,IAAId,WAAW;oBAC5B,IAAIP,KAAK,OAAOgB,GAAGhB;oBACnB,IAAI,CAACyC,QAAQ,OAAOzB,GAAG,IAAI0B,MAAM;oBAEjClC,gBAAgBiC,OAAO9C,MAAM;oBAC7B,IAAI8C,OAAOlB,EAAE,KAAKb,WAAW;wBAC3B,IAAMa,KAAKkB,OAAOlB,EAAE;wBACpB,uCAAuC;wBACvC,MAAK1B,IAAI,CAAC6B,eAAe,CAAC;4BACxBT,WAAE,CAACU,SAAS,CAACJ;wBACf;oBACF;oBACA,IAAIkB,OAAOV,QAAQ,EAAE;wBACnB,IAAMY,KAAKF,OAAOV,QAAQ;wBAC1B,iCAAiC;wBACjC,MAAKlC,IAAI,CAAC6B,eAAe,CAAC;4BACxB,IAAI;gCACFkB,IAAAA,sBAAM,EAACD;4BACT,EAAE,OAAOE,IAAI;4BACX,UAAU,GACZ;wBACF;oBACF;oBACA7B;gBACF;YAEJ;QACF;QAEA,2BAA2B;QAC3BX,MAAMU,KAAK,CAAC,SAACC;YACX,IAAI,MAAKK,IAAI,IAAId,WAAW;YAC5B,IAAI,CAACC,eAAe,OAAOQ,GAAG,IAAI0B,MAAM;YAExC,IAAI;gBACF,IAAMtD,SAAS,IAAI0D,gCAAc,CAACtC;gBAClCpB,OAAO2D,KAAK;gBACZ,MAAKC,QAAQ,GAAG,IAAI7D,cAAcC;gBAClC4B;YACF,EAAE,OAAOiC,UAAU;gBACjBjC,GAAGiC;YACL;QACF;QAEA,mBAAmB;QACnB5C,MAAM6C,KAAK,CAAC,SAAClD;YACX,MAAKW,UAAU,CAACwC,MAAM,CAAC1C;YACvB,IAAI,MAAKY,IAAI,IAAId,WAAW;YAC5BP,MAAM,MAAKG,GAAG,CAACH,OAAO,MAAKY,IAAI,CAACwC,oBAAS;QAC3C;;;iBA3GiBlE;IA8GnBiB,OAAAA,GASC,GATDA,SAAAA,IAAIH,GAAW;QACb,IAAI,IAAI,CAACH,IAAI,EAAE;YACb,IAAMA,OAAO,IAAI,CAACA,IAAI;YACtB,IAAI,CAACA,IAAI,GAAG,MAAM,8CAA8C;YAChEA,KAAKG,GAAG,GAAGA;YACXH,KAAKwD,OAAO;QACd;QACA,yDAAyD;QACzD,IAAI,CAACL,QAAQ,GAAG;IAClB;WAvHmB9D;EAAyBe,4BAAY"}
|
package/dist/cjs/compat.js
CHANGED
|
@@ -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
|
}
|
package/dist/cjs/compat.js.map
CHANGED
|
@@ -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';\
|
|
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 {};
|