7z-iterator 1.1.2 → 1.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/dist/cjs/FileEntry.d.cts +12 -4
- package/dist/cjs/FileEntry.d.ts +12 -4
- package/dist/cjs/FileEntry.js +52 -24
- package/dist/cjs/FileEntry.js.map +1 -1
- package/dist/cjs/SevenZipIterator.d.cts +25 -2
- package/dist/cjs/SevenZipIterator.d.ts +25 -2
- package/dist/cjs/SevenZipIterator.js +68 -21
- package/dist/cjs/SevenZipIterator.js.map +1 -1
- package/dist/cjs/index.d.cts +1 -2
- package/dist/cjs/index.d.ts +1 -2
- package/dist/cjs/index.js +19 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/streamToSource.d.cts +8 -11
- package/dist/cjs/lib/streamToSource.d.ts +8 -11
- package/dist/cjs/lib/streamToSource.js +21 -67
- package/dist/cjs/lib/streamToSource.js.map +1 -1
- package/dist/cjs/lzma/Lzma2ChunkParser.d.cts +73 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.d.ts +73 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.js +148 -0
- package/dist/cjs/lzma/Lzma2ChunkParser.js.map +1 -0
- package/dist/cjs/lzma/index.d.cts +13 -0
- package/dist/cjs/lzma/index.d.ts +13 -0
- package/dist/cjs/lzma/index.js +63 -0
- package/dist/cjs/lzma/index.js.map +1 -0
- package/dist/cjs/lzma/stream/transforms.d.cts +38 -0
- package/dist/cjs/lzma/stream/transforms.d.ts +38 -0
- package/dist/cjs/lzma/stream/transforms.js +149 -0
- package/dist/cjs/lzma/stream/transforms.js.map +1 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.cts +30 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.ts +30 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.js +135 -0
- package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +1 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.d.cts +82 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.d.ts +82 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.js +440 -0
- package/dist/cjs/lzma/sync/LzmaDecoder.js.map +1 -0
- package/dist/cjs/lzma/sync/RangeDecoder.d.cts +69 -0
- package/dist/cjs/lzma/sync/RangeDecoder.d.ts +69 -0
- package/dist/cjs/lzma/sync/RangeDecoder.js +162 -0
- package/dist/cjs/lzma/sync/RangeDecoder.js.map +1 -0
- package/dist/cjs/lzma/types.d.cts +110 -0
- package/dist/cjs/lzma/types.d.ts +110 -0
- package/dist/cjs/lzma/types.js +264 -0
- package/dist/cjs/lzma/types.js.map +1 -0
- package/dist/cjs/nextEntry.js +24 -26
- package/dist/cjs/nextEntry.js.map +1 -1
- package/dist/cjs/sevenz/ArchiveSource.d.cts +16 -0
- package/dist/cjs/sevenz/ArchiveSource.d.ts +16 -0
- package/dist/cjs/sevenz/ArchiveSource.js +69 -0
- package/dist/cjs/sevenz/ArchiveSource.js.map +1 -1
- package/dist/cjs/sevenz/FolderStreamSplitter.d.cts +101 -0
- package/dist/cjs/sevenz/FolderStreamSplitter.d.ts +101 -0
- package/dist/cjs/sevenz/FolderStreamSplitter.js +229 -0
- package/dist/cjs/sevenz/FolderStreamSplitter.js.map +1 -0
- package/dist/cjs/sevenz/SevenZipParser.d.cts +71 -10
- package/dist/cjs/sevenz/SevenZipParser.d.ts +71 -10
- package/dist/cjs/sevenz/SevenZipParser.js +574 -203
- package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BZip2.js +2 -1
- package/dist/cjs/sevenz/codecs/BZip2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Bcj.d.cts +5 -4
- package/dist/cjs/sevenz/codecs/Bcj.d.ts +5 -4
- package/dist/cjs/sevenz/codecs/Bcj.js +102 -8
- package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjArm.d.cts +5 -4
- package/dist/cjs/sevenz/codecs/BcjArm.d.ts +5 -4
- package/dist/cjs/sevenz/codecs/BcjArm.js +51 -9
- package/dist/cjs/sevenz/codecs/BcjArm.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Copy.d.cts +2 -4
- package/dist/cjs/sevenz/codecs/Copy.d.ts +2 -4
- package/dist/cjs/sevenz/codecs/Copy.js +2 -15
- package/dist/cjs/sevenz/codecs/Copy.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Deflate.d.cts +6 -4
- package/dist/cjs/sevenz/codecs/Deflate.d.ts +6 -4
- package/dist/cjs/sevenz/codecs/Deflate.js +4 -9
- package/dist/cjs/sevenz/codecs/Deflate.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Delta.d.cts +5 -4
- package/dist/cjs/sevenz/codecs/Delta.d.ts +5 -4
- package/dist/cjs/sevenz/codecs/Delta.js +29 -10
- package/dist/cjs/sevenz/codecs/Delta.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma.d.cts +5 -2
- package/dist/cjs/sevenz/codecs/Lzma.d.ts +5 -2
- package/dist/cjs/sevenz/codecs/Lzma.js +13 -28
- package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma2.d.cts +9 -3
- package/dist/cjs/sevenz/codecs/Lzma2.d.ts +9 -3
- package/dist/cjs/sevenz/codecs/Lzma2.js +17 -198
- package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +2 -2
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +2 -15
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/cjs/types.d.cts +2 -16
- package/dist/cjs/types.d.ts +2 -16
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/FileEntry.d.ts +12 -4
- package/dist/esm/FileEntry.js +52 -26
- package/dist/esm/FileEntry.js.map +1 -1
- package/dist/esm/SevenZipIterator.d.ts +25 -2
- package/dist/esm/SevenZipIterator.js +69 -22
- package/dist/esm/SevenZipIterator.js.map +1 -1
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/streamToSource.d.ts +8 -11
- package/dist/esm/lib/streamToSource.js +22 -68
- package/dist/esm/lib/streamToSource.js.map +1 -1
- package/dist/esm/lzma/Lzma2ChunkParser.d.ts +73 -0
- package/dist/esm/lzma/Lzma2ChunkParser.js +137 -0
- package/dist/esm/lzma/Lzma2ChunkParser.js.map +1 -0
- package/dist/esm/lzma/index.d.ts +13 -0
- package/dist/esm/lzma/index.js +15 -0
- package/dist/esm/lzma/index.js.map +1 -0
- package/dist/esm/lzma/stream/transforms.d.ts +38 -0
- package/dist/esm/lzma/stream/transforms.js +150 -0
- package/dist/esm/lzma/stream/transforms.js.map +1 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.d.ts +30 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.js +115 -0
- package/dist/esm/lzma/sync/Lzma2Decoder.js.map +1 -0
- package/dist/esm/lzma/sync/LzmaDecoder.d.ts +82 -0
- package/dist/esm/lzma/sync/LzmaDecoder.js +403 -0
- package/dist/esm/lzma/sync/LzmaDecoder.js.map +1 -0
- package/dist/esm/lzma/sync/RangeDecoder.d.ts +69 -0
- package/dist/esm/lzma/sync/RangeDecoder.js +132 -0
- package/dist/esm/lzma/sync/RangeDecoder.js.map +1 -0
- package/dist/esm/lzma/types.d.ts +110 -0
- package/dist/esm/lzma/types.js +154 -0
- package/dist/esm/lzma/types.js.map +1 -0
- package/dist/esm/nextEntry.js +24 -26
- package/dist/esm/nextEntry.js.map +1 -1
- package/dist/esm/sevenz/ArchiveSource.d.ts +16 -0
- package/dist/esm/sevenz/ArchiveSource.js +70 -1
- package/dist/esm/sevenz/ArchiveSource.js.map +1 -1
- package/dist/esm/sevenz/FolderStreamSplitter.d.ts +101 -0
- package/dist/esm/sevenz/FolderStreamSplitter.js +207 -0
- package/dist/esm/sevenz/FolderStreamSplitter.js.map +1 -0
- package/dist/esm/sevenz/SevenZipParser.d.ts +71 -10
- package/dist/esm/sevenz/SevenZipParser.js +414 -198
- package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
- package/dist/esm/sevenz/codecs/BZip2.js +2 -1
- package/dist/esm/sevenz/codecs/BZip2.js.map +1 -1
- package/dist/esm/sevenz/codecs/Bcj.d.ts +5 -4
- package/dist/esm/sevenz/codecs/Bcj.js +106 -6
- package/dist/esm/sevenz/codecs/Bcj.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjArm.d.ts +5 -4
- package/dist/esm/sevenz/codecs/BcjArm.js +55 -7
- package/dist/esm/sevenz/codecs/BcjArm.js.map +1 -1
- package/dist/esm/sevenz/codecs/Copy.d.ts +2 -4
- package/dist/esm/sevenz/codecs/Copy.js +1 -9
- package/dist/esm/sevenz/codecs/Copy.js.map +1 -1
- package/dist/esm/sevenz/codecs/Deflate.d.ts +6 -4
- package/dist/esm/sevenz/codecs/Deflate.js +9 -7
- package/dist/esm/sevenz/codecs/Deflate.js.map +1 -1
- package/dist/esm/sevenz/codecs/Delta.d.ts +5 -4
- package/dist/esm/sevenz/codecs/Delta.js +33 -8
- package/dist/esm/sevenz/codecs/Delta.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma.d.ts +5 -2
- package/dist/esm/sevenz/codecs/Lzma.js +17 -24
- package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma2.d.ts +9 -3
- package/dist/esm/sevenz/codecs/Lzma2.js +15 -196
- package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js +1 -9
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/esm/types.d.ts +2 -16
- package/dist/esm/types.js.map +1 -1
- package/package.json +3 -3
- package/assets/lzma-purejs/LICENSE +0 -11
- package/assets/lzma-purejs/index.js +0 -19
- package/assets/lzma-purejs/lib/LZ/OutWindow.js +0 -78
- package/assets/lzma-purejs/lib/LZ.js +0 -6
- package/assets/lzma-purejs/lib/LZMA/Base.js +0 -48
- package/assets/lzma-purejs/lib/LZMA/Decoder.js +0 -328
- package/assets/lzma-purejs/lib/LZMA.js +0 -6
- package/assets/lzma-purejs/lib/RangeCoder/BitTreeDecoder.js +0 -41
- package/assets/lzma-purejs/lib/RangeCoder/Decoder.js +0 -58
- package/assets/lzma-purejs/lib/RangeCoder/Encoder.js +0 -106
- package/assets/lzma-purejs/lib/RangeCoder.js +0 -10
- package/assets/lzma-purejs/lib/Stream.js +0 -41
- package/assets/lzma-purejs/lib/Util.js +0 -114
- package/assets/lzma-purejs/lib/makeBuffer.js +0 -25
- package/assets/lzma-purejs/package-lock.json +0 -13
- package/assets/lzma-purejs/package.json +0 -8
package/dist/cjs/FileEntry.d.cts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileEntry for 7z archives
|
|
3
|
+
*
|
|
4
|
+
* Wraps a lazy stream - decompression happens when the stream is read.
|
|
5
|
+
* API consistent with zip-iterator and tar-iterator.
|
|
6
|
+
*/
|
|
1
7
|
import { type FileAttributes, FileEntry, type Lock, type NoParamCallback } from 'extract-base-iterator';
|
|
2
|
-
import type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.js';
|
|
3
8
|
import type { ExtractOptions } from './types.js';
|
|
4
9
|
export default class SevenZipFileEntry extends FileEntry {
|
|
5
10
|
private lock;
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
private stream;
|
|
12
|
+
/**
|
|
13
|
+
* Whether this entry's folder supports streaming decompression.
|
|
14
|
+
*/
|
|
15
|
+
readonly _canStream: boolean;
|
|
16
|
+
constructor(attributes: FileAttributes, stream: NodeJS.ReadableStream, lock: Lock, canStream: boolean);
|
|
9
17
|
create(dest: string, callback: NoParamCallback): void;
|
|
10
18
|
create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;
|
|
11
19
|
create(dest: string, options?: ExtractOptions): Promise<boolean>;
|
package/dist/cjs/FileEntry.d.ts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileEntry for 7z archives
|
|
3
|
+
*
|
|
4
|
+
* Wraps a lazy stream - decompression happens when the stream is read.
|
|
5
|
+
* API consistent with zip-iterator and tar-iterator.
|
|
6
|
+
*/
|
|
1
7
|
import { type FileAttributes, FileEntry, type Lock, type NoParamCallback } from 'extract-base-iterator';
|
|
2
|
-
import type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.js';
|
|
3
8
|
import type { ExtractOptions } from './types.js';
|
|
4
9
|
export default class SevenZipFileEntry extends FileEntry {
|
|
5
10
|
private lock;
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
private stream;
|
|
12
|
+
/**
|
|
13
|
+
* Whether this entry's folder supports streaming decompression.
|
|
14
|
+
*/
|
|
15
|
+
readonly _canStream: boolean;
|
|
16
|
+
constructor(attributes: FileAttributes, stream: NodeJS.ReadableStream, lock: Lock, canStream: boolean);
|
|
9
17
|
create(dest: string, callback: NoParamCallback): void;
|
|
10
18
|
create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;
|
|
11
19
|
create(dest: string, options?: ExtractOptions): Promise<boolean>;
|
package/dist/cjs/FileEntry.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* FileEntry for 7z archives
|
|
3
|
+
*
|
|
4
|
+
* Wraps a lazy stream - decompression happens when the stream is read.
|
|
5
|
+
* API consistent with zip-iterator and tar-iterator.
|
|
6
|
+
*/ "use strict";
|
|
2
7
|
Object.defineProperty(exports, "__esModule", {
|
|
3
8
|
value: true
|
|
4
9
|
});
|
|
@@ -8,6 +13,7 @@ Object.defineProperty(exports, "default", {
|
|
|
8
13
|
return SevenZipFileEntry;
|
|
9
14
|
}
|
|
10
15
|
});
|
|
16
|
+
var _calloncefn = /*#__PURE__*/ _interop_require_default(require("call-once-fn"));
|
|
11
17
|
var _extractbaseiterator = require("extract-base-iterator");
|
|
12
18
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
13
19
|
var _onone = /*#__PURE__*/ _interop_require_default(require("on-one"));
|
|
@@ -78,27 +84,24 @@ function _is_native_reflect_construct() {
|
|
|
78
84
|
var SevenZipFileEntry = /*#__PURE__*/ function(FileEntry) {
|
|
79
85
|
"use strict";
|
|
80
86
|
_inherits(SevenZipFileEntry, FileEntry);
|
|
81
|
-
function SevenZipFileEntry(attributes,
|
|
87
|
+
function SevenZipFileEntry(attributes, stream, lock, canStream) {
|
|
82
88
|
_class_call_check(this, SevenZipFileEntry);
|
|
83
89
|
var _this;
|
|
84
90
|
_this = _call_super(this, SevenZipFileEntry, [
|
|
85
91
|
attributes
|
|
86
92
|
]);
|
|
87
|
-
_this.
|
|
88
|
-
_this.parser = parser;
|
|
93
|
+
_this.stream = stream;
|
|
89
94
|
_this.lock = lock;
|
|
90
95
|
_this.lock.retain();
|
|
96
|
+
_this._canStream = canStream;
|
|
91
97
|
return _this;
|
|
92
98
|
}
|
|
93
99
|
var _proto = SevenZipFileEntry.prototype;
|
|
94
100
|
_proto.create = function create(dest, options, callback) {
|
|
95
101
|
var _this = this;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
options = null;
|
|
99
|
-
}
|
|
102
|
+
callback = typeof options === 'function' ? options : callback;
|
|
103
|
+
options = typeof options === 'function' ? {} : options || {};
|
|
100
104
|
if (typeof callback === 'function') {
|
|
101
|
-
options = options || {};
|
|
102
105
|
return _extractbaseiterator.FileEntry.prototype.create.call(this, dest, options, function(err) {
|
|
103
106
|
callback(err);
|
|
104
107
|
if (_this.lock) {
|
|
@@ -108,34 +111,59 @@ var SevenZipFileEntry = /*#__PURE__*/ function(FileEntry) {
|
|
|
108
111
|
});
|
|
109
112
|
}
|
|
110
113
|
return new Promise(function(resolve, reject) {
|
|
111
|
-
_this.create(dest, options, function(err, done) {
|
|
114
|
+
return _this.create(dest, options, function(err, done) {
|
|
112
115
|
err ? reject(err) : resolve(done);
|
|
113
116
|
});
|
|
114
117
|
});
|
|
115
118
|
};
|
|
116
119
|
_proto._writeFile = function _writeFile(fullPath, _options, callback) {
|
|
117
|
-
if (!this.
|
|
118
|
-
callback(new Error('7z FileEntry missing
|
|
120
|
+
if (!this.stream) {
|
|
121
|
+
callback(new Error('7z FileEntry missing stream. Check for calling create multiple times'));
|
|
119
122
|
return;
|
|
120
123
|
}
|
|
121
|
-
|
|
122
|
-
this.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
var stream = this.stream;
|
|
125
|
+
this.stream = null; // Prevent reuse
|
|
126
|
+
// Use once since errors can come from either stream
|
|
127
|
+
var cb = (0, _calloncefn.default)(function(err) {
|
|
128
|
+
err ? callback(err) : (0, _extractbaseiterator.waitForAccess)(fullPath, callback);
|
|
129
|
+
});
|
|
130
|
+
try {
|
|
131
|
+
var writeStream = _fs.default.createWriteStream(fullPath);
|
|
132
|
+
// Listen for errors on source stream (errors don't propagate through pipe)
|
|
133
|
+
stream.on('error', function(streamErr) {
|
|
134
|
+
// Destroy the write stream on source error.
|
|
135
|
+
// On Node 0.8, destroy() emits 'close' before 'error'. Since on-one is listening
|
|
136
|
+
// for ['error', 'close', 'finish'], it catches 'close' first, calls our callback,
|
|
137
|
+
// and removes ALL listeners - including the 'error' listener. The subsequent EBADF
|
|
138
|
+
// error then fires with no handler, causing an uncaught exception.
|
|
139
|
+
// Adding a no-op error handler ensures there's always a listener for any error.
|
|
140
|
+
var ws = writeStream;
|
|
141
|
+
writeStream.on('error', function() {});
|
|
142
|
+
if (typeof ws.destroy === 'function') ws.destroy();
|
|
143
|
+
cb(streamErr);
|
|
144
|
+
});
|
|
145
|
+
// Pipe and listen for write stream completion/errors
|
|
146
|
+
stream.pipe(writeStream);
|
|
147
|
+
(0, _onone.default)(writeStream, [
|
|
127
148
|
'error',
|
|
128
149
|
'close',
|
|
129
150
|
'finish'
|
|
130
|
-
],
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
151
|
+
], cb);
|
|
152
|
+
} catch (pipeErr) {
|
|
153
|
+
cb(pipeErr);
|
|
154
|
+
}
|
|
134
155
|
};
|
|
135
156
|
_proto.destroy = function destroy() {
|
|
136
157
|
_extractbaseiterator.FileEntry.prototype.destroy.call(this);
|
|
137
|
-
this.
|
|
138
|
-
|
|
158
|
+
if (this.stream) {
|
|
159
|
+
// Use destroy() to prevent decompression (our stream has custom destroy that sets destroyed flag)
|
|
160
|
+
// Fallback to resume() for older Node versions without destroy()
|
|
161
|
+
var s = this.stream;
|
|
162
|
+
if (typeof s.destroy === 'function') {
|
|
163
|
+
s.destroy();
|
|
164
|
+
}
|
|
165
|
+
this.stream = null;
|
|
166
|
+
}
|
|
139
167
|
if (this.lock) {
|
|
140
168
|
this.lock.release();
|
|
141
169
|
this.lock = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/FileEntry.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/FileEntry.ts"],"sourcesContent":["/**\n * FileEntry for 7z archives\n *\n * Wraps a lazy stream - decompression happens when the stream is read.\n * API consistent with zip-iterator and tar-iterator.\n */\n\nimport once from 'call-once-fn';\nimport { type FileAttributes, FileEntry, type Lock, type NoParamCallback, waitForAccess } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport type { ExtractOptions } from './types.ts';\n\nexport default class SevenZipFileEntry extends FileEntry {\n private lock: Lock;\n private stream: NodeJS.ReadableStream;\n\n /**\n * Whether this entry's folder supports streaming decompression.\n */\n readonly _canStream: boolean;\n\n constructor(attributes: FileAttributes, stream: NodeJS.ReadableStream, lock: Lock, canStream: boolean) {\n super(attributes);\n this.stream = stream;\n this.lock = lock;\n this.lock.retain();\n this._canStream = canStream;\n }\n\n create(dest: string, callback: NoParamCallback): void;\n create(dest: string, options: ExtractOptions, callback: NoParamCallback): void;\n create(dest: string, options?: ExtractOptions): Promise<boolean>;\n create(dest: string, options?: ExtractOptions | NoParamCallback, callback?: NoParamCallback): void | Promise<boolean> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ExtractOptions);\n\n if (typeof callback === 'function') {\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): void {\n if (!this.stream) {\n callback(new Error('7z FileEntry missing stream. Check for calling create multiple times'));\n return;\n }\n\n const stream = this.stream;\n this.stream = null; // Prevent reuse\n\n // Use once since errors can come from either stream\n const cb = once((err?: Error) => {\n err ? callback(err) : waitForAccess(fullPath, callback);\n });\n\n try {\n const writeStream = fs.createWriteStream(fullPath);\n\n // Listen for errors on source stream (errors don't propagate through pipe)\n stream.on('error', (streamErr: Error) => {\n // Destroy the write stream on source error.\n // On Node 0.8, destroy() emits 'close' before 'error'. Since on-one is listening\n // for ['error', 'close', 'finish'], it catches 'close' first, calls our callback,\n // and removes ALL listeners - including the 'error' listener. The subsequent EBADF\n // error then fires with no handler, causing an uncaught exception.\n // Adding a no-op error handler ensures there's always a listener for any error.\n const ws = writeStream as fs.WriteStream & { destroy?: () => void };\n writeStream.on('error', () => {});\n if (typeof ws.destroy === 'function') ws.destroy();\n cb(streamErr);\n });\n\n // Pipe and listen for write stream completion/errors\n stream.pipe(writeStream);\n oo(writeStream, ['error', 'close', 'finish'], cb);\n } catch (pipeErr) {\n cb(pipeErr);\n }\n }\n\n destroy() {\n FileEntry.prototype.destroy.call(this);\n if (this.stream) {\n // Use destroy() to prevent decompression (our stream has custom destroy that sets destroyed flag)\n // Fallback to resume() for older Node versions without destroy()\n const s = this.stream as NodeJS.ReadableStream & { destroy?: () => void };\n if (typeof s.destroy === 'function') {\n s.destroy();\n }\n this.stream = null;\n }\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n }\n}\n"],"names":["SevenZipFileEntry","attributes","stream","lock","canStream","retain","_canStream","create","dest","options","callback","FileEntry","prototype","call","err","release","Promise","resolve","reject","done","_writeFile","fullPath","_options","Error","cb","once","waitForAccess","writeStream","fs","createWriteStream","on","streamErr","ws","destroy","pipe","oo","pipeErr","s"],"mappings":"AAAA;;;;;CAKC;;;;;;;eAQoBA;;;iEANJ;mCAC8E;yDAChF;4DACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAA,AAAMA,kCAAN;;cAAMA;aAAAA,kBASPC,UAA0B,EAAEC,MAA6B,EAAEC,IAAU,EAAEC,SAAkB;gCATlFJ;;gBAUjB,kBAViBA;YAUXC;;QACN,MAAKC,MAAM,GAAGA;QACd,MAAKC,IAAI,GAAGA;QACZ,MAAKA,IAAI,CAACE,MAAM;QAChB,MAAKC,UAAU,GAAGF;;;iBAdDJ;IAoBnBO,OAAAA,MAkBC,GAlBDA,SAAAA,OAAOC,IAAY,EAAEC,OAA0C,EAAEC,QAA0B;;QACzFA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;QACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;QAE7D,IAAI,OAAOC,aAAa,YAAY;YAClC,OAAOC,8BAAS,CAACC,SAAS,CAACL,MAAM,CAACM,IAAI,CAAC,IAAI,EAAEL,MAAMC,SAAS,SAACK;gBAC3DJ,SAASI;gBACT,IAAI,MAAKX,IAAI,EAAE;oBACb,MAAKA,IAAI,CAACY,OAAO;oBACjB,MAAKZ,IAAI,GAAG;gBACd;YACF;QACF;QACA,OAAO,IAAIa,QAAQ,SAACC,SAASC;mBAC3B,MAAKX,MAAM,CAACC,MAAMC,SAAS,SAACK,KAAaK;gBACvCL,MAAMI,OAAOJ,OAAOG,QAAQE;YAC9B;;IAEJ;IAEAC,OAAAA,UAqCC,GArCDA,SAAAA,WAAWC,QAAgB,EAAEC,QAAwB,EAAEZ,QAAyB;QAC9E,IAAI,CAAC,IAAI,CAACR,MAAM,EAAE;YAChBQ,SAAS,IAAIa,MAAM;YACnB;QACF;QAEA,IAAMrB,SAAS,IAAI,CAACA,MAAM;QAC1B,IAAI,CAACA,MAAM,GAAG,MAAM,gBAAgB;QAEpC,oDAAoD;QACpD,IAAMsB,KAAKC,IAAAA,mBAAI,EAAC,SAACX;YACfA,MAAMJ,SAASI,OAAOY,IAAAA,kCAAa,EAACL,UAAUX;QAChD;QAEA,IAAI;YACF,IAAMiB,cAAcC,WAAE,CAACC,iBAAiB,CAACR;YAEzC,2EAA2E;YAC3EnB,OAAO4B,EAAE,CAAC,SAAS,SAACC;gBAClB,4CAA4C;gBAC5C,iFAAiF;gBACjF,kFAAkF;gBAClF,mFAAmF;gBACnF,mEAAmE;gBACnE,gFAAgF;gBAChF,IAAMC,KAAKL;gBACXA,YAAYG,EAAE,CAAC,SAAS,YAAO;gBAC/B,IAAI,OAAOE,GAAGC,OAAO,KAAK,YAAYD,GAAGC,OAAO;gBAChDT,GAAGO;YACL;YAEA,qDAAqD;YACrD7B,OAAOgC,IAAI,CAACP;YACZQ,IAAAA,cAAE,EAACR,aAAa;gBAAC;gBAAS;gBAAS;aAAS,EAAEH;QAChD,EAAE,OAAOY,SAAS;YAChBZ,GAAGY;QACL;IACF;IAEAH,OAAAA,OAeC,GAfDA,SAAAA;QACEtB,8BAAS,CAACC,SAAS,CAACqB,OAAO,CAACpB,IAAI,CAAC,IAAI;QACrC,IAAI,IAAI,CAACX,MAAM,EAAE;YACf,kGAAkG;YAClG,iEAAiE;YACjE,IAAMmC,IAAI,IAAI,CAACnC,MAAM;YACrB,IAAI,OAAOmC,EAAEJ,OAAO,KAAK,YAAY;gBACnCI,EAAEJ,OAAO;YACX;YACA,IAAI,CAAC/B,MAAM,GAAG;QAChB;QACA,IAAI,IAAI,CAACC,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACY,OAAO;YACjB,IAAI,CAACZ,IAAI,GAAG;QACd;IACF;WA9FmBH;EAA0BW,8BAAS"}
|
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
import BaseIterator, { Lock } from 'extract-base-iterator';
|
|
2
|
-
import
|
|
2
|
+
import { type SevenZipEntry } from './sevenz/SevenZipParser.js';
|
|
3
|
+
import type { Entry, ExtractOptions } from './types.js';
|
|
3
4
|
export default class SevenZipIterator extends BaseIterator<Entry> {
|
|
4
5
|
lock: Lock | null;
|
|
5
|
-
|
|
6
|
+
/** @internal - Do not use directly */
|
|
7
|
+
_iterator: unknown;
|
|
6
8
|
constructor(source: string | NodeJS.ReadableStream, options?: ExtractOptions);
|
|
7
9
|
end(err?: Error): void;
|
|
10
|
+
/**
|
|
11
|
+
* Check if streaming extraction is available for any folder in this archive.
|
|
12
|
+
* Streaming is possible when folders use codecs like BZip2, Deflate, or Copy
|
|
13
|
+
* that can decompress incrementally without buffering the entire input.
|
|
14
|
+
*
|
|
15
|
+
* @returns true if at least one folder supports streaming
|
|
16
|
+
*/
|
|
17
|
+
canStream(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Get entries sorted for optimal streaming extraction.
|
|
20
|
+
*
|
|
21
|
+
* Entries are sorted by:
|
|
22
|
+
* 1. Folder index (process one folder at a time)
|
|
23
|
+
* 2. Stream index within folder (for solid block streaming)
|
|
24
|
+
*
|
|
25
|
+
* This ordering allows multi-file solid folders to stream with
|
|
26
|
+
* O(largest file) memory instead of O(folder size).
|
|
27
|
+
*
|
|
28
|
+
* @returns Array of entries in streaming order
|
|
29
|
+
*/
|
|
30
|
+
getStreamingOrder(): SevenZipEntry[];
|
|
8
31
|
}
|
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
import BaseIterator, { Lock } from 'extract-base-iterator';
|
|
2
|
-
import
|
|
2
|
+
import { type SevenZipEntry } from './sevenz/SevenZipParser.js';
|
|
3
|
+
import type { Entry, ExtractOptions } from './types.js';
|
|
3
4
|
export default class SevenZipIterator extends BaseIterator<Entry> {
|
|
4
5
|
lock: Lock | null;
|
|
5
|
-
|
|
6
|
+
/** @internal - Do not use directly */
|
|
7
|
+
_iterator: unknown;
|
|
6
8
|
constructor(source: string | NodeJS.ReadableStream, options?: ExtractOptions);
|
|
7
9
|
end(err?: Error): void;
|
|
10
|
+
/**
|
|
11
|
+
* Check if streaming extraction is available for any folder in this archive.
|
|
12
|
+
* Streaming is possible when folders use codecs like BZip2, Deflate, or Copy
|
|
13
|
+
* that can decompress incrementally without buffering the entire input.
|
|
14
|
+
*
|
|
15
|
+
* @returns true if at least one folder supports streaming
|
|
16
|
+
*/
|
|
17
|
+
canStream(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Get entries sorted for optimal streaming extraction.
|
|
20
|
+
*
|
|
21
|
+
* Entries are sorted by:
|
|
22
|
+
* 1. Folder index (process one folder at a time)
|
|
23
|
+
* 2. Stream index within folder (for solid block streaming)
|
|
24
|
+
*
|
|
25
|
+
* This ordering allows multi-file solid folders to stream with
|
|
26
|
+
* O(largest file) memory instead of O(folder size).
|
|
27
|
+
*
|
|
28
|
+
* @returns Array of entries in streaming order
|
|
29
|
+
*/
|
|
30
|
+
getStreamingOrder(): SevenZipEntry[];
|
|
8
31
|
}
|
|
@@ -189,7 +189,7 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
189
189
|
});
|
|
190
190
|
});
|
|
191
191
|
} else {
|
|
192
|
-
// Stream input -
|
|
192
|
+
// Stream input - write to temp file for random access
|
|
193
193
|
// Register cleanup for source stream
|
|
194
194
|
var stream = source;
|
|
195
195
|
_this.lock.registerCleanup(function() {
|
|
@@ -199,30 +199,23 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
199
199
|
var tempPath = _path.default.join((0, _compatts.tmpdir)(), '7z-iterator', (0, _shorthash.default)(process.cwd()), (0, _tempsuffix.default)('tmp.7z'));
|
|
200
200
|
queue.defer(function(cb) {
|
|
201
201
|
(0, _streamToSourcets.default)(source, {
|
|
202
|
-
memoryThreshold: options.memoryThreshold,
|
|
203
202
|
tempPath: tempPath
|
|
204
203
|
}, function(err, result) {
|
|
205
204
|
if (_this.done || cancelled) return;
|
|
206
205
|
if (err) return cb(err);
|
|
207
206
|
if (!result) return cb(new Error('No result from streamToSource'));
|
|
208
207
|
archiveSource = result.source;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
try {
|
|
221
|
-
(0, _fsremovecompat.rmSync)(tp);
|
|
222
|
-
} catch (_e) {
|
|
223
|
-
/* ignore */ }
|
|
224
|
-
});
|
|
225
|
-
}
|
|
208
|
+
// Register cleanup for file descriptor
|
|
209
|
+
_this.lock.registerCleanup(function() {
|
|
210
|
+
_fs.default.closeSync(result.fd);
|
|
211
|
+
});
|
|
212
|
+
// Register cleanup for temp file
|
|
213
|
+
_this.lock.registerCleanup(function() {
|
|
214
|
+
try {
|
|
215
|
+
(0, _fsremovecompat.rmSync)(result.tempPath);
|
|
216
|
+
} catch (_e) {
|
|
217
|
+
/* ignore */ }
|
|
218
|
+
});
|
|
226
219
|
cb();
|
|
227
220
|
});
|
|
228
221
|
});
|
|
@@ -234,7 +227,7 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
234
227
|
try {
|
|
235
228
|
var parser = new _SevenZipParserts.SevenZipParser(archiveSource);
|
|
236
229
|
parser.parse();
|
|
237
|
-
_this.
|
|
230
|
+
_this._iterator = new EntryIterator(parser);
|
|
238
231
|
cb();
|
|
239
232
|
} catch (parseErr) {
|
|
240
233
|
cb(parseErr);
|
|
@@ -257,7 +250,61 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
257
250
|
lock.release();
|
|
258
251
|
}
|
|
259
252
|
// Don't call base end here - Lock.__destroy() handles it
|
|
260
|
-
this.
|
|
253
|
+
this._iterator = null;
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* Check if streaming extraction is available for any folder in this archive.
|
|
257
|
+
* Streaming is possible when folders use codecs like BZip2, Deflate, or Copy
|
|
258
|
+
* that can decompress incrementally without buffering the entire input.
|
|
259
|
+
*
|
|
260
|
+
* @returns true if at least one folder supports streaming
|
|
261
|
+
*/ _proto.canStream = function canStream() {
|
|
262
|
+
if (!this._iterator) return false;
|
|
263
|
+
var parser = this._iterator.getParser();
|
|
264
|
+
if (!parser) return false;
|
|
265
|
+
var entries = parser.getEntries();
|
|
266
|
+
var checkedFolders = {};
|
|
267
|
+
for(var i = 0; i < entries.length; i++){
|
|
268
|
+
var folderIndex = entries[i]._folderIndex;
|
|
269
|
+
if (folderIndex >= 0 && checkedFolders[folderIndex] === undefined) {
|
|
270
|
+
checkedFolders[folderIndex] = parser.canStreamFolder(folderIndex);
|
|
271
|
+
if (checkedFolders[folderIndex]) {
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* Get entries sorted for optimal streaming extraction.
|
|
280
|
+
*
|
|
281
|
+
* Entries are sorted by:
|
|
282
|
+
* 1. Folder index (process one folder at a time)
|
|
283
|
+
* 2. Stream index within folder (for solid block streaming)
|
|
284
|
+
*
|
|
285
|
+
* This ordering allows multi-file solid folders to stream with
|
|
286
|
+
* O(largest file) memory instead of O(folder size).
|
|
287
|
+
*
|
|
288
|
+
* @returns Array of entries in streaming order
|
|
289
|
+
*/ _proto.getStreamingOrder = function getStreamingOrder() {
|
|
290
|
+
if (!this._iterator) return [];
|
|
291
|
+
var parser = this._iterator.getParser();
|
|
292
|
+
if (!parser) return [];
|
|
293
|
+
var entries = parser.getEntries();
|
|
294
|
+
// Create a copy and sort for streaming order
|
|
295
|
+
var sorted = [];
|
|
296
|
+
for(var i = 0; i < entries.length; i++){
|
|
297
|
+
sorted.push(entries[i]);
|
|
298
|
+
}
|
|
299
|
+
sorted.sort(function(a, b) {
|
|
300
|
+
// First by folder index
|
|
301
|
+
if (a._folderIndex !== b._folderIndex) {
|
|
302
|
+
return a._folderIndex - b._folderIndex;
|
|
303
|
+
}
|
|
304
|
+
// Then by stream index within folder
|
|
305
|
+
return a._streamIndexInFolder - b._streamIndexInFolder;
|
|
306
|
+
});
|
|
307
|
+
return sorted;
|
|
261
308
|
};
|
|
262
309
|
return SevenZipIterator;
|
|
263
310
|
}(_extractbaseiterator.default);
|
|
@@ -1 +1 @@
|
|
|
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 = (): void => {\n cancelled = true;\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","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","undefined","tp","rmSync","_e","SevenZipParser","parse","iterator","parseErr","await","remove","nextEntry","release"],"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 } from './types.ts';\n\n/**\n * Internal iterator interface for SevenZipParser entries\n * @internal\n */\ninterface SevenZipFileIterator {\n next(): SevenZipEntry | null;\n getParser(): SevenZipParser;\n}\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 /** @internal - Do not use directly */\n _iterator: unknown;\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 = (): void => {\n cancelled = true;\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 - write to temp file for random access\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(source, { tempPath }, (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\n // Register cleanup for file descriptor\n this.lock.registerCleanup(() => {\n fs.closeSync(result.fd);\n });\n\n // Register cleanup for temp file\n this.lock.registerCleanup(() => {\n try {\n rmSync(result.tempPath);\n } catch (_e) {\n /* ignore */\n }\n });\n\n cb();\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 /**\n * Check if streaming extraction is available for any folder in this archive.\n * Streaming is possible when folders use codecs like BZip2, Deflate, or Copy\n * that can decompress incrementally without buffering the entire input.\n *\n * @returns true if at least one folder supports streaming\n */\n canStream(): boolean {\n if (!this._iterator) return false;\n const parser = (this._iterator as SevenZipFileIterator).getParser();\n if (!parser) return false;\n\n const entries = parser.getEntries();\n const checkedFolders: { [key: number]: boolean } = {};\n\n for (let i = 0; i < entries.length; i++) {\n const folderIndex = entries[i]._folderIndex;\n if (folderIndex >= 0 && checkedFolders[folderIndex] === undefined) {\n checkedFolders[folderIndex] = parser.canStreamFolder(folderIndex);\n if (checkedFolders[folderIndex]) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Get entries sorted for optimal streaming extraction.\n *\n * Entries are sorted by:\n * 1. Folder index (process one folder at a time)\n * 2. Stream index within folder (for solid block streaming)\n *\n * This ordering allows multi-file solid folders to stream with\n * O(largest file) memory instead of O(folder size).\n *\n * @returns Array of entries in streaming order\n */\n getStreamingOrder(): SevenZipEntry[] {\n if (!this._iterator) return [];\n const parser = (this._iterator as SevenZipFileIterator).getParser();\n if (!parser) return [];\n\n const entries = parser.getEntries();\n\n // Create a copy and sort for streaming order\n const sorted: SevenZipEntry[] = [];\n for (let i = 0; i < entries.length; i++) {\n sorted.push(entries[i]);\n }\n\n sorted.sort((a, b) => {\n // First by folder index\n if (a._folderIndex !== b._folderIndex) {\n return a._folderIndex - b._folderIndex;\n }\n // Then by stream index within folder\n return a._streamIndexInFolder - b._streamIndexInFolder;\n });\n\n return sorted;\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","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","result","Error","rmSync","_e","SevenZipParser","parse","_iterator","parseErr","await","remove","nextEntry","release","canStream","checkedFolders","i","folderIndex","_folderIndex","undefined","canStreamFolder","getStreamingOrder","sorted","sort","a","b","_streamIndexInFolder"],"mappings":"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"}
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
+
export { createLzma2Decoder, createLzmaDecoder, decodeLzma, decodeLzma2, Lzma2Decoder, LzmaDecoder, } from './lzma/index.js';
|
|
1
2
|
export { default } from './SevenZipIterator.js';
|
|
2
|
-
export type { ArchiveSource, SevenZipEntry } from './sevenz/index.js';
|
|
3
|
-
export { SevenZipParser } from './sevenz/index.js';
|
|
4
3
|
export * from './types.js';
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
+
export { createLzma2Decoder, createLzmaDecoder, decodeLzma, decodeLzma2, Lzma2Decoder, LzmaDecoder, } from './lzma/index.js';
|
|
1
2
|
export { default } from './SevenZipIterator.js';
|
|
2
|
-
export type { ArchiveSource, SevenZipEntry } from './sevenz/index.js';
|
|
3
|
-
export { SevenZipParser } from './sevenz/index.js';
|
|
4
3
|
export * from './types.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// LZMA decoders for external use
|
|
1
2
|
"use strict";
|
|
2
3
|
Object.defineProperty(exports, "__esModule", {
|
|
3
4
|
value: true
|
|
@@ -9,15 +10,30 @@ function _export(target, all) {
|
|
|
9
10
|
});
|
|
10
11
|
}
|
|
11
12
|
_export(exports, {
|
|
12
|
-
get
|
|
13
|
-
return _indexts.
|
|
13
|
+
get Lzma2Decoder () {
|
|
14
|
+
return _indexts.Lzma2Decoder;
|
|
15
|
+
},
|
|
16
|
+
get LzmaDecoder () {
|
|
17
|
+
return _indexts.LzmaDecoder;
|
|
18
|
+
},
|
|
19
|
+
get createLzma2Decoder () {
|
|
20
|
+
return _indexts.createLzma2Decoder;
|
|
21
|
+
},
|
|
22
|
+
get createLzmaDecoder () {
|
|
23
|
+
return _indexts.createLzmaDecoder;
|
|
24
|
+
},
|
|
25
|
+
get decodeLzma () {
|
|
26
|
+
return _indexts.decodeLzma;
|
|
27
|
+
},
|
|
28
|
+
get decodeLzma2 () {
|
|
29
|
+
return _indexts.decodeLzma2;
|
|
14
30
|
},
|
|
15
31
|
get default () {
|
|
16
32
|
return _SevenZipIteratorts.default;
|
|
17
33
|
}
|
|
18
34
|
});
|
|
35
|
+
var _indexts = require("./lzma/index.js");
|
|
19
36
|
var _SevenZipIteratorts = /*#__PURE__*/ _interop_require_default(require("./SevenZipIterator.js"));
|
|
20
|
-
var _indexts = require("./sevenz/index.js");
|
|
21
37
|
_export_star(require("./types.js"), exports);
|
|
22
38
|
function _export_star(from, to) {
|
|
23
39
|
Object.keys(from).forEach(function(k) {
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/index.ts"],"sourcesContent":["// LZMA decoders for external use\nexport {\n createLzma2Decoder,\n createLzmaDecoder,\n decodeLzma,\n decodeLzma2,\n Lzma2Decoder,\n LzmaDecoder,\n} from './lzma/index.ts';\nexport { default } from './SevenZipIterator.ts';\nexport * from './types.ts';\n"],"names":["Lzma2Decoder","LzmaDecoder","createLzma2Decoder","createLzmaDecoder","decodeLzma","decodeLzma2","default"],"mappings":"AAAA,iCAAiC;;;;;;;;;;;;QAM/BA;eAAAA,qBAAY;;QACZC;eAAAA,oBAAW;;QALXC;eAAAA,2BAAkB;;QAClBC;eAAAA,0BAAiB;;QACjBC;eAAAA,mBAAU;;QACVC;eAAAA,oBAAW;;QAIJC;eAAAA,2BAAO;;;uBADT;yEACiB;qBACV"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FileSource } from '../sevenz/SevenZipParser.js';
|
|
2
2
|
export interface StreamToSourceOptions {
|
|
3
|
-
|
|
4
|
-
tempPath?: string;
|
|
3
|
+
tempPath: string;
|
|
5
4
|
}
|
|
6
5
|
export interface SourceResult {
|
|
7
|
-
source:
|
|
8
|
-
fd
|
|
9
|
-
tempPath
|
|
6
|
+
source: FileSource;
|
|
7
|
+
fd: number;
|
|
8
|
+
tempPath: string;
|
|
10
9
|
}
|
|
11
10
|
export type Callback = (error?: Error, result?: SourceResult) => void;
|
|
12
11
|
/**
|
|
13
|
-
* Convert a stream to
|
|
12
|
+
* Convert a stream to a FileSource by writing to temp file
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* 2. If threshold exceeded, write all buffered data to temp file and continue streaming
|
|
18
|
-
* 3. When done, return BufferSource for memory buffer or FileSource for temp file
|
|
14
|
+
* 7z format requires random access for header parsing, so temp file is necessary for streams.
|
|
15
|
+
* Writes directly to temp file for predictable O(1) memory usage during stream consumption.
|
|
19
16
|
*/
|
|
20
17
|
export default function streamToSource(stream: NodeJS.ReadableStream, options: StreamToSourceOptions, callback: Callback): void;
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FileSource } from '../sevenz/SevenZipParser.js';
|
|
2
2
|
export interface StreamToSourceOptions {
|
|
3
|
-
|
|
4
|
-
tempPath?: string;
|
|
3
|
+
tempPath: string;
|
|
5
4
|
}
|
|
6
5
|
export interface SourceResult {
|
|
7
|
-
source:
|
|
8
|
-
fd
|
|
9
|
-
tempPath
|
|
6
|
+
source: FileSource;
|
|
7
|
+
fd: number;
|
|
8
|
+
tempPath: string;
|
|
10
9
|
}
|
|
11
10
|
export type Callback = (error?: Error, result?: SourceResult) => void;
|
|
12
11
|
/**
|
|
13
|
-
* Convert a stream to
|
|
12
|
+
* Convert a stream to a FileSource by writing to temp file
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* 2. If threshold exceeded, write all buffered data to temp file and continue streaming
|
|
18
|
-
* 3. When done, return BufferSource for memory buffer or FileSource for temp file
|
|
14
|
+
* 7z format requires random access for header parsing, so temp file is necessary for streams.
|
|
15
|
+
* Writes directly to temp file for predictable O(1) memory usage during stream consumption.
|
|
19
16
|
*/
|
|
20
17
|
export default function streamToSource(stream: NodeJS.ReadableStream, options: StreamToSourceOptions, callback: Callback): void;
|