7z-iterator 0.1.1 → 0.1.2

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.
@@ -195,9 +195,8 @@ var SevenZipIterator = /*#__PURE__*/ function(BaseIterator) {
195
195
  this.lock = null; // Clear before release to prevent re-entrancy
196
196
  lock.err = err;
197
197
  lock.release();
198
- } else {
199
- _extractbaseiterator.default.prototype.end.call(this, err); // call in lock release so end is properly handled
200
198
  }
199
+ // Don't call base end here - Lock.__destroy() handles it
201
200
  this.iterator = null;
202
201
  };
203
202
  return SevenZipIterator;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport os from 'os';\nimport osShim from 'os-shim';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nvar tmpdir = os.tmpdir || osShim.tmpdir;\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n var queue = new Queue(1);\n var cancelled = false;\n var archiveSource: ArchiveSource | null = null;\n var setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n var tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n var parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n } else {\n BaseIterator.prototype.end.call(this, err); // call in lock release so end is properly handled\n }\n this.iterator = null;\n }\n}\n"],"names":["SevenZipIterator","tmpdir","os","osShim","EntryIterator","parser","index","entries","getEntries","next","length","getParser","source","options","lock","Lock","iterator","queue","Queue","cancelled","archiveSource","setup","undefined","processing","push","setPassword","password","defer","cb","fs","stat","statErr","stats","done","open","err","fd","FileSource","size","tempPath","path","join","shortHash","process","cwd","tempSuffix","streamToSource","memoryThreshold","result","Error","SevenZipParser","parse","parseErr","await","remove","end","nextEntry","release","BaseIterator","prototype","call"],"mappings":";;;;;;;eA2CqBA;;;0EA3CI;yDACV;yDACA;6DACI;2DACF;8DACC;gEACI;iEACC;6DACN;uEACiC;kEAC5B;uBACM;gCACuD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnF,IAAIC,SAASC,WAAE,CAACD,MAAM,IAAIE,eAAM,CAACF,MAAM;AAIvC;;CAEC,GACD,IAAA,AAAMG,8BAAN;;aAAMA,cAKQC,MAAsB;gCAL9BD;aAGIE,QAAQ;QAGd,IAAI,CAACD,MAAM,GAAGA;QACd,IAAI,CAACE,OAAO,GAAGF,OAAOG,UAAU;;iBAP9BJ;IAUJK,OAAAA,IAKC,GALDA,SAAAA;QACE,IAAI,IAAI,CAACH,KAAK,IAAI,IAAI,CAACC,OAAO,CAACG,MAAM,EAAE;YACrC,OAAO;QACT;QACA,OAAO,IAAI,CAACH,OAAO,CAAC,IAAI,CAACD,KAAK,GAAG;IACnC;IAEAK,OAAAA,SAEC,GAFDA,SAAAA;QACE,OAAO,IAAI,CAACN,MAAM;IACpB;WAnBID;;AAsBS,IAAA,AAAMJ,iCAAN;;cAAMA;aAAAA,iBAIPY,MAAsC;YAAEC,UAAAA,iEAA0B,CAAC;gCAJ5Db;;gBAKjB,kBALiBA;YAKXa;;QACN,MAAKC,IAAI,GAAG,IAAIC,eAAI;QACpB,MAAKD,IAAI,CAACE,QAAQ;QAClB,IAAIC,QAAQ,IAAIC,gBAAK,CAAC;QACtB,IAAIC,YAAY;QAChB,IAAIC,gBAAsC;QAC1C,IAAIC,QAAQ;YACVF,YAAY;YACZ,OAAOG;QACT;QACA,MAAKC,UAAU,CAACC,IAAI,CAACH;QAErB,0CAA0C;QAC1CI,IAAAA,oBAAW,EAACZ,QAAQa,QAAQ,IAAI;QAEhC,IAAI,OAAOd,WAAW,UAAU;YAC9B,4CAA4C;YAC5CK,MAAMU,KAAK,CAAC,SAACC;gBACXC,WAAE,CAACC,IAAI,CAAClB,QAAQ,SAACmB,SAASC;oBACxB,IAAI,MAAKC,IAAI,IAAId,WAAW;oBAC5B,IAAIY,SAAS,OAAOH,GAAGG;oBAEvBF,WAAE,CAACK,IAAI,CAACtB,QAAQ,KAAK,SAACuB,KAAKC;wBACzB,IAAI,MAAKH,IAAI,IAAId,WAAW;wBAC5B,IAAIgB,KAAK,OAAOP,GAAGO;wBAEnBf,gBAAgB,IAAIiB,4BAAU,CAACD,IAAIJ,MAAMM,IAAI;wBAC7C,MAAKxB,IAAI,CAACsB,EAAE,GAAGA;wBACfR;oBACF;gBACF;YACF;QACF,OAAO;YACL,sDAAsD;YACtD,IAAIW,WAAWC,aAAI,CAACC,IAAI,CAACxC,UAAU,eAAeyC,IAAAA,kBAAS,EAACC,QAAQC,GAAG,KAAKC,IAAAA,mBAAU,EAAC;YACvF5B,MAAMU,KAAK,CAAC,SAACC;gBACXkB,IAAAA,yBAAc,EACZlC,QACA;oBACEmC,iBAAiBlC,QAAQkC,eAAe;oBACxCR,UAAUA;gBACZ,GACA,SAACJ,KAAaa;oBACZ,IAAI,MAAKf,IAAI,IAAId,WAAW;oBAC5B,IAAIgB,KAAK,OAAOP,GAAGO;oBACnB,IAAI,CAACa,QAAQ,OAAOpB,GAAG,IAAIqB,MAAM;oBAEjC7B,gBAAgB4B,OAAOpC,MAAM;oBAC7B,IAAIoC,OAAOZ,EAAE,KAAKd,WAAW;wBAC3B,MAAKR,IAAI,CAACsB,EAAE,GAAGY,OAAOZ,EAAE;oBAC1B;oBACA,IAAIY,OAAOT,QAAQ,EAAE;wBACnB,MAAKzB,IAAI,CAACyB,QAAQ,GAAGS,OAAOT,QAAQ;oBACtC;oBACAX;gBACF;YAEJ;QACF;QAEA,2BAA2B;QAC3BX,MAAMU,KAAK,CAAC,SAACC;YACX,IAAI,MAAKK,IAAI,IAAId,WAAW;YAC5B,IAAI,CAACC,eAAe,OAAOQ,GAAG,IAAIqB,MAAM;YAExC,IAAI;gBACF,IAAI5C,SAAS,IAAI6C,gCAAc,CAAC9B;gBAChCf,OAAO8C,KAAK;gBACZ,MAAKnC,QAAQ,GAAG,IAAIZ,cAAcC;gBAClCuB;YACF,EAAE,OAAOwB,UAAU;gBACjBxB,GAAGwB;YACL;QACF;QAEA,mBAAmB;QACnBnC,MAAMoC,KAAK,CAAC,SAAClB;YACX,MAAKZ,UAAU,CAAC+B,MAAM,CAACjC;YACvB,IAAI,MAAKY,IAAI,IAAId,WAAW;YAC5BgB,MAAM,MAAKoB,GAAG,CAACpB,OAAO,MAAKX,IAAI,CAACgC,oBAAS;QAC3C;;;iBArFiBxD;IAwFnBuD,OAAAA,GAUC,GAVDA,SAAAA,IAAIpB,GAAW;QACb,IAAI,IAAI,CAACrB,IAAI,EAAE;YACb,IAAMA,OAAO,IAAI,CAACA,IAAI;YACtB,IAAI,CAACA,IAAI,GAAG,MAAM,8CAA8C;YAChEA,KAAKqB,GAAG,GAAGA;YACXrB,KAAK2C,OAAO;QACd,OAAO;YACLC,4BAAY,CAACC,SAAS,CAACJ,GAAG,CAACK,IAAI,CAAC,IAAI,EAAEzB,MAAM,kDAAkD;QAChG;QACA,IAAI,CAACnB,QAAQ,GAAG;IAClB;WAlGmBhB;EAAyB0D,4BAAY"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport os from 'os';\nimport osShim from 'os-shim';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nvar tmpdir = os.tmpdir || osShim.tmpdir;\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n var queue = new Queue(1);\n var cancelled = false;\n var archiveSource: ArchiveSource | null = null;\n var setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n var tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n var parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n }\n // Don't call base end here - Lock.__destroy() handles it\n this.iterator = null;\n }\n}\n"],"names":["SevenZipIterator","tmpdir","os","osShim","EntryIterator","parser","index","entries","getEntries","next","length","getParser","source","options","lock","Lock","iterator","queue","Queue","cancelled","archiveSource","setup","undefined","processing","push","setPassword","password","defer","cb","fs","stat","statErr","stats","done","open","err","fd","FileSource","size","tempPath","path","join","shortHash","process","cwd","tempSuffix","streamToSource","memoryThreshold","result","Error","SevenZipParser","parse","parseErr","await","remove","end","nextEntry","release","BaseIterator"],"mappings":"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"}
@@ -37,9 +37,8 @@ let SevenZipIterator = class SevenZipIterator extends BaseIterator {
37
37
  this.lock = null; // Clear before release to prevent re-entrancy
38
38
  lock.err = err;
39
39
  lock.release();
40
- } else {
41
- BaseIterator.prototype.end.call(this, err); // call in lock release so end is properly handled
42
40
  }
41
+ // Don't call base end here - Lock.__destroy() handles it
43
42
  this.iterator = null;
44
43
  }
