7z-iterator 2.2.6 → 2.2.8
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.js +30 -6
- package/dist/cjs/FileEntry.js.map +1 -1
- package/dist/cjs/SevenZipIterator.js +3 -6
- package/dist/cjs/SevenZipIterator.js.map +1 -1
- package/dist/cjs/lib/streamToSource.js +1 -1
- package/dist/cjs/lib/streamToSource.js.map +1 -1
- package/dist/cjs/nextEntry.js +10 -14
- package/dist/cjs/nextEntry.js.map +1 -1
- package/dist/cjs/sevenz/SevenZipParser.js +7 -6
- package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +4 -9
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/cjs/sevenz/codecs/index.js +11 -7
- package/dist/cjs/sevenz/codecs/index.js.map +1 -1
- package/dist/cjs/sevenz/codecs/streams.js +8 -8
- package/dist/cjs/sevenz/codecs/streams.js.map +1 -1
- package/dist/cjs/sevenz/constants.js +1 -1
- package/dist/cjs/sevenz/constants.js.map +1 -1
- package/dist/esm/FileEntry.js +6 -5
- package/dist/esm/FileEntry.js.map +1 -1
- package/dist/esm/SevenZipIterator.js +2 -5
- package/dist/esm/SevenZipIterator.js.map +1 -1
- package/dist/esm/lib/streamToSource.js +1 -1
- package/dist/esm/lib/streamToSource.js.map +1 -1
- package/dist/esm/nextEntry.js +10 -14
- package/dist/esm/nextEntry.js.map +1 -1
- package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js +2 -7
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/esm/sevenz/codecs/index.js +11 -7
- package/dist/esm/sevenz/codecs/index.js.map +1 -1
- package/dist/esm/sevenz/constants.js +1 -1
- package/dist/esm/sevenz/constants.js.map +1 -1
- package/package.json +4 -1
package/dist/cjs/FileEntry.js
CHANGED
|
@@ -32,6 +32,22 @@ function _class_call_check(instance, Constructor) {
|
|
|
32
32
|
throw new TypeError("Cannot call a class as a function");
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
function _get(target, property, receiver) {
|
|
36
|
+
if (typeof Reflect !== "undefined" && Reflect.get) {
|
|
37
|
+
_get = Reflect.get;
|
|
38
|
+
} else {
|
|
39
|
+
_get = function get(target, property, receiver) {
|
|
40
|
+
var base = _super_prop_base(target, property);
|
|
41
|
+
if (!base) return;
|
|
42
|
+
var desc = Object.getOwnPropertyDescriptor(base, property);
|
|
43
|
+
if (desc.get) {
|
|
44
|
+
return desc.get.call(receiver || target);
|
|
45
|
+
}
|
|
46
|
+
return desc.value;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return _get(target, property, receiver || target);
|
|
50
|
+
}
|
|
35
51
|
function _get_prototype_of(o) {
|
|
36
52
|
_get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
|
|
37
53
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
@@ -69,6 +85,13 @@ function _set_prototype_of(o, p) {
|
|
|
69
85
|
};
|
|
70
86
|
return _set_prototype_of(o, p);
|
|
71
87
|
}
|
|
88
|
+
function _super_prop_base(object, property) {
|
|
89
|
+
while(!Object.prototype.hasOwnProperty.call(object, property)){
|
|
90
|
+
object = _get_prototype_of(object);
|
|
91
|
+
if (object === null) break;
|
|
92
|
+
}
|
|
93
|
+
return object;
|
|
94
|
+
}
|
|
72
95
|
function _type_of(obj) {
|
|
73
96
|
"@swc/helpers - typeof";
|
|
74
97
|
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
@@ -102,17 +125,19 @@ var SevenZipFileEntry = /*#__PURE__*/ function(FileEntry) {
|
|
|
102
125
|
callback = typeof options === 'function' ? options : callback;
|
|
103
126
|
options = typeof options === 'function' ? {} : options || {};
|
|
104
127
|
if (typeof callback === 'function') {
|
|
105
|
-
|
|
128
|
+
var cb = function cb(err) {
|
|
106
129
|
callback(err);
|
|
107
130
|
if (_this.lock) {
|
|
108
131
|
_this.lock.release();
|
|
109
132
|
_this.lock = null;
|
|
110
133
|
}
|
|
111
|
-
}
|
|
134
|
+
};
|
|
135
|
+
_get(_get_prototype_of(SevenZipFileEntry.prototype), "create", this).call(this, dest, options, cb);
|
|
136
|
+
return;
|
|
112
137
|
}
|
|
113
138
|
return new Promise(function(resolve, reject) {
|
|
114
|
-
return _this.create(dest, options, function(err
|
|
115
|
-
return err ? reject(err) : resolve(
|
|
139
|
+
return _this.create(dest, options, function(err) {
|
|
140
|
+
return err ? reject(err) : resolve(true);
|
|
116
141
|
});
|
|
117
142
|
});
|
|
118
143
|
};
|
|
@@ -123,7 +148,6 @@ var SevenZipFileEntry = /*#__PURE__*/ function(FileEntry) {
|
|
|
123
148
|
}
|
|
124
149
|
var stream = this.stream;
|
|
125
150
|
this.stream = null; // Prevent reuse
|
|
126
|
-
// Use once since errors can come from either stream
|
|
127
151
|
var cb = (0, _calloncefn.default)(function(err) {
|
|
128
152
|
err ? callback(err) : (0, _extractbaseiterator.waitForAccess)(fullPath, callback);
|
|
129
153
|
});
|
|
@@ -154,7 +178,7 @@ var SevenZipFileEntry = /*#__PURE__*/ function(FileEntry) {
|
|
|
154
178
|
}
|
|
155
179
|
};
|
|
156
180
|
_proto.destroy = function destroy() {
|
|
157
|
-
|
|
181
|
+
_get(_get_prototype_of(SevenZipFileEntry.prototype), "destroy", this).call(this);
|
|
158
182
|
if (this.stream) {
|
|
159
183
|
// Use destroy() to prevent decompression (our stream has custom destroy that sets destroyed flag)
|
|
160
184
|
// Fallback to resume() for older Node versions without destroy()
|
|
@@ -1 +1 @@
|
|
|
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 'graceful-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
|
|
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 type { CallFn } from 'call-once-fn';\nimport once from 'call-once-fn';\nimport { type FileAttributes, FileEntry, type Lock, type NoParamCallback, waitForAccess } from 'extract-base-iterator';\nimport fs from 'graceful-fs';\nimport oo from 'on-one';\nimport type { ExtractOptions } from './types.ts';\n\nexport default class SevenZipFileEntry extends FileEntry {\n private lock: Lock | null;\n private stream: NodeJS.ReadableStream | null;\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 const cb: NoParamCallback = (err?: Error) => {\n (callback as NoParamCallback)(err);\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n };\n super.create(dest, options as ExtractOptions, cb);\n return;\n }\n return new Promise((resolve, reject) => this.create(dest, options as ExtractOptions, (err?: Error) => (err ? reject(err) : resolve(true))));\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 const cb = once(((err?: Error) => {\n err ? callback(err) : waitForAccess(fullPath, callback);\n }) as unknown as CallFn) as unknown as (err?: Error) => void;\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 as unknown as CallFn);\n } catch (pipeErr) {\n cb(pipeErr as Error);\n }\n }\n\n destroy() {\n super.destroy();\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","cb","err","release","Promise","resolve","reject","_writeFile","fullPath","_options","Error","once","waitForAccess","writeStream","fs","createWriteStream","on","streamErr","ws","destroy","pipe","oo","pipeErr","s","FileEntry"],"mappings":"AAAA;;;;;CAKC;;;;;;;eASoBA;;;iEANJ;mCAC8E;iEAChF;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,MAgBC,GAhBDA,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,IAAMC,KAAsB,YAACC;gBAC1BF,SAA6BE;gBAC9B,IAAI,MAAKT,IAAI,EAAE;oBACb,MAAKA,IAAI,CAACU,OAAO;oBACjB,MAAKV,IAAI,GAAG;gBACd;YACF;YACA,uBAhCeH,8BAgCTO,UAAN,IAAK,aAAQC,MAAMC,SAA2BE;YAC9C;QACF;QACA,OAAO,IAAIG,QAAQ,SAACC,SAASC;mBAAW,MAAKT,MAAM,CAACC,MAAMC,SAA2B,SAACG;uBAAiBA,MAAMI,OAAOJ,OAAOG,QAAQ;;;IACrI;IAEAE,OAAAA,UAoCC,GApCDA,SAAAA,WAAWC,QAAgB,EAAEC,QAAwB,EAAET,QAAyB;QAC9E,IAAI,CAAC,IAAI,CAACR,MAAM,EAAE;YAChBQ,SAAS,IAAIU,MAAM;YACnB;QACF;QAEA,IAAMlB,SAAS,IAAI,CAACA,MAAM;QAC1B,IAAI,CAACA,MAAM,GAAG,MAAM,gBAAgB;QAEpC,IAAMS,KAAKU,IAAAA,mBAAI,EAAE,SAACT;YAChBA,MAAMF,SAASE,OAAOU,IAAAA,kCAAa,EAACJ,UAAUR;QAChD;QAEA,IAAI;YACF,IAAMa,cAAcC,mBAAE,CAACC,iBAAiB,CAACP;YAEzC,2EAA2E;YAC3EhB,OAAOwB,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;gBAChDlB,GAAGgB;YACL;YAEA,qDAAqD;YACrDzB,OAAO4B,IAAI,CAACP;YACZQ,IAAAA,cAAE,EAACR,aAAa;gBAAC;gBAAS;gBAAS;aAAS,EAAEZ;QAChD,EAAE,OAAOqB,SAAS;YAChBrB,GAAGqB;QACL;IACF;IAEAH,OAAAA,OAeC,GAfDA,SAAAA;QACE,uBA7EiB7B,8BA6EX6B,WAAN,IAAK;QACL,IAAI,IAAI,CAAC3B,MAAM,EAAE;YACf,kGAAkG;YAClG,iEAAiE;YACjE,IAAM+B,IAAI,IAAI,CAAC/B,MAAM;YACrB,IAAI,OAAO+B,EAAEJ,OAAO,KAAK,YAAY;gBACnCI,EAAEJ,OAAO;YACX;YACA,IAAI,CAAC3B,MAAM,GAAG;QAChB;QACA,IAAI,IAAI,CAACC,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACU,OAAO;YACjB,IAAI,CAACV,IAAI,GAAG;QACd;IACF;WA3FmBH;EAA0BkC,8BAAS"}
|
|
@@ -159,12 +159,12 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
159
159
|
]);
|
|
160
160
|
_this.lock = new _extractbaseiterator.Lock();
|
|
161
161
|
_this.lock.onDestroy = function(err) {
|
|
162
|
-
return _extractbaseiterator.default.prototype.end.call(_this, err);
|
|
162
|
+
return _extractbaseiterator.default.prototype.end.call(_this, err !== null && err !== void 0 ? err : undefined);
|
|
163
163
|
};
|
|
164
164
|
var queue = new _queuecb.default(1);
|
|
165
165
|
var cancelled = false;
|
|
166
166
|
var archiveSource = null;
|
|
167
|
-
var setup = function() {
|
|
167
|
+
var setup = function setup() {
|
|
168
168
|
cancelled = true;
|
|
169
169
|
};
|
|
170
170
|
_this.processing.push(setup);
|
|
@@ -180,7 +180,6 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
180
180
|
if (_this.done || cancelled) return;
|
|
181
181
|
if (err) return cb(err);
|
|
182
182
|
archiveSource = new _SevenZipParserts.FileSource(fd, stats.size);
|
|
183
|
-
// Register cleanup for file descriptor
|
|
184
183
|
_this.lock.registerCleanup(function() {
|
|
185
184
|
_gracefulfs.default.closeSync(fd);
|
|
186
185
|
});
|
|
@@ -205,11 +204,9 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
205
204
|
if (err) return cb(err);
|
|
206
205
|
if (!result) return cb(new Error('No result from streamToSource'));
|
|
207
206
|
archiveSource = result.source;
|
|
208
|
-
// Register cleanup for file descriptor
|
|
209
207
|
_this.lock.registerCleanup(function() {
|
|
210
208
|
_gracefulfs.default.closeSync(result.fd);
|
|
211
209
|
});
|
|
212
|
-
// Register cleanup for temp file
|
|
213
210
|
_this.lock.registerCleanup(function() {
|
|
214
211
|
try {
|
|
215
212
|
(0, _fsremovecompat.rmSync)(result.tempPath);
|
|
@@ -251,7 +248,7 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
|
|
|
251
248
|
if (this.lock) {
|
|
252
249
|
var lock = this.lock;
|
|
253
250
|
this.lock = null; // Clear before release to prevent re-entrancy
|
|
254
|
-
lock.err = err;
|
|
251
|
+
lock.err = err !== null && err !== void 0 ? err : null;
|
|
255
252
|
lock.release();
|
|
256
253
|
}
|
|
257
254
|
// Don't call base end here - Lock.__destroy() handles it
|
|
@@ -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 { rmSync } from 'fs-remove-compat';\nimport fs from 'graceful-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 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 const parser = new SevenZipParser(archiveSource);\n parser.parse((parseErr) => {\n if (parseErr) {\n cb(parseErr);\n return;\n }\n try {\n this._iterator = new EntryIterator(parser);\n cb();\n } catch (err) {\n cb(err as Error);\n }\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","parseErr","_iterator","await","remove","nextEntry","release","canStream","checkedFolders","i","folderIndex","_folderIndex","undefined","canStreamFolder","getStreamingOrder","sorted","sort","a","b","_streamIndexInFolder"],"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 { rmSync } from 'fs-remove-compat';\nimport fs from 'graceful-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 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: Error | null) => BaseIterator.prototype.end.call(this, err ?? undefined);\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 (this.lock as 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 as 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 (this.lock as Lock).registerCleanup(() => {\n fs.closeSync(result.fd);\n });\n\n (this.lock as 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 const parser = new SevenZipParser(archiveSource);\n parser.parse((parseErr) => {\n if (parseErr) {\n cb(parseErr);\n return;\n }\n try {\n this._iterator = new EntryIterator(parser);\n cb();\n } catch (err) {\n cb(err as Error);\n }\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 as unknown as Parameters<typeof this.push>[0]);\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 ?? null;\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","undefined","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","parseErr","_iterator","await","remove","nextEntry","release","canStream","checkedFolders","i","folderIndex","_folderIndex","canStreamFolder","getStreamingOrder","sorted","sort","a","b","_streamIndexInFolder"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lib/streamToSource.ts"],"sourcesContent":["// Stream to source conversion: writes stream to temp file for random access\nimport once from 'call-once-fn';\nimport { bufferFrom } from 'extract-base-iterator';\nimport fs from 'graceful-fs';\nimport mkdirp from 'mkdirp-classic';\nimport oo from 'on-one';\nimport path from 'path';\nimport { FileSource } from '../sevenz/SevenZipParser.ts';\n\nexport interface StreamToSourceOptions {\n tempPath: string;\n}\n\nexport interface SourceResult {\n source: FileSource;\n fd: number; // Caller must close\n tempPath: string; // Caller must clean up\n}\n\nexport type Callback = (error?: Error, result?: SourceResult) => void;\n\n/**\n * Convert a stream to a FileSource by writing to temp file\n *\n * 7z format requires random access for header parsing, so temp file is necessary for streams.\n * Writes directly to temp file for predictable O(1) memory usage during stream consumption.\n */\nexport default function streamToSource(stream: NodeJS.ReadableStream, options: StreamToSourceOptions, callback: Callback): void {\n const tempPath = options.tempPath;\n\n const end = once(callback);\n\n mkdirp.sync(path.dirname(tempPath));\n const writeStream = fs.createWriteStream(tempPath);\n\n function onData(chunk: Buffer | string): void {\n const buf = typeof chunk === 'string' ? bufferFrom(chunk) : chunk;\n writeStream.write(buf);\n }\n\n function onEnd(): void {\n writeStream.end(() => {\n fs.open(tempPath, 'r', (err, fd) => {\n if (err) return end(err);\n fs.stat(tempPath, (statErr, stats) => {\n if (statErr) {\n fs.closeSync(fd);\n return end(statErr);\n }\n end(
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lib/streamToSource.ts"],"sourcesContent":["// Stream to source conversion: writes stream to temp file for random access\nimport type { CallFn } from 'call-once-fn';\nimport once from 'call-once-fn';\nimport { bufferFrom } from 'extract-base-iterator';\nimport fs from 'graceful-fs';\nimport mkdirp from 'mkdirp-classic';\nimport oo from 'on-one';\nimport path from 'path';\nimport { FileSource } from '../sevenz/SevenZipParser.ts';\n\nexport interface StreamToSourceOptions {\n tempPath: string;\n}\n\nexport interface SourceResult {\n source: FileSource;\n fd: number; // Caller must close\n tempPath: string; // Caller must clean up\n}\n\nexport type Callback = (error?: Error, result?: SourceResult) => void;\n\n/**\n * Convert a stream to a FileSource by writing to temp file\n *\n * 7z format requires random access for header parsing, so temp file is necessary for streams.\n * Writes directly to temp file for predictable O(1) memory usage during stream consumption.\n */\nexport default function streamToSource(stream: NodeJS.ReadableStream, options: StreamToSourceOptions, callback: Callback): void {\n const tempPath = options.tempPath;\n\n const end = once(callback as unknown as CallFn) as unknown as Callback;\n\n mkdirp.sync(path.dirname(tempPath));\n const writeStream = fs.createWriteStream(tempPath);\n\n function onData(chunk: Buffer | string): void {\n const buf = typeof chunk === 'string' ? bufferFrom(chunk) : chunk;\n writeStream.write(buf);\n }\n\n function onEnd(): void {\n writeStream.end(() => {\n fs.open(tempPath, 'r', (err, fd) => {\n if (err) return end(err);\n fs.stat(tempPath, (statErr, stats) => {\n if (statErr) {\n fs.closeSync(fd);\n return end(statErr);\n }\n end(undefined, {\n source: new FileSource(fd, stats.size),\n fd: fd,\n tempPath: tempPath,\n });\n });\n });\n });\n }\n\n function onError(err: Error): void {\n writeStream.end();\n end(err);\n }\n\n stream.on('data', onData);\n oo(stream, ['error'], onError as unknown as CallFn);\n oo(stream, ['end', 'close', 'finish'], onEnd);\n}\n"],"names":["streamToSource","stream","options","callback","tempPath","end","once","mkdirp","sync","path","dirname","writeStream","fs","createWriteStream","onData","chunk","buf","bufferFrom","write","onEnd","open","err","fd","stat","statErr","stats","closeSync","undefined","source","FileSource","size","onError","on","oo"],"mappings":"AAAA,4EAA4E;;;;;+BAsB5E;;;;;CAKC,GACD;;;eAAwBA;;;iEA1BP;mCACU;iEACZ;oEACI;4DACJ;2DACE;gCACU;;;;;;AAoBZ,SAASA,eAAeC,MAA6B,EAAEC,OAA8B,EAAEC,QAAkB;IACtH,IAAMC,WAAWF,QAAQE,QAAQ;IAEjC,IAAMC,MAAMC,IAAAA,mBAAI,EAACH;IAEjBI,sBAAM,CAACC,IAAI,CAACC,aAAI,CAACC,OAAO,CAACN;IACzB,IAAMO,cAAcC,mBAAE,CAACC,iBAAiB,CAACT;IAEzC,SAASU,OAAOC,KAAsB;QACpC,IAAMC,MAAM,OAAOD,UAAU,WAAWE,IAAAA,+BAAU,EAACF,SAASA;QAC5DJ,YAAYO,KAAK,CAACF;IACpB;IAEA,SAASG;QACPR,YAAYN,GAAG,CAAC;YACdO,mBAAE,CAACQ,IAAI,CAAChB,UAAU,KAAK,SAACiB,KAAKC;gBAC3B,IAAID,KAAK,OAAOhB,IAAIgB;gBACpBT,mBAAE,CAACW,IAAI,CAACnB,UAAU,SAACoB,SAASC;oBAC1B,IAAID,SAAS;wBACXZ,mBAAE,CAACc,SAAS,CAACJ;wBACb,OAAOjB,IAAImB;oBACb;oBACAnB,IAAIsB,WAAW;wBACbC,QAAQ,IAAIC,4BAAU,CAACP,IAAIG,MAAMK,IAAI;wBACrCR,IAAIA;wBACJlB,UAAUA;oBACZ;gBACF;YACF;QACF;IACF;IAEA,SAAS2B,QAAQV,GAAU;QACzBV,YAAYN,GAAG;QACfA,IAAIgB;IACN;IAEApB,OAAO+B,EAAE,CAAC,QAAQlB;IAClBmB,IAAAA,cAAE,EAAChC,QAAQ;QAAC;KAAQ,EAAE8B;IACtBE,IAAAA,cAAE,EAAChC,QAAQ;QAAC;QAAO;QAAS;KAAS,EAAEkB;AACzC"}
|
package/dist/cjs/nextEntry.js
CHANGED
|
@@ -12,6 +12,7 @@ var _calloncefn = /*#__PURE__*/ _interop_require_default(require("call-once-fn")
|
|
|
12
12
|
var _extractbaseiterator = require("extract-base-iterator");
|
|
13
13
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
14
14
|
var _FileEntryts = /*#__PURE__*/ _interop_require_default(require("./FileEntry.js"));
|
|
15
|
+
var _constantsts = require("./sevenz/constants.js");
|
|
15
16
|
function _interop_require_default(obj) {
|
|
16
17
|
return obj && obj.__esModule ? obj : {
|
|
17
18
|
default: obj
|
|
@@ -26,31 +27,26 @@ function nextEntry(iterator, callback) {
|
|
|
26
27
|
var entry = null;
|
|
27
28
|
entry = internalIter.next();
|
|
28
29
|
var nextCallback = (0, _calloncefn.default)(function(err, entry) {
|
|
29
|
-
// keep processing
|
|
30
30
|
if (entry) iterator.push(nextEntry);
|
|
31
|
-
err ? callback(err) : callback(
|
|
31
|
+
err ? callback(err) : callback(undefined, entry ? {
|
|
32
32
|
done: false,
|
|
33
33
|
value: entry
|
|
34
34
|
} : {
|
|
35
35
|
done: true,
|
|
36
|
-
value:
|
|
36
|
+
value: undefined
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
-
|
|
40
|
-
if (!iterator.lock || iterator.isDone() || !entry) return callback(null, {
|
|
39
|
+
if (!iterator.lock || iterator.isDone() || !entry) return callback(undefined, {
|
|
41
40
|
done: true,
|
|
42
|
-
value:
|
|
41
|
+
value: undefined
|
|
43
42
|
});
|
|
44
|
-
// Skip anti-files (these mark files to delete in delta archives)
|
|
45
43
|
if (entry.isAntiFile) {
|
|
46
44
|
iterator.push(nextEntry);
|
|
47
|
-
return callback(
|
|
45
|
+
return callback();
|
|
48
46
|
}
|
|
49
47
|
// Determine type from entry
|
|
50
48
|
var type = entry.type;
|
|
51
|
-
|
|
52
|
-
// 0o755 = 493, 0o644 = 420
|
|
53
|
-
var defaultMode = type === 'directory' ? 493 : 420;
|
|
49
|
+
var defaultMode = type === 'directory' ? _constantsts.UnixMode.DEFAULT_DIR : _constantsts.UnixMode.DEFAULT_FILE;
|
|
54
50
|
// Build attributes from 7z entry
|
|
55
51
|
// mtime must be timestamp (number) for FileAttributes compatibility
|
|
56
52
|
var mtimeDate = entry.mtime || new Date();
|
|
@@ -63,7 +59,7 @@ function nextEntry(iterator, callback) {
|
|
|
63
59
|
switch(type){
|
|
64
60
|
case 'directory':
|
|
65
61
|
attributes.type = 'directory';
|
|
66
|
-
return nextCallback(
|
|
62
|
+
return nextCallback(undefined, new _extractbaseiterator.DirectoryEntry(attributes));
|
|
67
63
|
case 'link':
|
|
68
64
|
{
|
|
69
65
|
// For symlinks, the file content IS the symlink target path
|
|
@@ -82,7 +78,7 @@ function nextEntry(iterator, callback) {
|
|
|
82
78
|
mode: attributes.mode,
|
|
83
79
|
linkpath: linkpath
|
|
84
80
|
};
|
|
85
|
-
nextCallback(
|
|
81
|
+
nextCallback(undefined, new _extractbaseiterator.SymbolicLinkEntry(linkAttributes));
|
|
86
82
|
});
|
|
87
83
|
stream.on('error', function(streamErr) {
|
|
88
84
|
nextCallback(streamErr);
|
|
@@ -95,7 +91,7 @@ function nextEntry(iterator, callback) {
|
|
|
95
91
|
attributes.size = entry.size;
|
|
96
92
|
var parser1 = internalIter.getParser();
|
|
97
93
|
var stream1 = parser1.getEntryStream(entry);
|
|
98
|
-
return nextCallback(
|
|
94
|
+
return nextCallback(undefined, new _FileEntryts.default(attributes, stream1, iterator.lock, entry._canStream));
|
|
99
95
|
}
|
|
100
96
|
}
|
|
101
97
|
return callback(new Error("Unrecognized entry type: ".concat(type)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/nextEntry.ts"],"sourcesContent":["import once from 'call-once-fn';\nimport { type DirectoryAttributes, DirectoryEntry, type FileAttributes, type LinkAttributes, SymbolicLinkEntry } from 'extract-base-iterator';\nimport path from 'path';\nimport FileEntry from './FileEntry.ts';\nimport type SevenZipIterator from './SevenZipIterator.ts';\nimport type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\nimport type { Entry, EntryCallback } from './types.ts';\n\nexport type NextCallback = (error?: Error, entry?: Entry) => void;\n\n/** @internal */\ninterface InternalIterator {\n next(): SevenZipEntry | null;\n getParser(): SevenZipParser;\n}\n\n// Entry attributes object that gets mutated in switch - union of possible shapes\n// mtime is number for FileAttributes compatibility (timestamp in ms)\ntype EntryAttributesBuilder = {\n path: string;\n basename: string;\n mtime: number;\n mode: number;\n type?: 'file' | 'directory';\n size?: number;\n};\n\nexport default function nextEntry<_T>(iterator: SevenZipIterator, callback: EntryCallback): void {\n const internalIter = iterator._iterator as InternalIterator | null;\n if (!internalIter) {\n callback(new Error('iterator missing'));\n return;\n }\n\n let entry: SevenZipEntry | null = null;\n entry = internalIter.next();\n\n const nextCallback = once((err?: Error, entry?: Entry) => {\n
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/nextEntry.ts"],"sourcesContent":["import type { CallFn } from 'call-once-fn';\nimport once from 'call-once-fn';\nimport { type DirectoryAttributes, DirectoryEntry, type FileAttributes, type LinkAttributes, type Lock, SymbolicLinkEntry } from 'extract-base-iterator';\nimport path from 'path';\nimport FileEntry from './FileEntry.ts';\nimport type SevenZipIterator from './SevenZipIterator.ts';\nimport { UnixMode } from './sevenz/constants.ts';\nimport type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\nimport type { Entry, EntryCallback } from './types.ts';\n\nexport type NextCallback = (error?: Error, entry?: Entry) => void;\n\n/** @internal */\ninterface InternalIterator {\n next(): SevenZipEntry | null;\n getParser(): SevenZipParser;\n}\n\n// Entry attributes object that gets mutated in switch - union of possible shapes\n// mtime is number for FileAttributes compatibility (timestamp in ms)\ntype EntryAttributesBuilder = {\n path: string;\n basename: string;\n mtime: number;\n mode: number;\n type?: 'file' | 'directory';\n size?: number;\n};\n\nexport default function nextEntry<_T>(iterator: SevenZipIterator, callback: EntryCallback): void {\n const internalIter = iterator._iterator as InternalIterator | null;\n if (!internalIter) {\n callback(new Error('iterator missing'));\n return;\n }\n\n let entry: SevenZipEntry | null = null;\n entry = internalIter.next();\n\n const nextCallback = once(((err?: Error, entry?: Entry) => {\n if (entry) iterator.push(nextEntry as unknown as Parameters<typeof iterator.push>[0]);\n err ? callback(err) : callback(undefined, entry ? { done: false, value: entry } : { done: true, value: undefined as unknown as Entry });\n }) as unknown as CallFn) as unknown as NextCallback;\n\n if (!iterator.lock || iterator.isDone() || !entry) return callback(undefined, { done: true, value: undefined as unknown as Entry });\n\n if (entry.isAntiFile) {\n iterator.push(nextEntry as unknown as Parameters<typeof iterator.push>[0]);\n return callback();\n }\n\n // Determine type from entry\n const type = entry.type;\n\n const defaultMode = type === 'directory' ? UnixMode.DEFAULT_DIR : UnixMode.DEFAULT_FILE;\n\n // Build attributes from 7z entry\n // mtime must be timestamp (number) for FileAttributes compatibility\n const mtimeDate = entry.mtime || new Date();\n const attributes: EntryAttributesBuilder = {\n path: entry.path.split(path.sep).filter(Boolean).join(path.sep),\n basename: entry.name,\n mtime: mtimeDate.getTime(),\n mode: entry.mode !== undefined ? entry.mode : defaultMode,\n };\n\n switch (type) {\n case 'directory':\n attributes.type = 'directory';\n return nextCallback(undefined, new DirectoryEntry(attributes as DirectoryAttributes));\n\n case 'link': {\n // For symlinks, the file content IS the symlink target path\n // Read the content to get the linkpath for SymbolicLinkEntry\n const parser = internalIter.getParser();\n const stream = parser.getEntryStream(entry);\n\n const chunks: Buffer[] = [];\n\n stream.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n stream.on('end', () => {\n const linkpath = Buffer.concat(chunks).toString('utf8');\n\n const linkAttributes: LinkAttributes = {\n path: attributes.path,\n mtime: attributes.mtime,\n mode: attributes.mode,\n linkpath: linkpath,\n };\n\n nextCallback(undefined, new SymbolicLinkEntry(linkAttributes));\n });\n stream.on('error', (streamErr: Error) => {\n nextCallback(streamErr);\n });\n return;\n }\n\n case 'file': {\n attributes.type = 'file';\n attributes.size = entry.size;\n const parser = internalIter.getParser();\n\n const stream = parser.getEntryStream(entry);\n return nextCallback(undefined, new FileEntry(attributes as FileAttributes, stream, iterator.lock as Lock, entry._canStream));\n }\n }\n\n return callback(new Error(`Unrecognized entry type: ${type}`));\n}\n"],"names":["nextEntry","iterator","callback","internalIter","_iterator","Error","entry","next","nextCallback","once","err","push","undefined","done","value","lock","isDone","isAntiFile","type","defaultMode","UnixMode","DEFAULT_DIR","DEFAULT_FILE","mtimeDate","mtime","Date","attributes","path","split","sep","filter","Boolean","join","basename","name","getTime","mode","DirectoryEntry","parser","getParser","stream","getEntryStream","chunks","on","chunk","linkpath","Buffer","concat","toString","linkAttributes","SymbolicLinkEntry","streamErr","size","FileEntry","_canStream"],"mappings":";;;;+BA6BA;;;eAAwBA;;;iEA5BP;mCACgH;2DAChH;kEACK;2BAEG;;;;;;AAuBV,SAASA,UAAcC,QAA0B,EAAEC,QAAuB;IACvF,IAAMC,eAAeF,SAASG,SAAS;IACvC,IAAI,CAACD,cAAc;QACjBD,SAAS,IAAIG,MAAM;QACnB;IACF;IAEA,IAAIC,QAA8B;IAClCA,QAAQH,aAAaI,IAAI;IAEzB,IAAMC,eAAeC,IAAAA,mBAAI,EAAE,SAACC,KAAaJ;QACvC,IAAIA,OAAOL,SAASU,IAAI,CAACX;QACzBU,MAAMR,SAASQ,OAAOR,SAASU,WAAWN,QAAQ;YAAEO,MAAM;YAAOC,OAAOR;QAAM,IAAI;YAAEO,MAAM;YAAMC,OAAOF;QAA8B;IACvI;IAEA,IAAI,CAACX,SAASc,IAAI,IAAId,SAASe,MAAM,MAAM,CAACV,OAAO,OAAOJ,SAASU,WAAW;QAAEC,MAAM;QAAMC,OAAOF;IAA8B;IAEjI,IAAIN,MAAMW,UAAU,EAAE;QACpBhB,SAASU,IAAI,CAACX;QACd,OAAOE;IACT;IAEA,4BAA4B;IAC5B,IAAMgB,OAAOZ,MAAMY,IAAI;IAEvB,IAAMC,cAAcD,SAAS,cAAcE,qBAAQ,CAACC,WAAW,GAAGD,qBAAQ,CAACE,YAAY;IAEvF,iCAAiC;IACjC,oEAAoE;IACpE,IAAMC,YAAYjB,MAAMkB,KAAK,IAAI,IAAIC;IACrC,IAAMC,aAAqC;QACzCC,MAAMrB,MAAMqB,IAAI,CAACC,KAAK,CAACD,aAAI,CAACE,GAAG,EAAEC,MAAM,CAACC,SAASC,IAAI,CAACL,aAAI,CAACE,GAAG;QAC9DI,UAAU3B,MAAM4B,IAAI;QACpBV,OAAOD,UAAUY,OAAO;QACxBC,MAAM9B,MAAM8B,IAAI,KAAKxB,YAAYN,MAAM8B,IAAI,GAAGjB;IAChD;IAEA,OAAQD;QACN,KAAK;YACHQ,WAAWR,IAAI,GAAG;YAClB,OAAOV,aAAaI,WAAW,IAAIyB,mCAAc,CAACX;QAEpD,KAAK;YAAQ;gBACX,4DAA4D;gBAC5D,6DAA6D;gBAC7D,IAAMY,SAASnC,aAAaoC,SAAS;gBACrC,IAAMC,SAASF,OAAOG,cAAc,CAACnC;gBAErC,IAAMoC,SAAmB,EAAE;gBAE3BF,OAAOG,EAAE,CAAC,QAAQ,SAACC;oBACjBF,OAAO/B,IAAI,CAACiC;gBACd;gBACAJ,OAAOG,EAAE,CAAC,OAAO;oBACf,IAAME,WAAWC,OAAOC,MAAM,CAACL,QAAQM,QAAQ,CAAC;oBAEhD,IAAMC,iBAAiC;wBACrCtB,MAAMD,WAAWC,IAAI;wBACrBH,OAAOE,WAAWF,KAAK;wBACvBY,MAAMV,WAAWU,IAAI;wBACrBS,UAAUA;oBACZ;oBAEArC,aAAaI,WAAW,IAAIsC,sCAAiB,CAACD;gBAChD;gBACAT,OAAOG,EAAE,CAAC,SAAS,SAACQ;oBAClB3C,aAAa2C;gBACf;gBACA;YACF;QAEA,KAAK;YAAQ;gBACXzB,WAAWR,IAAI,GAAG;gBAClBQ,WAAW0B,IAAI,GAAG9C,MAAM8C,IAAI;gBAC5B,IAAMd,UAASnC,aAAaoC,SAAS;gBAErC,IAAMC,UAASF,QAAOG,cAAc,CAACnC;gBACrC,OAAOE,aAAaI,WAAW,IAAIyC,oBAAS,CAAC3B,YAA8Bc,SAAQvC,SAASc,IAAI,EAAUT,MAAMgD,UAAU;YAC5H;IACF;IAEA,OAAOpD,SAAS,IAAIG,MAAM,AAAC,4BAAgC,OAALa;AACxD"}
|
|
@@ -81,6 +81,7 @@ function _class_call_check(instance, Constructor) {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
function _instanceof(left, right) {
|
|
84
|
+
"@swc/helpers - instanceof";
|
|
84
85
|
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
85
86
|
return !!right[Symbol.hasInstance](left);
|
|
86
87
|
} else {
|
|
@@ -273,7 +274,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
|
|
|
273
274
|
callback(err);
|
|
274
275
|
return;
|
|
275
276
|
}
|
|
276
|
-
var finalize = function() {
|
|
277
|
+
var finalize = function finalize() {
|
|
277
278
|
try {
|
|
278
279
|
_this.buildEntries();
|
|
279
280
|
_this.parsed = true;
|
|
@@ -351,7 +352,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
|
|
|
351
352
|
}
|
|
352
353
|
}
|
|
353
354
|
}
|
|
354
|
-
var tryCandidate = function(index) {
|
|
355
|
+
var tryCandidate = function tryCandidate1(index) {
|
|
355
356
|
if (index >= candidates.length) {
|
|
356
357
|
callback((0, _constantsts.createCodedError)('Failed to decompress header - could not find valid LZMA data', _constantsts.ErrorCode.CORRUPT_HEADER));
|
|
357
358
|
return;
|
|
@@ -944,7 +945,7 @@ var SevenZipParser = /*#__PURE__*/ function() {
|
|
|
944
945
|
inputToPackStream[folder.packedStreams[pi]] = pi;
|
|
945
946
|
}
|
|
946
947
|
var processOrder = this.getCoderProcessOrder(folder, bcj2CoderIndex);
|
|
947
|
-
var processNext = function(orderIndex) {
|
|
948
|
+
var processNext = function processNext1(orderIndex) {
|
|
948
949
|
if (orderIndex >= processOrder.length) {
|
|
949
950
|
_this.finishBcj2Decode(folder, bcj2CoderIndex, coderOutputs, inputToPackStream, packStreams, callback);
|
|
950
951
|
return;
|
|
@@ -1172,13 +1173,13 @@ var SevenZipParser = /*#__PURE__*/ function() {
|
|
|
1172
1173
|
}
|
|
1173
1174
|
return {
|
|
1174
1175
|
output: stream,
|
|
1175
|
-
pause: function() {
|
|
1176
|
+
pause: function pause() {
|
|
1176
1177
|
return packedStream.pause();
|
|
1177
1178
|
},
|
|
1178
|
-
resume: function() {
|
|
1179
|
+
resume: function resume() {
|
|
1179
1180
|
return packedStream.resume();
|
|
1180
1181
|
},
|
|
1181
|
-
destroy: function(err) {
|
|
1182
|
+
destroy: function destroy(err) {
|
|
1182
1183
|
// Check for destroy method existence (not available in Node 4 and earlier)
|
|
1183
1184
|
var ps = packedStream;
|
|
1184
1185
|
if (typeof ps.destroy === 'function') ps.destroy(err);
|