45
44
  constructor(source, options = {}){
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport os from 'os';\nimport osShim from 'os-shim';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nvar tmpdir = os.tmpdir || osShim.tmpdir;\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n var queue = new Queue(1);\n var cancelled = false;\n var archiveSource: ArchiveSource | null = null;\n var setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n var tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n var parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n } else {\n BaseIterator.prototype.end.call(this, err); // call in lock release so end is properly handled\n }\n this.iterator = null;\n }\n}\n"],"names":["BaseIterator","fs","os","osShim","path","Queue","shortHash","tempSuffix","Lock","streamToSource","nextEntry","setPassword","FileSource","SevenZipParser","tmpdir","EntryIterator","next","index","entries","length","getParser","parser","getEntries","SevenZipIterator","end","err","lock","release","prototype","call","iterator","source","options","queue","cancelled","archiveSource","setup","undefined","processing","push","password","defer","cb","stat","statErr","stats","done","open","fd","size","tempPath","join","process","cwd","memoryThreshold","result","Error","parse","parseErr","await","remove"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport os from 'os';\nimport osShim from 'os-shim';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nvar tmpdir = os.tmpdir || osShim.tmpdir;\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n var queue = new Queue(1);\n var cancelled = false;\n var archiveSource: ArchiveSource | null = null;\n var setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n var tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n var parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n }\n // Don't call base end here - Lock.__destroy() handles it\n this.iterator = null;\n }\n}\n"],"names":["BaseIterator","fs","os","osShim","path","Queue","shortHash","tempSuffix","Lock","streamToSource","nextEntry","setPassword","FileSource","SevenZipParser","tmpdir","EntryIterator","next","index","entries","length","getParser","parser","getEntries","SevenZipIterator","end","err","lock","release","iterator","source","options","queue","cancelled","archiveSource","setup","undefined","processing","push","password","defer","cb","stat","statErr","stats","done","open","fd","size","tempPath","join","process","cwd","memoryThreshold","result","Error","parse","parseErr","await","remove"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "7z-iterator",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Extract contents from 7z archives using an iterator API. Pure JavaScript, works on Node.js 0.8+",
5
5
  "keywords": [
6
6
  "extract",