7z-iterator 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/cjs/FileEntry.js.map +1 -1
  2. package/dist/cjs/SevenZipIterator.js.map +1 -1
  3. package/dist/cjs/compat.js.map +1 -1
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/lib/defer.js.map +1 -1
  6. package/dist/cjs/lib/streamToSource.js.map +1 -1
  7. package/dist/cjs/nextEntry.js.map +1 -1
  8. package/dist/cjs/sevenz/ArchiveSource.js.map +1 -1
  9. package/dist/cjs/sevenz/FolderStreamSplitter.js.map +1 -1
  10. package/dist/cjs/sevenz/NumberCodec.js.map +1 -1
  11. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
  12. package/dist/cjs/sevenz/codecs/Aes.js.map +1 -1
  13. package/dist/cjs/sevenz/codecs/BZip2.js.map +1 -1
  14. package/dist/cjs/sevenz/codecs/Bcj2.js.map +1 -1
  15. package/dist/cjs/sevenz/codecs/Copy.js.map +1 -1
  16. package/dist/cjs/sevenz/codecs/Deflate.js.map +1 -1
  17. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +1 -1
  18. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +1 -1
  19. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  20. package/dist/cjs/sevenz/codecs/index.d.cts +3 -2
  21. package/dist/cjs/sevenz/codecs/index.d.ts +3 -2
  22. package/dist/cjs/sevenz/codecs/index.js +21 -16
  23. package/dist/cjs/sevenz/codecs/index.js.map +1 -1
  24. package/dist/cjs/sevenz/codecs/streams.js.map +1 -1
  25. package/dist/cjs/sevenz/constants.js.map +1 -1
  26. package/dist/cjs/sevenz/headers.js.map +1 -1
  27. package/dist/cjs/sevenz/index.js.map +1 -1
  28. package/dist/cjs/types.js.map +1 -1
  29. package/dist/esm/FileEntry.js.map +1 -1
  30. package/dist/esm/SevenZipIterator.js.map +1 -1
  31. package/dist/esm/compat.js.map +1 -1
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/lib/defer.js.map +1 -1
  34. package/dist/esm/lib/streamToSource.js.map +1 -1
  35. package/dist/esm/nextEntry.js.map +1 -1
  36. package/dist/esm/sevenz/ArchiveSource.js.map +1 -1
  37. package/dist/esm/sevenz/FolderStreamSplitter.js.map +1 -1
  38. package/dist/esm/sevenz/NumberCodec.js.map +1 -1
  39. package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
  40. package/dist/esm/sevenz/codecs/Aes.js.map +1 -1
  41. package/dist/esm/sevenz/codecs/BZip2.js.map +1 -1
  42. package/dist/esm/sevenz/codecs/Bcj2.js.map +1 -1
  43. package/dist/esm/sevenz/codecs/Copy.js.map +1 -1
  44. package/dist/esm/sevenz/codecs/Deflate.js.map +1 -1
  45. package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +1 -1
  46. package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  47. package/dist/esm/sevenz/codecs/index.d.ts +3 -2
  48. package/dist/esm/sevenz/codecs/index.js +19 -16
  49. package/dist/esm/sevenz/codecs/index.js.map +1 -1
  50. package/dist/esm/sevenz/codecs/streams.js.map +1 -1
  51. package/dist/esm/sevenz/constants.js.map +1 -1
  52. package/dist/esm/sevenz/headers.js.map +1 -1
  53. package/dist/esm/sevenz/index.js.map +1 -1
  54. package/dist/esm/types.js.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/cjs/lib/runDecode.d.cts +0 -5
  57. package/dist/cjs/lib/runDecode.d.ts +0 -5
  58. package/dist/cjs/lib/runDecode.js +0 -55
  59. package/dist/cjs/lib/runDecode.js.map +0 -1
  60. package/dist/esm/lib/runDecode.d.ts +0 -5
  61. package/dist/esm/lib/runDecode.js +0 -29
  62. package/dist/esm/lib/runDecode.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/createBufferingDecoder.ts"],"sourcesContent":["// Helper to create a Transform stream that buffers all input before decoding\n// Used by codecs that need the full input before decompression (LZMA, LZMA2, BZip2, etc.)\n\nimport { Transform } from 'extract-base-iterator';\nimport type { DecodeCallback } from '../../lib/runDecode.ts';\n\ntype TransformCallback = (error?: Error | null, data?: Buffer) => void;\n\nexport type DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number, callback?: DecodeCallback<Buffer>) => Buffer | Promise<Buffer> | void;\n\n/**\n * Create a Transform stream that buffers all input, then decodes in flush\n * This is the common pattern for codecs that can't stream (need full input)\n */\nexport default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): InstanceType<typeof Transform> {\n const chunks: Buffer[] = [];\n\n return new Transform({\n transform: (chunk: Buffer, _encoding: string, callback: TransformCallback) => {\n chunks.push(chunk);\n callback();\n },\n flush: function (callback: TransformCallback) {\n const input = Buffer.concat(chunks);\n const finish = (err?: Error | null, output?: Buffer) => {\n if (err) {\n callback(err);\n return;\n }\n if (output) {\n this.push(output);\n }\n callback();\n };\n\n try {\n const maybeResult = decodeFn(input, properties, unpackSize, finish);\n if (maybeResult && typeof (maybeResult as Promise<Buffer>).then === 'function') {\n (maybeResult as Promise<Buffer>).then(\n (value) => finish(null, value),\n (err) => finish(err as Error)\n );\n return;\n }\n if (Buffer.isBuffer(maybeResult)) {\n finish(null, maybeResult);\n }\n } catch (err) {\n callback(err as Error);\n }\n },\n });\n}\n"],"names":["createBufferingDecoder","decodeFn","properties","unpackSize","chunks","Transform","transform","chunk","_encoding","callback","push","flush","input","Buffer","concat","finish","err","output","maybeResult","then","value","isBuffer"],"mappings":"AAAA,6EAA6E;AAC7E,0FAA0F;;;;;+BAS1F;;;CAGC,GACD;;;eAAwBA;;;mCAXE;AAWX,SAASA,uBAAuBC,QAAkB,EAAEC,UAAmB,EAAEC,UAAmB;IACzG,IAAMC,SAAmB,EAAE;IAE3B,OAAO,IAAIC,8BAAS,CAAC;QACnBC,WAAW,SAACC,OAAeC,WAAmBC;YAC5CL,OAAOM,IAAI,CAACH;YACZE;QACF;QACAE,OAAO,SAAPA,MAAiBF,QAA2B;;YAC1C,IAAMG,QAAQC,OAAOC,MAAM,CAACV;YAC5B,IAAMW,SAAS,SAACC,KAAoBC;gBAClC,IAAID,KAAK;oBACPP,SAASO;oBACT;gBACF;gBACA,IAAIC,QAAQ;oBACV,MAAKP,IAAI,CAACO;gBACZ;gBACAR;YACF;YAEA,IAAI;gBACF,IAAMS,cAAcjB,SAASW,OAAOV,YAAYC,YAAYY;gBAC5D,IAAIG,eAAe,OAAO,AAACA,YAAgCC,IAAI,KAAK,YAAY;oBAC7ED,YAAgCC,IAAI,CACnC,SAACC;+BAAUL,OAAO,MAAMK;uBACxB,SAACJ;+BAAQD,OAAOC;;oBAElB;gBACF;gBACA,IAAIH,OAAOQ,QAAQ,CAACH,cAAc;oBAChCH,OAAO,MAAMG;gBACf;YACF,EAAE,OAAOF,KAAK;gBACZP,SAASO;YACX;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/sevenz/codecs/createBufferingDecoder.ts"],"sourcesContent":["// Helper to create a Transform stream that buffers all input before decoding\n// Used by codecs that need the full input before decompression (LZMA, LZMA2, BZip2, etc.)\n\nimport { Transform } from 'extract-base-iterator';\nimport type { DecodeCallback } from 'xz-compat';\n\ntype TransformCallback = (error?: Error | null, data?: Buffer) => void;\n\nexport type DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number, callback?: DecodeCallback<Buffer>) => Buffer | Promise<Buffer> | void;\n\n/**\n * Create a Transform stream that buffers all input, then decodes in flush\n * This is the common pattern for codecs that can't stream (need full input)\n */\nexport default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): InstanceType<typeof Transform> {\n const chunks: Buffer[] = [];\n\n return new Transform({\n transform: (chunk: Buffer, _encoding: string, callback: TransformCallback) => {\n chunks.push(chunk);\n callback();\n },\n flush: function (callback: TransformCallback) {\n const input = Buffer.concat(chunks);\n const finish = (err?: Error | null, output?: Buffer) => {\n if (err) {\n callback(err);\n return;\n }\n if (output) {\n this.push(output);\n }\n callback();\n };\n\n try {\n const maybeResult = decodeFn(input, properties, unpackSize, finish);\n if (maybeResult && typeof (maybeResult as Promise<Buffer>).then === 'function') {\n (maybeResult as Promise<Buffer>).then(\n (value) => finish(null, value),\n (err) => finish(err as Error)\n );\n return;\n }\n if (Buffer.isBuffer(maybeResult)) {\n finish(null, maybeResult);\n }\n } catch (err) {\n callback(err as Error);\n }\n },\n });\n}\n"],"names":["createBufferingDecoder","decodeFn","properties","unpackSize","chunks","Transform","transform","chunk","_encoding","callback","push","flush","input","Buffer","concat","finish","err","output","maybeResult","then","value","isBuffer"],"mappings":"AAAA,6EAA6E;AAC7E,0FAA0F;;;;;+BAS1F;;;CAGC,GACD;;;eAAwBA;;;mCAXE;AAWX,SAASA,uBAAuBC,QAAkB,EAAEC,UAAmB,EAAEC,UAAmB;IACzG,IAAMC,SAAmB,EAAE;IAE3B,OAAO,IAAIC,8BAAS,CAAC;QACnBC,WAAW,SAACC,OAAeC,WAAmBC;YAC5CL,OAAOM,IAAI,CAACH;YACZE;QACF;QACAE,OAAO,SAAPA,MAAiBF,QAA2B;;YAC1C,IAAMG,QAAQC,OAAOC,MAAM,CAACV;YAC5B,IAAMW,SAAS,SAACC,KAAoBC;gBAClC,IAAID,KAAK;oBACPP,SAASO;oBACT;gBACF;gBACA,IAAIC,QAAQ;oBACV,MAAKP,IAAI,CAACO;gBACZ;gBACAR;YACF;YAEA,IAAI;gBACF,IAAMS,cAAcjB,SAASW,OAAOV,YAAYC,YAAYY;gBAC5D,IAAIG,eAAe,OAAO,AAACA,YAAgCC,IAAI,KAAK,YAAY;oBAC7ED,YAAgCC,IAAI,CACnC,SAACC;+BAAUL,OAAO,MAAMK;uBACxB,SAACJ;+BAAQD,OAAOC;;oBAElB;gBACF;gBACA,IAAIH,OAAOQ,QAAQ,CAACH,cAAc;oBAChCH,OAAO,MAAMG;gBACf;YACF,EAAE,OAAOF,KAAK;gBACZP,SAASO;YACX;QACF;IACF;AACF"}
@@ -1,10 +1,11 @@
1
+ import type { BufferLike } from 'extract-base-iterator';
1
2
  import type { Transform } from 'stream';
2
- import { type DecodeCallback as CodecDecodeCallback } from '../../lib/runDecode.js';
3
+ import { type DecodeCallback as CodecDecodeCallback } from 'xz-compat';
3
4
  import { getPassword, setPassword } from './Aes.js';
4
5
  import { decodeBcj2Multi } from './Bcj2.js';
5
6
  export { getPassword, setPassword };
6
7
  export interface Codec {
7
- decode: (input: Buffer, properties: Buffer | undefined, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>) => void;
8
+ decode: (input: BufferLike, properties: Buffer | undefined, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>) => void;
8
9
  createDecoder: (properties?: Buffer, unpackSize?: number) => Transform;
9
10
  }
10
11
  /**
@@ -1,10 +1,11 @@
1
+ import type { BufferLike } from 'extract-base-iterator';
1
2
  import type { Transform } from 'stream';
2
- import { type DecodeCallback as CodecDecodeCallback } from '../../lib/runDecode.js';
3
+ import { type DecodeCallback as CodecDecodeCallback } from 'xz-compat';
3
4
  import { getPassword, setPassword } from './Aes.js';
4
5
  import { decodeBcj2Multi } from './Bcj2.js';
5
6
  export { getPassword, setPassword };
6
7
  export interface Codec {
7
- decode: (input: Buffer, properties: Buffer | undefined, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>) => void;
8
+ decode: (input: BufferLike, properties: Buffer | undefined, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>) => void;
8
9
  createDecoder: (properties?: Buffer, unpackSize?: number) => Transform;
9
10
  }
10
11
  /**
@@ -37,31 +37,36 @@ _export(exports, {
37
37
  }
38
38
  });
39
39
  var _xzcompat = require("xz-compat");
40
- var _runDecodets = require("../../lib/runDecode.js");
41
40
  var _constantsts = require("../constants.js");
42
41
  var _Aests = require("./Aes.js");
43
42
  var _Bcj2ts = require("./Bcj2.js");
44
43
  var _BZip2ts = require("./BZip2.js");
45
44
  var _Copyts = require("./Copy.js");
46
45
  var _Deflatets = require("./Deflate.js");
46
+ var schedule = typeof setImmediate === 'function' ? setImmediate : function(fn) {
47
+ return process.nextTick(fn);
48
+ };
47
49
  function wrapSyncDecode(fn) {
48
50
  return function(input, properties, unpackSize, callback) {
49
- (0, _runDecodets.runDecode)(function(done) {
50
- done(null, fn(input, properties, unpackSize));
51
- }, callback);
51
+ schedule(function() {
52
+ try {
53
+ // Convert BufferList to Buffer if needed
54
+ var buf = Buffer.isBuffer(input) ? input : input.toBuffer();
55
+ callback(null, fn(buf, properties, unpackSize));
56
+ } catch (err) {
57
+ callback(err);
58
+ }
59
+ });
52
60
  };
53
61
  }
54
- // Simple wrappers with validation that use xz-compat's optimized decode7zLjma/decode7zLzma2
62
+ // Simple wrappers with validation that use xz-compat's optimized decode7zLzma/decode7zLzma2
55
63
  function decodeLzma(input, properties, unpackSize, callback) {
56
- if (!properties || properties.length < 5) {
64
+ if (properties.length < 5) {
57
65
  throw new Error('LZMA requires 5-byte properties');
58
66
  }
59
- if (typeof unpackSize !== 'number' || unpackSize < 0) {
60
- throw new Error('LZMA requires known unpack size');
61
- }
62
- (0, _runDecodets.runDecode)(function(done) {
63
- (0, _xzcompat.decode7zLzma)(input, properties, unpackSize, done);
64
- }, callback);
67
+ // Convert BufferList to Buffer if needed
68
+ var buf = Buffer.isBuffer(input) ? input : input.toBuffer();
69
+ (0, _xzcompat.decode7zLzma)(buf, properties, unpackSize, callback);
65
70
  }
66
71
  function createLzmaDecoder(properties, unpackSize) {
67
72
  if (!properties || properties.length < 5) {
@@ -73,12 +78,12 @@ function createLzmaDecoder(properties, unpackSize) {
73
78
  return (0, _xzcompat.createLzmaDecoder)(properties, unpackSize);
74
79
  }
75
80
  function decodeLzma2(input, properties, unpackSize, callback) {
76
- if (!properties || properties.length < 1) {
81
+ if (properties.length < 1) {
77
82
  throw new Error('LZMA2 requires properties byte');
78
83
  }
79
- (0, _runDecodets.runDecode)(function(done) {
80
- (0, _xzcompat.decode7zLzma2)(input, properties, unpackSize, done);
81
- }, callback);
84
+ // Convert BufferList to Buffer if needed
85
+ var buf = Buffer.isBuffer(input) ? input : input.toBuffer();
86
+ (0, _xzcompat.decode7zLzma2)(buf, properties, unpackSize, callback);
82
87
  }
83
88
  function createLzma2Decoder(properties, _unpackSize) {
84
89
  if (!properties || properties.length < 1) {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/index.ts"],"sourcesContent":["// Codec registry for 7z decompression\n// Each codec provides a decode function and optionally a streaming decoder\n\nimport type { Transform } from 'stream';\nimport {\n createLzma2Decoder as _createLzma2Decoder,\n createLzmaDecoder as _createLzmaDecoder,\n createBcjArm64Decoder,\n createBcjArmDecoder,\n createBcjArmtDecoder,\n createBcjDecoder,\n createBcjIa64Decoder,\n createBcjPpcDecoder,\n createBcjSparcDecoder,\n createDeltaDecoder,\n decode7zLzma,\n decode7zLzma2,\n decodeBcj,\n decodeBcjArm,\n decodeBcjArm64,\n decodeBcjArmt,\n decodeBcjIa64,\n decodeBcjPpc,\n decodeBcjSparc,\n decodeDelta,\n} from 'xz-compat';\nimport { type DecodeCallback as CodecDecodeCallback, runDecode } from '../../lib/runDecode.ts';\nimport { CodecId, createCodedError, ErrorCode } from '../constants.ts';\nimport { createAesDecoder, decodeAes, getPassword, setPassword } from './Aes.ts';\nimport { createBcj2Decoder, decodeBcj2, decodeBcj2Multi } from './Bcj2.ts';\nimport { createBzip2Decoder, decodeBzip2 } from './BZip2.ts';\nimport { createCopyDecoder, decodeCopy } from './Copy.ts';\nimport { createDeflateDecoder, decodeDeflate } from './Deflate.ts';\n\n// Re-export password functions for API access\nexport { getPassword, setPassword };\n\nfunction wrapSyncDecode(fn: (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer): Codec['decode'] {\n return (input, properties, unpackSize, callback) => {\n runDecode((done) => {\n done(null, fn(input, properties, unpackSize));\n }, callback);\n };\n}\n\nexport interface Codec {\n decode: (input: Buffer, properties: Buffer | undefined, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>) => void;\n createDecoder: (properties?: Buffer, unpackSize?: number) => Transform;\n}\n\n// Simple wrappers with validation that use xz-compat's optimized decode7zLjma/decode7zLzma2\nfunction decodeLzma(input: Buffer, properties?: Buffer, unpackSize?: number, callback?: CodecDecodeCallback<Buffer>): void {\n if (!properties || properties.length < 5) {\n throw new Error('LZMA requires 5-byte properties');\n }\n if (typeof unpackSize !== 'number' || unpackSize < 0) {\n throw new Error('LZMA requires known unpack size');\n }\n runDecode((done) => {\n decode7zLzma(input, properties, unpackSize, done);\n }, callback);\n}\n\nfunction createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform {\n if (!properties || properties.length < 5) {\n throw new Error('LZMA requires 5-byte properties');\n }\n if (typeof unpackSize !== 'number' || unpackSize < 0) {\n throw new Error('LZMA requires known unpack size');\n }\n return _createLzmaDecoder(properties, unpackSize) as Transform;\n}\n\nfunction decodeLzma2(input: Buffer, properties?: Buffer, unpackSize?: number, callback?: CodecDecodeCallback<Buffer>): void {\n if (!properties || properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n runDecode((done) => {\n decode7zLzma2(input, properties, unpackSize, done);\n }, callback);\n}\n\nfunction createLzma2Decoder(properties?: Buffer, _unpackSize?: number): Transform {\n if (!properties || properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n return _createLzma2Decoder(properties) as Transform;\n}\n\n// Registry of supported codecs\nconst codecs: { [key: string]: Codec } = {};\n\n/**\n * Convert codec ID bytes to a string key\n */\nfunction codecIdToKey(id: number[]): string {\n const parts: string[] = [];\n for (let i = 0; i < id.length; i++) {\n parts.push(id[i].toString(16).toUpperCase());\n }\n return parts.join('-');\n}\n\n/**\n * Check if two codec IDs match\n */\nfunction codecIdEquals(a: number[], b: number[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Register a codec\n */\nexport function registerCodec(id: number[], codec: Codec): void {\n codecs[codecIdToKey(id)] = codec;\n}\n\n/**\n * Get a codec by ID\n * @throws Error if codec is not supported\n */\nexport function getCodec(id: number[]): Codec {\n const key = codecIdToKey(id);\n const codec = codecs[key];\n if (!codec) {\n throw createCodedError(`Unsupported codec: ${key}`, ErrorCode.UNSUPPORTED_CODEC);\n }\n return codec;\n}\n\n/**\n * Check if a codec is supported\n */\nexport function isCodecSupported(id: number[]): boolean {\n return codecs[codecIdToKey(id)] !== undefined;\n}\n\n/**\n * Get human-readable codec name\n */\nexport function getCodecName(id: number[]): string {\n if (codecIdEquals(id, CodecId.COPY)) return 'Copy';\n if (codecIdEquals(id, CodecId.LZMA)) return 'LZMA';\n if (codecIdEquals(id, CodecId.LZMA2)) return 'LZMA2';\n if (codecIdEquals(id, CodecId.BCJ_X86)) return 'BCJ (x86)';\n if (codecIdEquals(id, CodecId.BCJ_ARM)) return 'BCJ (ARM)';\n if (codecIdEquals(id, CodecId.BCJ_ARMT)) return 'BCJ (ARM Thumb)';\n if (codecIdEquals(id, CodecId.BCJ_ARM64)) return 'BCJ (ARM64)';\n if (codecIdEquals(id, CodecId.BCJ_PPC)) return 'BCJ (PowerPC)';\n if (codecIdEquals(id, CodecId.BCJ_IA64)) return 'BCJ (IA64)';\n if (codecIdEquals(id, CodecId.BCJ_SPARC)) return 'BCJ (SPARC)';\n if (codecIdEquals(id, CodecId.BCJ2)) return 'BCJ2';\n if (codecIdEquals(id, CodecId.PPMD)) return 'PPMd';\n if (codecIdEquals(id, CodecId.DELTA)) return 'Delta';\n if (codecIdEquals(id, CodecId.DEFLATE)) return 'Deflate';\n if (codecIdEquals(id, CodecId.BZIP2)) return 'BZip2';\n if (codecIdEquals(id, CodecId.AES)) return 'AES-256';\n return `Unknown (${codecIdToKey(id)})`;\n}\n\n/**\n * Check if a codec ID matches BCJ2\n */\nexport function isBcj2Codec(id: number[]): boolean {\n return codecIdEquals(id, CodecId.BCJ2);\n}\n\n// Re-export BCJ2 multi-stream decoder for special handling\nexport { decodeBcj2Multi };\n\n// Register built-in codecs\n\n// Copy codec (no compression)\nregisterCodec(CodecId.COPY, {\n decode: wrapSyncDecode(decodeCopy),\n createDecoder: createCopyDecoder,\n});\n\n// LZMA codec\nregisterCodec(CodecId.LZMA, {\n decode: decodeLzma,\n createDecoder: createLzmaDecoder,\n});\n\n// LZMA2 codec\nregisterCodec(CodecId.LZMA2, {\n decode: decodeLzma2,\n createDecoder: createLzma2Decoder,\n});\n\n// BCJ (x86) filter\nregisterCodec(CodecId.BCJ_X86, {\n decode: wrapSyncDecode(decodeBcj),\n createDecoder: createBcjDecoder,\n});\n\n// BCJ (ARM) filter\nregisterCodec(CodecId.BCJ_ARM, {\n decode: wrapSyncDecode(decodeBcjArm),\n createDecoder: createBcjArmDecoder,\n});\n\n// BCJ (ARM Thumb) filter\nregisterCodec(CodecId.BCJ_ARMT, {\n decode: wrapSyncDecode(decodeBcjArmt),\n createDecoder: createBcjArmtDecoder,\n});\n\n// BCJ (ARM64) filter\nregisterCodec(CodecId.BCJ_ARM64, {\n decode: wrapSyncDecode(decodeBcjArm64),\n createDecoder: createBcjArm64Decoder,\n});\n\n// BCJ (PowerPC) filter\nregisterCodec(CodecId.BCJ_PPC, {\n decode: wrapSyncDecode(decodeBcjPpc),\n createDecoder: createBcjPpcDecoder,\n});\n\n// BCJ (IA64) filter\nregisterCodec(CodecId.BCJ_IA64, {\n decode: wrapSyncDecode(decodeBcjIa64),\n createDecoder: createBcjIa64Decoder,\n});\n\n// BCJ (SPARC) filter\nregisterCodec(CodecId.BCJ_SPARC, {\n decode: wrapSyncDecode(decodeBcjSparc),\n createDecoder: createBcjSparcDecoder,\n});\n\n// Delta filter\nregisterCodec(CodecId.DELTA, {\n decode: wrapSyncDecode(decodeDelta),\n createDecoder: createDeltaDecoder,\n});\n\n// Deflate codec\nregisterCodec(CodecId.DEFLATE, {\n decode: wrapSyncDecode(decodeDeflate),\n createDecoder: createDeflateDecoder,\n});\n\n// BZip2 codec\nregisterCodec(CodecId.BZIP2, {\n decode: wrapSyncDecode(decodeBzip2),\n createDecoder: createBzip2Decoder,\n});\n\n// AES-256-CBC codec (encryption)\nregisterCodec(CodecId.AES, {\n decode: wrapSyncDecode(decodeAes),\n createDecoder: createAesDecoder,\n});\n\n// BCJ2 (x86-64) filter - multi-stream\n// Note: BCJ2 requires special handling in SevenZipParser due to 4-stream architecture\nregisterCodec(CodecId.BCJ2, {\n decode: decodeBcj2,\n createDecoder: createBcj2Decoder,\n});\n\n// Note: PPMd codec is not implemented. See FUTURE_ENHANCEMENTS.md\n"],"names":["decodeBcj2Multi","getCodec","getCodecName","getPassword","isBcj2Codec","isCodecSupported","registerCodec","setPassword","wrapSyncDecode","fn","input","properties","unpackSize","callback","runDecode","done","decodeLzma","length","Error","decode7zLzma","createLzmaDecoder","_createLzmaDecoder","decodeLzma2","decode7zLzma2","createLzma2Decoder","_unpackSize","_createLzma2Decoder","codecs","codecIdToKey","id","parts","i","push","toString","toUpperCase","join","codecIdEquals","a","b","codec","key","createCodedError","ErrorCode","UNSUPPORTED_CODEC","undefined","CodecId","COPY","LZMA","LZMA2","BCJ_X86","BCJ_ARM","BCJ_ARMT","BCJ_ARM64","BCJ_PPC","BCJ_IA64","BCJ_SPARC","BCJ2","PPMD","DELTA","DEFLATE","BZIP2","AES","decode","decodeCopy","createDecoder","createCopyDecoder","decodeBcj","createBcjDecoder","decodeBcjArm","createBcjArmDecoder","decodeBcjArmt","createBcjArmtDecoder","decodeBcjArm64","createBcjArm64Decoder","decodeBcjPpc","createBcjPpcDecoder","decodeBcjIa64","createBcjIa64Decoder","decodeBcjSparc","createBcjSparcDecoder","decodeDelta","createDeltaDecoder","decodeDeflate","createDeflateDecoder","decodeBzip2","createBzip2Decoder","decodeAes","createAesDecoder","decodeBcj2","createBcj2Decoder"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/sevenz/codecs/index.ts"],"sourcesContent":["// Codec registry for 7z decompression\n// Each codec provides a decode function and optionally a streaming decoder\n\nimport type { BufferLike } from 'extract-base-iterator';\nimport type { Transform } from 'stream';\nimport {\n createLzma2Decoder as _createLzma2Decoder,\n createLzmaDecoder as _createLzmaDecoder,\n type DecodeCallback as CodecDecodeCallback,\n createBcjArm64Decoder,\n createBcjArmDecoder,\n createBcjArmtDecoder,\n createBcjDecoder,\n createBcjIa64Decoder,\n createBcjPpcDecoder,\n createBcjSparcDecoder,\n createDeltaDecoder,\n decode7zLzma,\n decode7zLzma2,\n decodeBcj,\n decodeBcjArm,\n decodeBcjArm64,\n decodeBcjArmt,\n decodeBcjIa64,\n decodeBcjPpc,\n decodeBcjSparc,\n decodeDelta,\n} from 'xz-compat';\nimport { CodecId, createCodedError, ErrorCode } from '../constants.ts';\nimport { createAesDecoder, decodeAes, getPassword, setPassword } from './Aes.ts';\nimport { createBcj2Decoder, decodeBcj2, decodeBcj2Multi } from './Bcj2.ts';\nimport { createBzip2Decoder, decodeBzip2 } from './BZip2.ts';\nimport { createCopyDecoder, decodeCopy } from './Copy.ts';\nimport { createDeflateDecoder, decodeDeflate } from './Deflate.ts';\n\n// Re-export password functions for API access\nexport { getPassword, setPassword };\n\nconst schedule = typeof setImmediate === 'function' ? setImmediate : (fn: () => void) => process.nextTick(fn);\n\nfunction wrapSyncDecode(fn: (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer): Codec['decode'] {\n return (input, properties, unpackSize, callback) => {\n schedule(() => {\n try {\n // Convert BufferList to Buffer if needed\n const buf = Buffer.isBuffer(input) ? input : input.toBuffer();\n callback(null, fn(buf, properties, unpackSize));\n } catch (err) {\n callback(err as Error);\n }\n });\n };\n}\n\nexport interface Codec {\n decode: (input: BufferLike, properties: Buffer | undefined, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>) => void;\n createDecoder: (properties?: Buffer, unpackSize?: number) => Transform;\n}\n\n// Simple wrappers with validation that use xz-compat's optimized decode7zLzma/decode7zLzma2\nfunction decodeLzma(input: BufferLike, properties: Buffer, unpackSize: number, callback: CodecDecodeCallback<Buffer>): void {\n if (properties.length < 5) {\n throw new Error('LZMA requires 5-byte properties');\n }\n // Convert BufferList to Buffer if needed\n const buf = Buffer.isBuffer(input) ? input : input.toBuffer();\n decode7zLzma(buf, properties, unpackSize, callback);\n}\n\nfunction createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform {\n if (!properties || properties.length < 5) {\n throw new Error('LZMA requires 5-byte properties');\n }\n if (typeof unpackSize !== 'number' || unpackSize < 0) {\n throw new Error('LZMA requires known unpack size');\n }\n return _createLzmaDecoder(properties, unpackSize) as Transform;\n}\n\nfunction decodeLzma2(input: BufferLike, properties: Buffer, unpackSize: number | undefined, callback: CodecDecodeCallback<Buffer>): void {\n if (properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n // Convert BufferList to Buffer if needed\n const buf = Buffer.isBuffer(input) ? input : input.toBuffer();\n decode7zLzma2(buf, properties, unpackSize, callback);\n}\n\nfunction createLzma2Decoder(properties?: Buffer, _unpackSize?: number): Transform {\n if (!properties || properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n return _createLzma2Decoder(properties) as Transform;\n}\n\n// Registry of supported codecs\nconst codecs: { [key: string]: Codec } = {};\n\n/**\n * Convert codec ID bytes to a string key\n */\nfunction codecIdToKey(id: number[]): string {\n const parts: string[] = [];\n for (let i = 0; i < id.length; i++) {\n parts.push(id[i].toString(16).toUpperCase());\n }\n return parts.join('-');\n}\n\n/**\n * Check if two codec IDs match\n */\nfunction codecIdEquals(a: number[], b: number[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n/**\n * Register a codec\n */\nexport function registerCodec(id: number[], codec: Codec): void {\n codecs[codecIdToKey(id)] = codec;\n}\n\n/**\n * Get a codec by ID\n * @throws Error if codec is not supported\n */\nexport function getCodec(id: number[]): Codec {\n const key = codecIdToKey(id);\n const codec = codecs[key];\n if (!codec) {\n throw createCodedError(`Unsupported codec: ${key}`, ErrorCode.UNSUPPORTED_CODEC);\n }\n return codec;\n}\n\n/**\n * Check if a codec is supported\n */\nexport function isCodecSupported(id: number[]): boolean {\n return codecs[codecIdToKey(id)] !== undefined;\n}\n\n/**\n * Get human-readable codec name\n */\nexport function getCodecName(id: number[]): string {\n if (codecIdEquals(id, CodecId.COPY)) return 'Copy';\n if (codecIdEquals(id, CodecId.LZMA)) return 'LZMA';\n if (codecIdEquals(id, CodecId.LZMA2)) return 'LZMA2';\n if (codecIdEquals(id, CodecId.BCJ_X86)) return 'BCJ (x86)';\n if (codecIdEquals(id, CodecId.BCJ_ARM)) return 'BCJ (ARM)';\n if (codecIdEquals(id, CodecId.BCJ_ARMT)) return 'BCJ (ARM Thumb)';\n if (codecIdEquals(id, CodecId.BCJ_ARM64)) return 'BCJ (ARM64)';\n if (codecIdEquals(id, CodecId.BCJ_PPC)) return 'BCJ (PowerPC)';\n if (codecIdEquals(id, CodecId.BCJ_IA64)) return 'BCJ (IA64)';\n if (codecIdEquals(id, CodecId.BCJ_SPARC)) return 'BCJ (SPARC)';\n if (codecIdEquals(id, CodecId.BCJ2)) return 'BCJ2';\n if (codecIdEquals(id, CodecId.PPMD)) return 'PPMd';\n if (codecIdEquals(id, CodecId.DELTA)) return 'Delta';\n if (codecIdEquals(id, CodecId.DEFLATE)) return 'Deflate';\n if (codecIdEquals(id, CodecId.BZIP2)) return 'BZip2';\n if (codecIdEquals(id, CodecId.AES)) return 'AES-256';\n return `Unknown (${codecIdToKey(id)})`;\n}\n\n/**\n * Check if a codec ID matches BCJ2\n */\nexport function isBcj2Codec(id: number[]): boolean {\n return codecIdEquals(id, CodecId.BCJ2);\n}\n\n// Re-export BCJ2 multi-stream decoder for special handling\nexport { decodeBcj2Multi };\n\n// Register built-in codecs\n\n// Copy codec (no compression)\nregisterCodec(CodecId.COPY, {\n decode: wrapSyncDecode(decodeCopy),\n createDecoder: createCopyDecoder,\n});\n\n// LZMA codec\nregisterCodec(CodecId.LZMA, {\n decode: decodeLzma,\n createDecoder: createLzmaDecoder,\n});\n\n// LZMA2 codec\nregisterCodec(CodecId.LZMA2, {\n decode: decodeLzma2,\n createDecoder: createLzma2Decoder,\n});\n\n// BCJ (x86) filter\nregisterCodec(CodecId.BCJ_X86, {\n decode: wrapSyncDecode(decodeBcj),\n createDecoder: createBcjDecoder,\n});\n\n// BCJ (ARM) filter\nregisterCodec(CodecId.BCJ_ARM, {\n decode: wrapSyncDecode(decodeBcjArm),\n createDecoder: createBcjArmDecoder,\n});\n\n// BCJ (ARM Thumb) filter\nregisterCodec(CodecId.BCJ_ARMT, {\n decode: wrapSyncDecode(decodeBcjArmt),\n createDecoder: createBcjArmtDecoder,\n});\n\n// BCJ (ARM64) filter\nregisterCodec(CodecId.BCJ_ARM64, {\n decode: wrapSyncDecode(decodeBcjArm64),\n createDecoder: createBcjArm64Decoder,\n});\n\n// BCJ (PowerPC) filter\nregisterCodec(CodecId.BCJ_PPC, {\n decode: wrapSyncDecode(decodeBcjPpc),\n createDecoder: createBcjPpcDecoder,\n});\n\n// BCJ (IA64) filter\nregisterCodec(CodecId.BCJ_IA64, {\n decode: wrapSyncDecode(decodeBcjIa64),\n createDecoder: createBcjIa64Decoder,\n});\n\n// BCJ (SPARC) filter\nregisterCodec(CodecId.BCJ_SPARC, {\n decode: wrapSyncDecode(decodeBcjSparc),\n createDecoder: createBcjSparcDecoder,\n});\n\n// Delta filter\nregisterCodec(CodecId.DELTA, {\n decode: wrapSyncDecode(decodeDelta),\n createDecoder: createDeltaDecoder,\n});\n\n// Deflate codec\nregisterCodec(CodecId.DEFLATE, {\n decode: wrapSyncDecode(decodeDeflate),\n createDecoder: createDeflateDecoder,\n});\n\n// BZip2 codec\nregisterCodec(CodecId.BZIP2, {\n decode: wrapSyncDecode(decodeBzip2),\n createDecoder: createBzip2Decoder,\n});\n\n// AES-256-CBC codec (encryption)\nregisterCodec(CodecId.AES, {\n decode: wrapSyncDecode(decodeAes),\n createDecoder: createAesDecoder,\n});\n\n// BCJ2 (x86-64) filter - multi-stream\n// Note: BCJ2 requires special handling in SevenZipParser due to 4-stream architecture\nregisterCodec(CodecId.BCJ2, {\n decode: decodeBcj2,\n createDecoder: createBcj2Decoder,\n});\n\n// Note: PPMd codec is not implemented. See FUTURE_ENHANCEMENTS.md\n"],"names":["decodeBcj2Multi","getCodec","getCodecName","getPassword","isBcj2Codec","isCodecSupported","registerCodec","setPassword","schedule","setImmediate","fn","process","nextTick","wrapSyncDecode","input","properties","unpackSize","callback","buf","Buffer","isBuffer","toBuffer","err","decodeLzma","length","Error","decode7zLzma","createLzmaDecoder","_createLzmaDecoder","decodeLzma2","decode7zLzma2","createLzma2Decoder","_unpackSize","_createLzma2Decoder","codecs","codecIdToKey","id","parts","i","push","toString","toUpperCase","join","codecIdEquals","a","b","codec","key","createCodedError","ErrorCode","UNSUPPORTED_CODEC","undefined","CodecId","COPY","LZMA","LZMA2","BCJ_X86","BCJ_ARM","BCJ_ARMT","BCJ_ARM64","BCJ_PPC","BCJ_IA64","BCJ_SPARC","BCJ2","PPMD","DELTA","DEFLATE","BZIP2","AES","decode","decodeCopy","createDecoder","createCopyDecoder","decodeBcj","createBcjDecoder","decodeBcjArm","createBcjArmDecoder","decodeBcjArmt","createBcjArmtDecoder","decodeBcjArm64","createBcjArm64Decoder","decodeBcjPpc","createBcjPpcDecoder","decodeBcjIa64","createBcjIa64Decoder","decodeBcjSparc","createBcjSparcDecoder","decodeDelta","createDeltaDecoder","decodeDeflate","createDeflateDecoder","decodeBzip2","createBzip2Decoder","decodeAes","createAesDecoder","decodeBcj2","createBcj2Decoder"],"mappings":"AAAA,sCAAsC;AACtC,2EAA2E;;;;;;;;;;;;QAiLlEA;eAAAA,uBAAe;;QA/CRC;eAAAA;;QAmBAC;eAAAA;;QAlHPC;eAAAA,kBAAW;;QAyIJC;eAAAA;;QA9BAC;eAAAA;;QApBAC;eAAAA;;QAvFMC;eAAAA,kBAAW;;;wBAT1B;2BAC8C;qBACiB;sBACP;uBACf;sBACF;yBACM;AAKpD,IAAMC,WAAW,OAAOC,iBAAiB,aAAaA,eAAe,SAACC;WAAmBC,QAAQC,QAAQ,CAACF;;AAE1G,SAASG,eAAeH,EAAuE;IAC7F,OAAO,SAACI,OAAOC,YAAYC,YAAYC;QACrCT,SAAS;YACP,IAAI;gBACF,yCAAyC;gBACzC,IAAMU,MAAMC,OAAOC,QAAQ,CAACN,SAASA,QAAQA,MAAMO,QAAQ;gBAC3DJ,SAAS,MAAMP,GAAGQ,KAAKH,YAAYC;YACrC,EAAE,OAAOM,KAAK;gBACZL,SAASK;YACX;QACF;IACF;AACF;AAOA,4FAA4F;AAC5F,SAASC,WAAWT,KAAiB,EAAEC,UAAkB,EAAEC,UAAkB,EAAEC,QAAqC;IAClH,IAAIF,WAAWS,MAAM,GAAG,GAAG;QACzB,MAAM,IAAIC,MAAM;IAClB;IACA,yCAAyC;IACzC,IAAMP,MAAMC,OAAOC,QAAQ,CAACN,SAASA,QAAQA,MAAMO,QAAQ;IAC3DK,IAAAA,sBAAY,EAACR,KAAKH,YAAYC,YAAYC;AAC5C;AAEA,SAASU,kBAAkBZ,UAAmB,EAAEC,UAAmB;IACjE,IAAI,CAACD,cAAcA,WAAWS,MAAM,GAAG,GAAG;QACxC,MAAM,IAAIC,MAAM;IAClB;IACA,IAAI,OAAOT,eAAe,YAAYA,aAAa,GAAG;QACpD,MAAM,IAAIS,MAAM;IAClB;IACA,OAAOG,IAAAA,2BAAkB,EAACb,YAAYC;AACxC;AAEA,SAASa,YAAYf,KAAiB,EAAEC,UAAkB,EAAEC,UAA8B,EAAEC,QAAqC;IAC/H,IAAIF,WAAWS,MAAM,GAAG,GAAG;QACzB,MAAM,IAAIC,MAAM;IAClB;IACA,yCAAyC;IACzC,IAAMP,MAAMC,OAAOC,QAAQ,CAACN,SAASA,QAAQA,MAAMO,QAAQ;IAC3DS,IAAAA,uBAAa,EAACZ,KAAKH,YAAYC,YAAYC;AAC7C;AAEA,SAASc,mBAAmBhB,UAAmB,EAAEiB,WAAoB;IACnE,IAAI,CAACjB,cAAcA,WAAWS,MAAM,GAAG,GAAG;QACxC,MAAM,IAAIC,MAAM;IAClB;IACA,OAAOQ,IAAAA,4BAAmB,EAAClB;AAC7B;AAEA,+BAA+B;AAC/B,IAAMmB,SAAmC,CAAC;AAE1C;;CAEC,GACD,SAASC,aAAaC,EAAY;IAChC,IAAMC,QAAkB,EAAE;IAC1B,IAAK,IAAIC,IAAI,GAAGA,IAAIF,GAAGZ,MAAM,EAAEc,IAAK;QAClCD,MAAME,IAAI,CAACH,EAAE,CAACE,EAAE,CAACE,QAAQ,CAAC,IAAIC,WAAW;IAC3C;IACA,OAAOJ,MAAMK,IAAI,CAAC;AACpB;AAEA;;CAEC,GACD,SAASC,cAAcC,CAAW,EAAEC,CAAW;IAC7C,IAAID,EAAEpB,MAAM,KAAKqB,EAAErB,MAAM,EAAE,OAAO;IAClC,IAAK,IAAIc,IAAI,GAAGA,IAAIM,EAAEpB,MAAM,EAAEc,IAAK;QACjC,IAAIM,CAAC,CAACN,EAAE,KAAKO,CAAC,CAACP,EAAE,EAAE,OAAO;IAC5B;IACA,OAAO;AACT;AAKO,SAAShC,cAAc8B,EAAY,EAAEU,KAAY;IACtDZ,MAAM,CAACC,aAAaC,IAAI,GAAGU;AAC7B;AAMO,SAAS7C,SAASmC,EAAY;IACnC,IAAMW,MAAMZ,aAAaC;IACzB,IAAMU,QAAQZ,MAAM,CAACa,IAAI;IACzB,IAAI,CAACD,OAAO;QACV,MAAME,IAAAA,6BAAgB,EAAC,AAAC,sBAAyB,OAAJD,MAAOE,sBAAS,CAACC,iBAAiB;IACjF;IACA,OAAOJ;AACT;AAKO,SAASzC,iBAAiB+B,EAAY;IAC3C,OAAOF,MAAM,CAACC,aAAaC,IAAI,KAAKe;AACtC;AAKO,SAASjD,aAAakC,EAAY;IACvC,IAAIO,cAAcP,IAAIgB,oBAAO,CAACC,IAAI,GAAG,OAAO;IAC5C,IAAIV,cAAcP,IAAIgB,oBAAO,CAACE,IAAI,GAAG,OAAO;IAC5C,IAAIX,cAAcP,IAAIgB,oBAAO,CAACG,KAAK,GAAG,OAAO;IAC7C,IAAIZ,cAAcP,IAAIgB,oBAAO,CAACI,OAAO,GAAG,OAAO;IAC/C,IAAIb,cAAcP,IAAIgB,oBAAO,CAACK,OAAO,GAAG,OAAO;IAC/C,IAAId,cAAcP,IAAIgB,oBAAO,CAACM,QAAQ,GAAG,OAAO;IAChD,IAAIf,cAAcP,IAAIgB,oBAAO,CAACO,SAAS,GAAG,OAAO;IACjD,IAAIhB,cAAcP,IAAIgB,oBAAO,CAACQ,OAAO,GAAG,OAAO;IAC/C,IAAIjB,cAAcP,IAAIgB,oBAAO,CAACS,QAAQ,GAAG,OAAO;IAChD,IAAIlB,cAAcP,IAAIgB,oBAAO,CAACU,SAAS,GAAG,OAAO;IACjD,IAAInB,cAAcP,IAAIgB,oBAAO,CAACW,IAAI,GAAG,OAAO;IAC5C,IAAIpB,cAAcP,IAAIgB,oBAAO,CAACY,IAAI,GAAG,OAAO;IAC5C,IAAIrB,cAAcP,IAAIgB,oBAAO,CAACa,KAAK,GAAG,OAAO;IAC7C,IAAItB,cAAcP,IAAIgB,oBAAO,CAACc,OAAO,GAAG,OAAO;IAC/C,IAAIvB,cAAcP,IAAIgB,oBAAO,CAACe,KAAK,GAAG,OAAO;IAC7C,IAAIxB,cAAcP,IAAIgB,oBAAO,CAACgB,GAAG,GAAG,OAAO;IAC3C,OAAO,AAAC,YAA4B,OAAjBjC,aAAaC,KAAI;AACtC;AAKO,SAAShC,YAAYgC,EAAY;IACtC,OAAOO,cAAcP,IAAIgB,oBAAO,CAACW,IAAI;AACvC;AAKA,2BAA2B;AAE3B,8BAA8B;AAC9BzD,cAAc8C,oBAAO,CAACC,IAAI,EAAE;IAC1BgB,QAAQxD,eAAeyD,kBAAU;IACjCC,eAAeC,yBAAiB;AAClC;AAEA,aAAa;AACblE,cAAc8C,oBAAO,CAACE,IAAI,EAAE;IAC1Be,QAAQ9C;IACRgD,eAAe5C;AACjB;AAEA,cAAc;AACdrB,cAAc8C,oBAAO,CAACG,KAAK,EAAE;IAC3Bc,QAAQxC;IACR0C,eAAexC;AACjB;AAEA,mBAAmB;AACnBzB,cAAc8C,oBAAO,CAACI,OAAO,EAAE;IAC7Ba,QAAQxD,eAAe4D,mBAAS;IAChCF,eAAeG,0BAAgB;AACjC;AAEA,mBAAmB;AACnBpE,cAAc8C,oBAAO,CAACK,OAAO,EAAE;IAC7BY,QAAQxD,eAAe8D,sBAAY;IACnCJ,eAAeK,6BAAmB;AACpC;AAEA,yBAAyB;AACzBtE,cAAc8C,oBAAO,CAACM,QAAQ,EAAE;IAC9BW,QAAQxD,eAAegE,uBAAa;IACpCN,eAAeO,8BAAoB;AACrC;AAEA,qBAAqB;AACrBxE,cAAc8C,oBAAO,CAACO,SAAS,EAAE;IAC/BU,QAAQxD,eAAekE,wBAAc;IACrCR,eAAeS,+BAAqB;AACtC;AAEA,uBAAuB;AACvB1E,cAAc8C,oBAAO,CAACQ,OAAO,EAAE;IAC7BS,QAAQxD,eAAeoE,sBAAY;IACnCV,eAAeW,6BAAmB;AACpC;AAEA,oBAAoB;AACpB5E,cAAc8C,oBAAO,CAACS,QAAQ,EAAE;IAC9BQ,QAAQxD,eAAesE,uBAAa;IACpCZ,eAAea,8BAAoB;AACrC;AAEA,qBAAqB;AACrB9E,cAAc8C,oBAAO,CAACU,SAAS,EAAE;IAC/BO,QAAQxD,eAAewE,wBAAc;IACrCd,eAAee,+BAAqB;AACtC;AAEA,eAAe;AACfhF,cAAc8C,oBAAO,CAACa,KAAK,EAAE;IAC3BI,QAAQxD,eAAe0E,qBAAW;IAClChB,eAAeiB,4BAAkB;AACnC;AAEA,gBAAgB;AAChBlF,cAAc8C,oBAAO,CAACc,OAAO,EAAE;IAC7BG,QAAQxD,eAAe4E,wBAAa;IACpClB,eAAemB,+BAAoB;AACrC;AAEA,cAAc;AACdpF,cAAc8C,oBAAO,CAACe,KAAK,EAAE;IAC3BE,QAAQxD,eAAe8E,oBAAW;IAClCpB,eAAeqB,2BAAkB;AACnC;AAEA,iCAAiC;AACjCtF,cAAc8C,oBAAO,CAACgB,GAAG,EAAE;IACzBC,QAAQxD,eAAegF,gBAAS;IAChCtB,eAAeuB,uBAAgB;AACjC;AAEA,sCAAsC;AACtC,sFAAsF;AACtFxF,cAAc8C,oBAAO,CAACW,IAAI,EAAE;IAC1BM,QAAQ0B,kBAAU;IAClBxB,eAAeyB,yBAAiB;AAClC,IAEA,kEAAkE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/streams.ts"],"sourcesContent":["// Shared stream wrappers for lzma-purejs codec interface\n// These adapters convert between Buffer/lzma-purejs stream interfaces\n\nimport { allocBufferUnsafe } from 'extract-base-iterator';\n\n/**\n * Input stream wrapper for lzma-purejs\n * Wraps a Buffer region as a readable stream interface\n */\nexport function createInputStream(buffer: Buffer, offset: number, length: number) {\n let pos = 0;\n const end = Math.min(offset + length, buffer.length);\n const start = offset;\n\n return {\n readByte: (): number => {\n if (start + pos >= end) return -1;\n return buffer[start + pos++];\n },\n read: (buf: number[], bufOffset: number, len: number): number => {\n let bytesRead = 0;\n while (bytesRead < len && start + pos < end) {\n buf[bufOffset + bytesRead] = buffer[start + pos];\n pos++;\n bytesRead++;\n }\n return bytesRead === 0 ? -1 : bytesRead;\n },\n };\n}\n\n/**\n * Output stream wrapper for lzma-purejs\n * Collects output bytes into Buffer chunks\n * Uses typed arrays for memory efficiency (1 byte per element instead of 8)\n *\n * Memory optimization: If expectedSize is provided, pre-allocates a single buffer\n * to avoid double-memory during Buffer.concat.\n *\n * @param expectedSize - Optional expected output size for pre-allocation\n */\nexport function createOutputStream(expectedSize?: number) {\n // Pre-allocation mode: single buffer, no concat needed\n // Includes bounds checking for safety on older Node.js versions\n if (expectedSize && expectedSize > 0) {\n const buffer = allocBufferUnsafe(expectedSize);\n let bufPos = 0;\n const bufLen = buffer.length;\n\n return {\n writeByte: (b: number): void => {\n if (bufPos < bufLen) {\n buffer[bufPos++] = b;\n }\n // Silently ignore overflow (should not happen with correct size)\n },\n write: (buf: number[], bufOffset: number, len: number): number => {\n for (let i = 0; i < len && bufPos < bufLen; i++) {\n buffer[bufPos++] = buf[bufOffset + i];\n }\n return len;\n },\n flush: (): void => {\n // No-op for pre-allocated buffer\n },\n toBuffer: (): Buffer => {\n // Return only the used portion\n return bufPos < buffer.length ? buffer.slice(0, bufPos) : buffer;\n },\n };\n }\n\n // Chunked mode: accumulate in 64KB chunks (fallback for unknown size)\n const chunks: Buffer[] = [];\n const CHUNK_SIZE = 65536; // 64KB chunks for better memory efficiency\n let currentChunk: Buffer = allocBufferUnsafe(CHUNK_SIZE);\n let pos = 0;\n\n return {\n writeByte: (b: number): void => {\n currentChunk[pos++] = b;\n if (pos >= CHUNK_SIZE) {\n chunks.push(currentChunk);\n currentChunk = allocBufferUnsafe(CHUNK_SIZE);\n pos = 0;\n }\n },\n write: function (buf: number[], bufOffset: number, len: number): number {\n for (let i = 0; i < len; i++) {\n this.writeByte(buf[bufOffset + i]);\n }\n return len;\n },\n flush: (): void => {\n if (pos > 0) {\n // Only keep the used portion of the current chunk\n chunks.push(currentChunk.slice(0, pos));\n currentChunk = allocBufferUnsafe(CHUNK_SIZE);\n pos = 0;\n }\n },\n toBuffer: function (): Buffer {\n this.flush();\n // Optimization: if single chunk, return it directly\n if (chunks.length === 1) {\n return chunks[0];\n }\n return Buffer.concat(chunks);\n },\n };\n}\n"],"names":["createInputStream","createOutputStream","buffer","offset","length","pos","end","Math","min","start","readByte","read","buf","bufOffset","len","bytesRead","expectedSize","allocBufferUnsafe","bufPos","bufLen","writeByte","b","write","i","flush","toBuffer","slice","chunks","CHUNK_SIZE","currentChunk","push","Buffer","concat"],"mappings":"AAAA,yDAAyD;AACzD,sEAAsE;;;;;;;;;;;;QAQtDA;eAAAA;;QAgCAC;eAAAA;;;mCAtCkB;AAM3B,SAASD,kBAAkBE,MAAc,EAAEC,MAAc,EAAEC,MAAc;IAC9E,IAAIC,MAAM;IACV,IAAMC,MAAMC,KAAKC,GAAG,CAACL,SAASC,QAAQF,OAAOE,MAAM;IACnD,IAAMK,QAAQN;IAEd,OAAO;QACLO,UAAU;YACR,IAAID,QAAQJ,OAAOC,KAAK,OAAO,CAAC;YAChC,OAAOJ,MAAM,CAACO,QAAQJ,MAAM;QAC9B;QACAM,MAAM,SAACC,KAAeC,WAAmBC;YACvC,IAAIC,YAAY;YAChB,MAAOA,YAAYD,OAAOL,QAAQJ,MAAMC,IAAK;gBAC3CM,GAAG,CAACC,YAAYE,UAAU,GAAGb,MAAM,CAACO,QAAQJ,IAAI;gBAChDA;gBACAU;YACF;YACA,OAAOA,cAAc,IAAI,CAAC,IAAIA;QAChC;IACF;AACF;AAYO,SAASd,mBAAmBe,YAAqB;IACtD,uDAAuD;IACvD,gEAAgE;IAChE,IAAIA,gBAAgBA,eAAe,GAAG;QACpC,IAAMd,SAASe,IAAAA,sCAAiB,EAACD;QACjC,IAAIE,SAAS;QACb,IAAMC,SAASjB,OAAOE,MAAM;QAE5B,OAAO;YACLgB,WAAW,SAACC;gBACV,IAAIH,SAASC,QAAQ;oBACnBjB,MAAM,CAACgB,SAAS,GAAGG;gBACrB;YACA,iEAAiE;YACnE;YACAC,OAAO,SAACV,KAAeC,WAAmBC;gBACxC,IAAK,IAAIS,IAAI,GAAGA,IAAIT,OAAOI,SAASC,QAAQI,IAAK;oBAC/CrB,MAAM,CAACgB,SAAS,GAAGN,GAAG,CAACC,YAAYU,EAAE;gBACvC;gBACA,OAAOT;YACT;YACAU,OAAO;YACL,iCAAiC;YACnC;YACAC,UAAU;gBACR,+BAA+B;gBAC/B,OAAOP,SAAShB,OAAOE,MAAM,GAAGF,OAAOwB,KAAK,CAAC,GAAGR,UAAUhB;YAC5D;QACF;IACF;IAEA,sEAAsE;IACtE,IAAMyB,SAAmB,EAAE;IAC3B,IAAMC,aAAa,OAAO,2CAA2C;IACrE,IAAIC,eAAuBZ,IAAAA,sCAAiB,EAACW;IAC7C,IAAIvB,MAAM;IAEV,OAAO;QACLe,WAAW,SAACC;YACVQ,YAAY,CAACxB,MAAM,GAAGgB;YACtB,IAAIhB,OAAOuB,YAAY;gBACrBD,OAAOG,IAAI,CAACD;gBACZA,eAAeZ,IAAAA,sCAAiB,EAACW;gBACjCvB,MAAM;YACR;QACF;QACAiB,OAAO,SAAPA,MAAiBV,GAAa,EAAEC,SAAiB,EAAEC,GAAW;YAC5D,IAAK,IAAIS,IAAI,GAAGA,IAAIT,KAAKS,IAAK;gBAC5B,IAAI,CAACH,SAAS,CAACR,GAAG,CAACC,YAAYU,EAAE;YACnC;YACA,OAAOT;QACT;QACAU,OAAO;YACL,IAAInB,MAAM,GAAG;gBACX,kDAAkD;gBAClDsB,OAAOG,IAAI,CAACD,aAAaH,KAAK,CAAC,GAAGrB;gBAClCwB,eAAeZ,IAAAA,sCAAiB,EAACW;gBACjCvB,MAAM;YACR;QACF;QACAoB,UAAU,SAAVA;YACE,IAAI,CAACD,KAAK;YACV,oDAAoD;YACpD,IAAIG,OAAOvB,MAAM,KAAK,GAAG;gBACvB,OAAOuB,MAAM,CAAC,EAAE;YAClB;YACA,OAAOI,OAAOC,MAAM,CAACL;QACvB;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/sevenz/codecs/streams.ts"],"sourcesContent":["// Shared stream wrappers for lzma-purejs codec interface\n// These adapters convert between Buffer/lzma-purejs stream interfaces\n\nimport { allocBufferUnsafe } from 'extract-base-iterator';\n\n/**\n * Input stream wrapper for lzma-purejs\n * Wraps a Buffer region as a readable stream interface\n */\nexport function createInputStream(buffer: Buffer, offset: number, length: number) {\n let pos = 0;\n const end = Math.min(offset + length, buffer.length);\n const start = offset;\n\n return {\n readByte: (): number => {\n if (start + pos >= end) return -1;\n return buffer[start + pos++];\n },\n read: (buf: number[], bufOffset: number, len: number): number => {\n let bytesRead = 0;\n while (bytesRead < len && start + pos < end) {\n buf[bufOffset + bytesRead] = buffer[start + pos];\n pos++;\n bytesRead++;\n }\n return bytesRead === 0 ? -1 : bytesRead;\n },\n };\n}\n\n/**\n * Output stream wrapper for lzma-purejs\n * Collects output bytes into Buffer chunks\n * Uses typed arrays for memory efficiency (1 byte per element instead of 8)\n *\n * Memory optimization: If expectedSize is provided, pre-allocates a single buffer\n * to avoid double-memory during Buffer.concat.\n *\n * @param expectedSize - Optional expected output size for pre-allocation\n */\nexport function createOutputStream(expectedSize?: number) {\n // Pre-allocation mode: single buffer, no concat needed\n // Includes bounds checking for safety on older Node.js versions\n if (expectedSize && expectedSize > 0) {\n const buffer = allocBufferUnsafe(expectedSize);\n let bufPos = 0;\n const bufLen = buffer.length;\n\n return {\n writeByte: (b: number): void => {\n if (bufPos < bufLen) {\n buffer[bufPos++] = b;\n }\n // Silently ignore overflow (should not happen with correct size)\n },\n write: (buf: number[], bufOffset: number, len: number): number => {\n for (let i = 0; i < len && bufPos < bufLen; i++) {\n buffer[bufPos++] = buf[bufOffset + i];\n }\n return len;\n },\n flush: (): void => {\n // No-op for pre-allocated buffer\n },\n toBuffer: (): Buffer => {\n // Return only the used portion\n return bufPos < buffer.length ? buffer.slice(0, bufPos) : buffer;\n },\n };\n }\n\n // Chunked mode: accumulate in 64KB chunks (fallback for unknown size)\n const chunks: Buffer[] = [];\n const CHUNK_SIZE = 65536; // 64KB chunks for better memory efficiency\n let currentChunk: Buffer = allocBufferUnsafe(CHUNK_SIZE);\n let pos = 0;\n\n return {\n writeByte: (b: number): void => {\n currentChunk[pos++] = b;\n if (pos >= CHUNK_SIZE) {\n chunks.push(currentChunk);\n currentChunk = allocBufferUnsafe(CHUNK_SIZE);\n pos = 0;\n }\n },\n write: function (buf: number[], bufOffset: number, len: number): number {\n for (let i = 0; i < len; i++) {\n this.writeByte(buf[bufOffset + i]);\n }\n return len;\n },\n flush: (): void => {\n if (pos > 0) {\n // Only keep the used portion of the current chunk\n chunks.push(currentChunk.slice(0, pos));\n currentChunk = allocBufferUnsafe(CHUNK_SIZE);\n pos = 0;\n }\n },\n toBuffer: function (): Buffer {\n this.flush();\n // Optimization: if single chunk, return it directly\n if (chunks.length === 1) {\n return chunks[0];\n }\n return Buffer.concat(chunks);\n },\n };\n}\n"],"names":["createInputStream","createOutputStream","buffer","offset","length","pos","end","Math","min","start","readByte","read","buf","bufOffset","len","bytesRead","expectedSize","allocBufferUnsafe","bufPos","bufLen","writeByte","b","write","i","flush","toBuffer","slice","chunks","CHUNK_SIZE","currentChunk","push","Buffer","concat"],"mappings":"AAAA,yDAAyD;AACzD,sEAAsE;;;;;;;;;;;;QAQtDA;eAAAA;;QAgCAC;eAAAA;;;mCAtCkB;AAM3B,SAASD,kBAAkBE,MAAc,EAAEC,MAAc,EAAEC,MAAc;IAC9E,IAAIC,MAAM;IACV,IAAMC,MAAMC,KAAKC,GAAG,CAACL,SAASC,QAAQF,OAAOE,MAAM;IACnD,IAAMK,QAAQN;IAEd,OAAO;QACLO,UAAU;YACR,IAAID,QAAQJ,OAAOC,KAAK,OAAO,CAAC;YAChC,OAAOJ,MAAM,CAACO,QAAQJ,MAAM;QAC9B;QACAM,MAAM,SAACC,KAAeC,WAAmBC;YACvC,IAAIC,YAAY;YAChB,MAAOA,YAAYD,OAAOL,QAAQJ,MAAMC,IAAK;gBAC3CM,GAAG,CAACC,YAAYE,UAAU,GAAGb,MAAM,CAACO,QAAQJ,IAAI;gBAChDA;gBACAU;YACF;YACA,OAAOA,cAAc,IAAI,CAAC,IAAIA;QAChC;IACF;AACF;AAYO,SAASd,mBAAmBe,YAAqB;IACtD,uDAAuD;IACvD,gEAAgE;IAChE,IAAIA,gBAAgBA,eAAe,GAAG;QACpC,IAAMd,SAASe,IAAAA,sCAAiB,EAACD;QACjC,IAAIE,SAAS;QACb,IAAMC,SAASjB,OAAOE,MAAM;QAE5B,OAAO;YACLgB,WAAW,SAACC;gBACV,IAAIH,SAASC,QAAQ;oBACnBjB,MAAM,CAACgB,SAAS,GAAGG;gBACrB;YACA,iEAAiE;YACnE;YACAC,OAAO,SAACV,KAAeC,WAAmBC;gBACxC,IAAK,IAAIS,IAAI,GAAGA,IAAIT,OAAOI,SAASC,QAAQI,IAAK;oBAC/CrB,MAAM,CAACgB,SAAS,GAAGN,GAAG,CAACC,YAAYU,EAAE;gBACvC;gBACA,OAAOT;YACT;YACAU,OAAO;YACL,iCAAiC;YACnC;YACAC,UAAU;gBACR,+BAA+B;gBAC/B,OAAOP,SAAShB,OAAOE,MAAM,GAAGF,OAAOwB,KAAK,CAAC,GAAGR,UAAUhB;YAC5D;QACF;IACF;IAEA,sEAAsE;IACtE,IAAMyB,SAAmB,EAAE;IAC3B,IAAMC,aAAa,OAAO,2CAA2C;IACrE,IAAIC,eAAuBZ,IAAAA,sCAAiB,EAACW;IAC7C,IAAIvB,MAAM;IAEV,OAAO;QACLe,WAAW,SAACC;YACVQ,YAAY,CAACxB,MAAM,GAAGgB;YACtB,IAAIhB,OAAOuB,YAAY;gBACrBD,OAAOG,IAAI,CAACD;gBACZA,eAAeZ,IAAAA,sCAAiB,EAACW;gBACjCvB,MAAM;YACR;QACF;QACAiB,OAAO,SAAPA,MAAiBV,GAAa,EAAEC,SAAiB,EAAEC,GAAW;YAC5D,IAAK,IAAIS,IAAI,GAAGA,IAAIT,KAAKS,IAAK;gBAC5B,IAAI,CAACH,SAAS,CAACR,GAAG,CAACC,YAAYU,EAAE;YACnC;YACA,OAAOT;QACT;QACAU,OAAO;YACL,IAAInB,MAAM,GAAG;gBACX,kDAAkD;gBAClDsB,OAAOG,IAAI,CAACD,aAAaH,KAAK,CAAC,GAAGrB;gBAClCwB,eAAeZ,IAAAA,sCAAiB,EAACW;gBACjCvB,MAAM;YACR;QACF;QACAoB,UAAU,SAAVA;YACE,IAAI,CAACD,KAAK;YACV,oDAAoD;YACpD,IAAIG,OAAOvB,MAAM,KAAK,GAAG;gBACvB,OAAOuB,MAAM,CAAC,EAAE;YAClB;YACA,OAAOI,OAAOC,MAAM,CAACL;QACvB;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/constants.ts"],"sourcesContent":["// 7z format constants\n// Reference: https://py7zr.readthedocs.io/en/latest/archive_format.html\n\n// 7z signature: '7z' + magic bytes\nexport const SEVENZ_MAGIC = [0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c];\n\n// Header sizes\nexport const SIGNATURE_HEADER_SIZE = 32;\nexport const START_HEADER_SIZE = 20; // Part of signature header after magic + version\n\n// Property IDs for encoded header\nexport const PropertyId = {\n kEnd: 0x00,\n kHeader: 0x01,\n kArchiveProperties: 0x02,\n kAdditionalStreamsInfo: 0x03,\n kMainStreamsInfo: 0x04,\n kFilesInfo: 0x05,\n kPackInfo: 0x06,\n kUnpackInfo: 0x07,\n kSubStreamsInfo: 0x08,\n kSize: 0x09,\n kCRC: 0x0a,\n kFolder: 0x0b,\n kCodersUnpackSize: 0x0c,\n kNumUnpackStream: 0x0d,\n kEmptyStream: 0x0e,\n kEmptyFile: 0x0f,\n kAnti: 0x10,\n kName: 0x11,\n kCTime: 0x12,\n kATime: 0x13,\n kMTime: 0x14,\n kWinAttributes: 0x15,\n kComment: 0x16,\n kEncodedHeader: 0x17,\n kStartPos: 0x18,\n kDummy: 0x19,\n};\n\n// Codec IDs\n// 7z uses variable-length codec IDs\n// Reference: 7za i output shows hex codec IDs (e.g., 3030501 = ARM)\nexport const CodecId = {\n COPY: [0x00],\n DELTA: [0x03],\n LZMA: [0x03, 0x01, 0x01],\n LZMA2: [0x21],\n BCJ_X86: [0x03, 0x03, 0x01, 0x03],\n BCJ_PPC: [0x03, 0x03, 0x02, 0x05],\n BCJ_IA64: [0x03, 0x03, 0x04, 0x01],\n BCJ_ARM: [0x03, 0x03, 0x05, 0x01],\n BCJ_ARMT: [0x03, 0x03, 0x07, 0x01],\n BCJ_SPARC: [0x03, 0x03, 0x08, 0x05],\n BCJ_ARM64: [0x03, 0x03, 0x0a, 0x01],\n BCJ2: [0x03, 0x03, 0x01, 0x1b],\n PPMD: [0x03, 0x04, 0x01],\n DEFLATE: [0x04, 0x01, 0x08],\n BZIP2: [0x04, 0x02, 0x02],\n AES: [0x06, 0xf1, 0x07, 0x01],\n};\n\n// File attribute flags (Windows style, stored in FilesInfo)\nexport const FileAttribute = {\n READONLY: 0x01,\n HIDDEN: 0x02,\n SYSTEM: 0x04,\n DIRECTORY: 0x10,\n ARCHIVE: 0x20,\n DEVICE: 0x40,\n NORMAL: 0x80,\n TEMPORARY: 0x100,\n SPARSE_FILE: 0x200,\n REPARSE_POINT: 0x400,\n COMPRESSED: 0x800,\n OFFLINE: 0x1000,\n NOT_CONTENT_INDEXED: 0x2000,\n ENCRYPTED: 0x4000,\n UNIX_EXTENSION: 0x8000,\n};\n\n// Unix permission modes (decimal values for Node 0.8 compatibility)\nexport const UnixMode = {\n DIR: 16384, // 0o40000 - directory\n FILE: 32768, // 0o100000 - regular file\n SYMLINK: 40960, // 0o120000 - symbolic link\n RWXRWXRWX: 511, // 0o777\n RWXRXRX: 493, // 0o755\n RWRR: 420, // 0o644\n DEFAULT_DIR: 493, // 0o755 - rwxr-xr-x\n DEFAULT_FILE: 420, // 0o644 - rw-r--r--\n};\n\n// Error codes\nexport const ErrorCode = {\n INVALID_SIGNATURE: 'INVALID_SIGNATURE',\n CRC_MISMATCH: 'CRC_MISMATCH',\n UNSUPPORTED_CODEC: 'UNSUPPORTED_CODEC',\n UNSUPPORTED_VERSION: 'UNSUPPORTED_VERSION',\n UNSUPPORTED_FEATURE: 'UNSUPPORTED_FEATURE',\n TRUNCATED_ARCHIVE: 'TRUNCATED_ARCHIVE',\n CORRUPT_ARCHIVE: 'CORRUPT_ARCHIVE',\n CORRUPT_HEADER: 'CORRUPT_HEADER',\n ENCRYPTED_ARCHIVE: 'ENCRYPTED_ARCHIVE',\n COMPRESSED_HEADER: 'COMPRESSED_HEADER',\n DECOMPRESSION_FAILED: 'DECOMPRESSION_FAILED',\n};\n\n// Error with code property\nexport interface CodedError extends Error {\n code: string;\n}\n\n/**\n * Create an error with a code property\n */\nexport function createCodedError(message: string, code: string): CodedError {\n const err = new Error(message) as CodedError;\n err.code = code;\n return err;\n}\n"],"names":["CodecId","ErrorCode","FileAttribute","PropertyId","SEVENZ_MAGIC","SIGNATURE_HEADER_SIZE","START_HEADER_SIZE","UnixMode","createCodedError","kEnd","kHeader","kArchiveProperties","kAdditionalStreamsInfo","kMainStreamsInfo","kFilesInfo","kPackInfo","kUnpackInfo","kSubStreamsInfo","kSize","kCRC","kFolder","kCodersUnpackSize","kNumUnpackStream","kEmptyStream","kEmptyFile","kAnti","kName","kCTime","kATime","kMTime","kWinAttributes","kComment","kEncodedHeader","kStartPos","kDummy","COPY","DELTA","LZMA","LZMA2","BCJ_X86","BCJ_PPC","BCJ_IA64","BCJ_ARM","BCJ_ARMT","BCJ_SPARC","BCJ_ARM64","BCJ2","PPMD","DEFLATE","BZIP2","AES","READONLY","HIDDEN","SYSTEM","DIRECTORY","ARCHIVE","DEVICE","NORMAL","TEMPORARY","SPARSE_FILE","REPARSE_POINT","COMPRESSED","OFFLINE","NOT_CONTENT_INDEXED","ENCRYPTED","UNIX_EXTENSION","DIR","FILE","SYMLINK","RWXRWXRWX","RWXRXRX","RWRR","DEFAULT_DIR","DEFAULT_FILE","INVALID_SIGNATURE","CRC_MISMATCH","UNSUPPORTED_CODEC","UNSUPPORTED_VERSION","UNSUPPORTED_FEATURE","TRUNCATED_ARCHIVE","CORRUPT_ARCHIVE","CORRUPT_HEADER","ENCRYPTED_ARCHIVE","COMPRESSED_HEADER","DECOMPRESSION_FAILED","message","code","err","Error"],"mappings":"AAAA,sBAAsB;AACtB,wEAAwE;AAExE,mCAAmC;;;;;;;;;;;;QAwCtBA;eAAAA;;QAmDAC;eAAAA;;QA/BAC;eAAAA;;QApDAC;eAAAA;;QAPAC;eAAAA;;QAGAC;eAAAA;;QACAC;eAAAA;;QA0EAC;eAAAA;;QAkCGC;eAAAA;;;AAhHT,IAAMJ,eAAe;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;CAAK;AAGzD,IAAMC,wBAAwB;AAC9B,IAAMC,oBAAoB,IAAI,iDAAiD;AAG/E,IAAMH,aAAa;IACxBM,MAAM;IACNC,SAAS;IACTC,oBAAoB;IACpBC,wBAAwB;IACxBC,kBAAkB;IAClBC,YAAY;IACZC,WAAW;IACXC,aAAa;IACbC,iBAAiB;IACjBC,OAAO;IACPC,MAAM;IACNC,SAAS;IACTC,mBAAmB;IACnBC,kBAAkB;IAClBC,cAAc;IACdC,YAAY;IACZC,OAAO;IACPC,OAAO;IACPC,QAAQ;IACRC,QAAQ;IACRC,QAAQ;IACRC,gBAAgB;IAChBC,UAAU;IACVC,gBAAgB;IAChBC,WAAW;IACXC,QAAQ;AACV;AAKO,IAAMlC,UAAU;IACrBmC,MAAM;QAAC;KAAK;IACZC,OAAO;QAAC;KAAK;IACbC,MAAM;QAAC;QAAM;QAAM;KAAK;IACxBC,OAAO;QAAC;KAAK;IACbC,SAAS;QAAC;QAAM;QAAM;QAAM;KAAK;IACjCC,SAAS;QAAC;QAAM;QAAM;QAAM;KAAK;IACjCC,UAAU;QAAC;QAAM;QAAM;QAAM;KAAK;IAClCC,SAAS;QAAC;QAAM;QAAM;QAAM;KAAK;IACjCC,UAAU;QAAC;QAAM;QAAM;QAAM;KAAK;IAClCC,WAAW;QAAC;QAAM;QAAM;QAAM;KAAK;IACnCC,WAAW;QAAC;QAAM;QAAM;QAAM;KAAK;IACnCC,MAAM;QAAC;QAAM;QAAM;QAAM;KAAK;IAC9BC,MAAM;QAAC;QAAM;QAAM;KAAK;IACxBC,SAAS;QAAC;QAAM;QAAM;KAAK;IAC3BC,OAAO;QAAC;QAAM;QAAM;KAAK;IACzBC,KAAK;QAAC;QAAM;QAAM;QAAM;KAAK;AAC/B;AAGO,IAAMhD,gBAAgB;IAC3BiD,UAAU;IACVC,QAAQ;IACRC,QAAQ;IACRC,WAAW;IACXC,SAAS;IACTC,QAAQ;IACRC,QAAQ;IACRC,WAAW;IACXC,aAAa;IACbC,eAAe;IACfC,YAAY;IACZC,SAAS;IACTC,qBAAqB;IACrBC,WAAW;IACXC,gBAAgB;AAClB;AAGO,IAAM1D,WAAW;IACtB2D,KAAK;IACLC,MAAM;IACNC,SAAS;IACTC,WAAW;IACXC,SAAS;IACTC,MAAM;IACNC,aAAa;IACbC,cAAc;AAChB;AAGO,IAAMxE,YAAY;IACvByE,mBAAmB;IACnBC,cAAc;IACdC,mBAAmB;IACnBC,qBAAqB;IACrBC,qBAAqB;IACrBC,mBAAmB;IACnBC,iBAAiB;IACjBC,gBAAgB;IAChBC,mBAAmB;IACnBC,mBAAmB;IACnBC,sBAAsB;AACxB;AAUO,SAAS5E,iBAAiB6E,OAAe,EAAEC,IAAY;IAC5D,IAAMC,MAAM,IAAIC,MAAMH;IACtBE,IAAID,IAAI,GAAGA;IACX,OAAOC;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/sevenz/constants.ts"],"sourcesContent":["// 7z format constants\n// Reference: https://py7zr.readthedocs.io/en/latest/archive_format.html\n\n// 7z signature: '7z' + magic bytes\nexport const SEVENZ_MAGIC = [0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c];\n\n// Header sizes\nexport const SIGNATURE_HEADER_SIZE = 32;\nexport const START_HEADER_SIZE = 20; // Part of signature header after magic + version\n\n// Property IDs for encoded header\nexport const PropertyId = {\n kEnd: 0x00,\n kHeader: 0x01,\n kArchiveProperties: 0x02,\n kAdditionalStreamsInfo: 0x03,\n kMainStreamsInfo: 0x04,\n kFilesInfo: 0x05,\n kPackInfo: 0x06,\n kUnpackInfo: 0x07,\n kSubStreamsInfo: 0x08,\n kSize: 0x09,\n kCRC: 0x0a,\n kFolder: 0x0b,\n kCodersUnpackSize: 0x0c,\n kNumUnpackStream: 0x0d,\n kEmptyStream: 0x0e,\n kEmptyFile: 0x0f,\n kAnti: 0x10,\n kName: 0x11,\n kCTime: 0x12,\n kATime: 0x13,\n kMTime: 0x14,\n kWinAttributes: 0x15,\n kComment: 0x16,\n kEncodedHeader: 0x17,\n kStartPos: 0x18,\n kDummy: 0x19,\n};\n\n// Codec IDs\n// 7z uses variable-length codec IDs\n// Reference: 7za i output shows hex codec IDs (e.g., 3030501 = ARM)\nexport const CodecId = {\n COPY: [0x00],\n DELTA: [0x03],\n LZMA: [0x03, 0x01, 0x01],\n LZMA2: [0x21],\n BCJ_X86: [0x03, 0x03, 0x01, 0x03],\n BCJ_PPC: [0x03, 0x03, 0x02, 0x05],\n BCJ_IA64: [0x03, 0x03, 0x04, 0x01],\n BCJ_ARM: [0x03, 0x03, 0x05, 0x01],\n BCJ_ARMT: [0x03, 0x03, 0x07, 0x01],\n BCJ_SPARC: [0x03, 0x03, 0x08, 0x05],\n BCJ_ARM64: [0x03, 0x03, 0x0a, 0x01],\n BCJ2: [0x03, 0x03, 0x01, 0x1b],\n PPMD: [0x03, 0x04, 0x01],\n DEFLATE: [0x04, 0x01, 0x08],\n BZIP2: [0x04, 0x02, 0x02],\n AES: [0x06, 0xf1, 0x07, 0x01],\n};\n\n// File attribute flags (Windows style, stored in FilesInfo)\nexport const FileAttribute = {\n READONLY: 0x01,\n HIDDEN: 0x02,\n SYSTEM: 0x04,\n DIRECTORY: 0x10,\n ARCHIVE: 0x20,\n DEVICE: 0x40,\n NORMAL: 0x80,\n TEMPORARY: 0x100,\n SPARSE_FILE: 0x200,\n REPARSE_POINT: 0x400,\n COMPRESSED: 0x800,\n OFFLINE: 0x1000,\n NOT_CONTENT_INDEXED: 0x2000,\n ENCRYPTED: 0x4000,\n UNIX_EXTENSION: 0x8000,\n};\n\n// Unix permission modes (decimal values for Node 0.8 compatibility)\nexport const UnixMode = {\n DIR: 16384, // 0o40000 - directory\n FILE: 32768, // 0o100000 - regular file\n SYMLINK: 40960, // 0o120000 - symbolic link\n RWXRWXRWX: 511, // 0o777\n RWXRXRX: 493, // 0o755\n RWRR: 420, // 0o644\n DEFAULT_DIR: 493, // 0o755 - rwxr-xr-x\n DEFAULT_FILE: 420, // 0o644 - rw-r--r--\n};\n\n// Error codes\nexport const ErrorCode = {\n INVALID_SIGNATURE: 'INVALID_SIGNATURE',\n CRC_MISMATCH: 'CRC_MISMATCH',\n UNSUPPORTED_CODEC: 'UNSUPPORTED_CODEC',\n UNSUPPORTED_VERSION: 'UNSUPPORTED_VERSION',\n UNSUPPORTED_FEATURE: 'UNSUPPORTED_FEATURE',\n TRUNCATED_ARCHIVE: 'TRUNCATED_ARCHIVE',\n CORRUPT_ARCHIVE: 'CORRUPT_ARCHIVE',\n CORRUPT_HEADER: 'CORRUPT_HEADER',\n ENCRYPTED_ARCHIVE: 'ENCRYPTED_ARCHIVE',\n COMPRESSED_HEADER: 'COMPRESSED_HEADER',\n DECOMPRESSION_FAILED: 'DECOMPRESSION_FAILED',\n};\n\n// Error with code property\nexport interface CodedError extends Error {\n code: string;\n}\n\n/**\n * Create an error with a code property\n */\nexport function createCodedError(message: string, code: string): CodedError {\n const err = new Error(message) as CodedError;\n err.code = code;\n return err;\n}\n"],"names":["CodecId","ErrorCode","FileAttribute","PropertyId","SEVENZ_MAGIC","SIGNATURE_HEADER_SIZE","START_HEADER_SIZE","UnixMode","createCodedError","kEnd","kHeader","kArchiveProperties","kAdditionalStreamsInfo","kMainStreamsInfo","kFilesInfo","kPackInfo","kUnpackInfo","kSubStreamsInfo","kSize","kCRC","kFolder","kCodersUnpackSize","kNumUnpackStream","kEmptyStream","kEmptyFile","kAnti","kName","kCTime","kATime","kMTime","kWinAttributes","kComment","kEncodedHeader","kStartPos","kDummy","COPY","DELTA","LZMA","LZMA2","BCJ_X86","BCJ_PPC","BCJ_IA64","BCJ_ARM","BCJ_ARMT","BCJ_SPARC","BCJ_ARM64","BCJ2","PPMD","DEFLATE","BZIP2","AES","READONLY","HIDDEN","SYSTEM","DIRECTORY","ARCHIVE","DEVICE","NORMAL","TEMPORARY","SPARSE_FILE","REPARSE_POINT","COMPRESSED","OFFLINE","NOT_CONTENT_INDEXED","ENCRYPTED","UNIX_EXTENSION","DIR","FILE","SYMLINK","RWXRWXRWX","RWXRXRX","RWRR","DEFAULT_DIR","DEFAULT_FILE","INVALID_SIGNATURE","CRC_MISMATCH","UNSUPPORTED_CODEC","UNSUPPORTED_VERSION","UNSUPPORTED_FEATURE","TRUNCATED_ARCHIVE","CORRUPT_ARCHIVE","CORRUPT_HEADER","ENCRYPTED_ARCHIVE","COMPRESSED_HEADER","DECOMPRESSION_FAILED","message","code","err","Error"],"mappings":"AAAA,sBAAsB;AACtB,wEAAwE;AAExE,mCAAmC;;;;;;;;;;;;QAwCtBA;eAAAA;;QAmDAC;eAAAA;;QA/BAC;eAAAA;;QApDAC;eAAAA;;QAPAC;eAAAA;;QAGAC;eAAAA;;QACAC;eAAAA;;QA0EAC;eAAAA;;QAkCGC;eAAAA;;;AAhHT,IAAMJ,eAAe;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;CAAK;AAGzD,IAAMC,wBAAwB;AAC9B,IAAMC,oBAAoB,IAAI,iDAAiD;AAG/E,IAAMH,aAAa;IACxBM,MAAM;IACNC,SAAS;IACTC,oBAAoB;IACpBC,wBAAwB;IACxBC,kBAAkB;IAClBC,YAAY;IACZC,WAAW;IACXC,aAAa;IACbC,iBAAiB;IACjBC,OAAO;IACPC,MAAM;IACNC,SAAS;IACTC,mBAAmB;IACnBC,kBAAkB;IAClBC,cAAc;IACdC,YAAY;IACZC,OAAO;IACPC,OAAO;IACPC,QAAQ;IACRC,QAAQ;IACRC,QAAQ;IACRC,gBAAgB;IAChBC,UAAU;IACVC,gBAAgB;IAChBC,WAAW;IACXC,QAAQ;AACV;AAKO,IAAMlC,UAAU;IACrBmC,MAAM;QAAC;KAAK;IACZC,OAAO;QAAC;KAAK;IACbC,MAAM;QAAC;QAAM;QAAM;KAAK;IACxBC,OAAO;QAAC;KAAK;IACbC,SAAS;QAAC;QAAM;QAAM;QAAM;KAAK;IACjCC,SAAS;QAAC;QAAM;QAAM;QAAM;KAAK;IACjCC,UAAU;QAAC;QAAM;QAAM;QAAM;KAAK;IAClCC,SAAS;QAAC;QAAM;QAAM;QAAM;KAAK;IACjCC,UAAU;QAAC;QAAM;QAAM;QAAM;KAAK;IAClCC,WAAW;QAAC;QAAM;QAAM;QAAM;KAAK;IACnCC,WAAW;QAAC;QAAM;QAAM;QAAM;KAAK;IACnCC,MAAM;QAAC;QAAM;QAAM;QAAM;KAAK;IAC9BC,MAAM;QAAC;QAAM;QAAM;KAAK;IACxBC,SAAS;QAAC;QAAM;QAAM;KAAK;IAC3BC,OAAO;QAAC;QAAM;QAAM;KAAK;IACzBC,KAAK;QAAC;QAAM;QAAM;QAAM;KAAK;AAC/B;AAGO,IAAMhD,gBAAgB;IAC3BiD,UAAU;IACVC,QAAQ;IACRC,QAAQ;IACRC,WAAW;IACXC,SAAS;IACTC,QAAQ;IACRC,QAAQ;IACRC,WAAW;IACXC,aAAa;IACbC,eAAe;IACfC,YAAY;IACZC,SAAS;IACTC,qBAAqB;IACrBC,WAAW;IACXC,gBAAgB;AAClB;AAGO,IAAM1D,WAAW;IACtB2D,KAAK;IACLC,MAAM;IACNC,SAAS;IACTC,WAAW;IACXC,SAAS;IACTC,MAAM;IACNC,aAAa;IACbC,cAAc;AAChB;AAGO,IAAMxE,YAAY;IACvByE,mBAAmB;IACnBC,cAAc;IACdC,mBAAmB;IACnBC,qBAAqB;IACrBC,qBAAqB;IACrBC,mBAAmB;IACnBC,iBAAiB;IACjBC,gBAAgB;IAChBC,mBAAmB;IACnBC,mBAAmB;IACnBC,sBAAsB;AACxB;AAUO,SAAS5E,iBAAiB6E,OAAe,EAAEC,IAAY;IAC5D,IAAMC,MAAM,IAAIC,MAAMH;IACtBE,IAAID,IAAI,GAAGA;IACX,OAAOC;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/headers.ts"],"sourcesContent":["// 7z header parsing\n// Reference: https://py7zr.readthedocs.io/en/latest/archive_format.html\n\nimport { bufferEquals, readUInt64LE, verifyCrc32Region } from 'extract-base-iterator';\nimport { createCodedError, ErrorCode, PropertyId, SEVENZ_MAGIC } from './constants.ts';\nimport { readDefinedVector, readNumber } from './NumberCodec.ts';\n\n// Type definitions\nexport interface SignatureHeader {\n majorVersion: number;\n minorVersion: number;\n startHeaderCRC: number;\n nextHeaderOffset: number;\n nextHeaderSize: number;\n nextHeaderCRC: number;\n}\n\nexport interface Coder {\n id: number[]; // Codec ID bytes\n numInStreams: number; // Number of input streams\n numOutStreams: number; // Number of output streams\n properties?: Buffer; // Optional codec properties\n}\n\nexport interface Folder {\n coders: Coder[];\n bindPairs: { inIndex: number; outIndex: number }[];\n packedStreams: number[]; // Indices of packed streams\n unpackSizes: number[]; // Unpack size for each coder output\n unpackCRC?: number; // CRC of final unpacked data\n hasCRC: boolean;\n}\n\nexport interface StreamsInfo {\n packPos: number; // Position of packed data (relative to end of signature header)\n packSizes: number[]; // Sizes of packed streams\n packCRCs?: number[]; // Optional CRCs for packed streams\n folders: Folder[]; // Decompression info\n numUnpackStreamsPerFolder: number[]; // Number of files in each folder (for solid archives)\n unpackSizes: number[]; // Size of each unpacked file\n unpackCRCs?: number[]; // Optional CRCs for unpacked files\n}\n\nexport interface FileInfo {\n name: string;\n size: number;\n isDirectory: boolean;\n isAntiFile: boolean; // \"Anti\" items mark files to delete in delta archives\n hasStream: boolean; // False for empty files/directories\n crc?: number;\n ctime?: Date;\n atime?: Date;\n mtime?: Date;\n attributes?: number;\n}\n\nexport interface ArchiveHeader {\n signature: SignatureHeader;\n streamsInfo?: StreamsInfo;\n filesInfo: FileInfo[];\n}\n\n/**\n * Parse the signature header (first 32 bytes)\n */\nexport function parseSignatureHeader(buf: Buffer): SignatureHeader {\n // Verify magic bytes\n if (!bufferEquals(buf, 0, SEVENZ_MAGIC)) {\n throw createCodedError('Not a valid 7z archive', ErrorCode.INVALID_SIGNATURE);\n }\n\n // Read version\n const majorVersion = buf[6];\n const minorVersion = buf[7];\n\n // Version check - we support 0.x (current is 0.4)\n if (majorVersion > 0) {\n throw createCodedError(`Unsupported 7z version: ${majorVersion}.${minorVersion}`, ErrorCode.UNSUPPORTED_VERSION);\n }\n\n // Read start header CRC (CRC of the next 20 bytes)\n const startHeaderCRC = buf.readUInt32LE(8);\n\n // Verify start header CRC\n if (!verifyCrc32Region(buf, 12, 20, startHeaderCRC)) {\n throw createCodedError('Start header CRC mismatch', ErrorCode.CRC_MISMATCH);\n }\n\n // Read next header location\n const nextHeaderOffset = readUInt64LE(buf, 12);\n const nextHeaderSize = readUInt64LE(buf, 20);\n const nextHeaderCRC = buf.readUInt32LE(28);\n\n return {\n majorVersion: majorVersion,\n minorVersion: minorVersion,\n startHeaderCRC: startHeaderCRC,\n nextHeaderOffset: nextHeaderOffset,\n nextHeaderSize: nextHeaderSize,\n nextHeaderCRC: nextHeaderCRC,\n };\n}\n\n/**\n * Parse the encoded header (metadata block at end of archive)\n */\nexport function parseEncodedHeader(buf: Buffer, expectedCRC: number): { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } {\n // Verify CRC\n if (!verifyCrc32Region(buf, 0, buf.length, expectedCRC)) {\n throw createCodedError('Encoded header CRC mismatch', ErrorCode.CRC_MISMATCH);\n }\n\n let offset = 0;\n\n // Read property ID\n const propertyId = buf[offset++];\n\n // Handle kEncodedHeader - means the header itself is compressed\n if (propertyId === PropertyId.kEncodedHeader) {\n // Return indicator that we need to decompress\n throw createCodedError('Compressed header - needs decompression first', ErrorCode.COMPRESSED_HEADER);\n }\n\n // Should be kHeader\n if (propertyId !== PropertyId.kHeader) {\n throw createCodedError(`Expected kHeader, got ${propertyId}`, ErrorCode.CORRUPT_HEADER);\n }\n\n // Parse header contents (after kHeader byte)\n return parseHeaderContent(buf, offset);\n}\n\n/**\n * Parse header content (after kHeader byte has been read)\n * Used by parseEncodedHeader and for decompressed headers\n */\nexport function parseHeaderContent(buf: Buffer, offset: number): { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } {\n const result: { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } = {\n filesInfo: [],\n };\n\n // Parse header contents\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kArchiveProperties:\n offset = skipArchiveProperties(buf, offset);\n break;\n case PropertyId.kAdditionalStreamsInfo:\n // Additional streams - skip for now\n offset = skipStreamsInfo(buf, offset);\n break;\n case PropertyId.kMainStreamsInfo: {\n const streamsResult = parseStreamsInfo(buf, offset);\n result.streamsInfo = streamsResult.info;\n offset = streamsResult.offset;\n break;\n }\n case PropertyId.kFilesInfo: {\n const filesResult = parseFilesInfo(buf, offset);\n result.filesInfo = filesResult.files;\n offset = filesResult.offset;\n break;\n }\n default:\n throw createCodedError(`Unknown property ID in header: ${propertyId}`, ErrorCode.CORRUPT_HEADER);\n }\n }\n\n return result;\n}\n\n/**\n * Parse StreamsInfo block\n */\nfunction parseStreamsInfo(buf: Buffer, offset: number): { info: StreamsInfo; offset: number } {\n const info: StreamsInfo = {\n packPos: 0,\n packSizes: [],\n folders: [],\n numUnpackStreamsPerFolder: [],\n unpackSizes: [],\n };\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kPackInfo: {\n const packResult = parsePackInfo(buf, offset);\n info.packPos = packResult.packPos;\n info.packSizes = packResult.packSizes;\n info.packCRCs = packResult.packCRCs;\n offset = packResult.offset;\n break;\n }\n case PropertyId.kUnpackInfo: {\n const unpackResult = parseUnpackInfo(buf, offset);\n info.folders = unpackResult.folders;\n offset = unpackResult.offset;\n break;\n }\n case PropertyId.kSubStreamsInfo: {\n const subResult = parseSubStreamsInfo(buf, offset, info.folders);\n info.numUnpackStreamsPerFolder = subResult.numUnpackStreamsPerFolder;\n info.unpackSizes = subResult.unpackSizes;\n info.unpackCRCs = subResult.unpackCRCs;\n offset = subResult.offset;\n break;\n }\n default:\n throw createCodedError(`Unknown property ID in StreamsInfo: ${propertyId}`, ErrorCode.CORRUPT_HEADER);\n }\n }\n\n // If no SubStreamsInfo, each folder produces one file\n if (info.unpackSizes.length === 0 && info.folders.length > 0) {\n for (let i = 0; i < info.folders.length; i++) {\n const folder = info.folders[i];\n // Get the final unpack size (last coder's output)\n const finalSize = folder.unpackSizes[folder.unpackSizes.length - 1];\n info.unpackSizes.push(finalSize);\n info.numUnpackStreamsPerFolder.push(1);\n }\n }\n\n return { info: info, offset: offset };\n}\n\n/**\n * Parse PackInfo block\n */\nfunction parsePackInfo(buf: Buffer, offset: number): { packPos: number; packSizes: number[]; packCRCs?: number[]; offset: number } {\n // Pack position\n const packPosResult = readNumber(buf, offset);\n const packPos = packPosResult.value;\n offset += packPosResult.bytesRead;\n\n // Number of pack streams\n const numPackResult = readNumber(buf, offset);\n const numPackStreams = numPackResult.value;\n offset += numPackResult.bytesRead;\n\n const packSizes: number[] = [];\n let packCRCs: number[] | undefined;\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kSize) {\n for (let i = 0; i < numPackStreams; i++) {\n const sizeResult = readNumber(buf, offset);\n packSizes.push(sizeResult.value);\n offset += sizeResult.bytesRead;\n }\n } else if (propertyId === PropertyId.kCRC) {\n packCRCs = [];\n const definedResult = readDefinedVector(buf, offset, numPackStreams);\n offset += definedResult.bytesRead;\n for (let j = 0; j < numPackStreams; j++) {\n if (definedResult.defined[j]) {\n packCRCs.push(buf.readUInt32LE(offset));\n offset += 4;\n } else {\n packCRCs.push(0);\n }\n }\n }\n }\n\n return { packPos: packPos, packSizes: packSizes, packCRCs: packCRCs, offset: offset };\n}\n\n/**\n * Parse UnpackInfo block\n */\nfunction parseUnpackInfo(buf: Buffer, offset: number): { folders: Folder[]; offset: number } {\n const folders: Folder[] = [];\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kFolder) {\n // Number of folders\n const numFoldersResult = readNumber(buf, offset);\n const numFolders = numFoldersResult.value;\n offset += numFoldersResult.bytesRead;\n\n // External flag\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External folders not supported', ErrorCode.CORRUPT_HEADER);\n }\n\n // Parse each folder\n for (let i = 0; i < numFolders; i++) {\n const folderResult = parseFolder(buf, offset);\n folders.push(folderResult.folder);\n offset = folderResult.offset;\n }\n } else if (propertyId === PropertyId.kCodersUnpackSize) {\n // Unpack sizes for each coder output\n for (let j = 0; j < folders.length; j++) {\n const folder = folders[j];\n folder.unpackSizes = [];\n // One unpack size per coder output stream\n let numOutputs = 0;\n for (let k = 0; k < folder.coders.length; k++) {\n numOutputs += folder.coders[k].numOutStreams;\n }\n for (let l = 0; l < numOutputs; l++) {\n const sizeResult = readNumber(buf, offset);\n folder.unpackSizes.push(sizeResult.value);\n offset += sizeResult.bytesRead;\n }\n }\n } else if (propertyId === PropertyId.kCRC) {\n // CRCs for folders\n const definedResult = readDefinedVector(buf, offset, folders.length);\n offset += definedResult.bytesRead;\n for (let m = 0; m < folders.length; m++) {\n folders[m].hasCRC = definedResult.defined[m];\n if (definedResult.defined[m]) {\n folders[m].unpackCRC = buf.readUInt32LE(offset);\n offset += 4;\n }\n }\n }\n }\n\n return { folders: folders, offset: offset };\n}\n\n/**\n * Parse a single Folder structure\n */\nfunction parseFolder(buf: Buffer, offset: number): { folder: Folder; offset: number } {\n // Number of coders\n const numCodersResult = readNumber(buf, offset);\n const numCoders = numCodersResult.value;\n offset += numCodersResult.bytesRead;\n\n const coders: Coder[] = [];\n let numInStreamsTotal = 0;\n let numOutStreamsTotal = 0;\n\n for (let i = 0; i < numCoders; i++) {\n const flags = buf[offset++];\n const idSize = flags & 0x0f;\n const isComplex = (flags & 0x10) !== 0;\n const hasAttributes = (flags & 0x20) !== 0;\n\n // Read codec ID\n const id: number[] = [];\n for (let j = 0; j < idSize; j++) {\n id.push(buf[offset++]);\n }\n\n let numInStreams = 1;\n let numOutStreams = 1;\n\n if (isComplex) {\n const inResult = readNumber(buf, offset);\n numInStreams = inResult.value;\n offset += inResult.bytesRead;\n\n const outResult = readNumber(buf, offset);\n numOutStreams = outResult.value;\n offset += outResult.bytesRead;\n }\n\n let properties: Buffer | undefined;\n if (hasAttributes) {\n const propsLenResult = readNumber(buf, offset);\n offset += propsLenResult.bytesRead;\n properties = buf.slice(offset, offset + propsLenResult.value);\n offset += propsLenResult.value;\n }\n\n coders.push({\n id: id,\n numInStreams: numInStreams,\n numOutStreams: numOutStreams,\n properties: properties,\n });\n\n numInStreamsTotal += numInStreams;\n numOutStreamsTotal += numOutStreams;\n }\n\n // Bind pairs\n const numBindPairs = numOutStreamsTotal - 1;\n const bindPairs: { inIndex: number; outIndex: number }[] = [];\n\n for (let k = 0; k < numBindPairs; k++) {\n const inIndexResult = readNumber(buf, offset);\n offset += inIndexResult.bytesRead;\n\n const outIndexResult = readNumber(buf, offset);\n offset += outIndexResult.bytesRead;\n\n bindPairs.push({\n inIndex: inIndexResult.value,\n outIndex: outIndexResult.value,\n });\n }\n\n // Packed stream indices\n const numPackedStreams = numInStreamsTotal - numBindPairs;\n const packedStreams: number[] = [];\n\n if (numPackedStreams === 1) {\n // Find the unbound input stream\n for (let m = 0; m < numInStreamsTotal; m++) {\n let isBound = false;\n for (let n = 0; n < bindPairs.length; n++) {\n if (bindPairs[n].inIndex === m) {\n isBound = true;\n break;\n }\n }\n if (!isBound) {\n packedStreams.push(m);\n break;\n }\n }\n } else {\n for (let p = 0; p < numPackedStreams; p++) {\n const indexResult = readNumber(buf, offset);\n packedStreams.push(indexResult.value);\n offset += indexResult.bytesRead;\n }\n }\n\n return {\n folder: {\n coders: coders,\n bindPairs: bindPairs,\n packedStreams: packedStreams,\n unpackSizes: [],\n hasCRC: false,\n },\n offset: offset,\n };\n}\n\n/**\n * Parse SubStreamsInfo block\n */\nfunction parseSubStreamsInfo(buf: Buffer, offset: number, folders: Folder[]): { numUnpackStreamsPerFolder: number[]; unpackSizes: number[]; unpackCRCs?: number[]; offset: number } {\n const numUnpackStreamsPerFolder: number[] = [];\n const unpackSizes: number[] = [];\n let unpackCRCs: number[] | undefined;\n\n // Default: 1 file per folder\n for (let i = 0; i < folders.length; i++) {\n numUnpackStreamsPerFolder.push(1);\n }\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kNumUnpackStream) {\n for (let j = 0; j < folders.length; j++) {\n const numResult = readNumber(buf, offset);\n numUnpackStreamsPerFolder[j] = numResult.value;\n offset += numResult.bytesRead;\n }\n } else if (propertyId === PropertyId.kSize) {\n for (let k = 0; k < folders.length; k++) {\n const numStreams = numUnpackStreamsPerFolder[k];\n if (numStreams === 0) continue;\n\n // Read sizes for all but last stream in folder (last is calculated)\n let remaining = folders[k].unpackSizes[folders[k].unpackSizes.length - 1];\n for (let l = 0; l < numStreams - 1; l++) {\n const sizeResult = readNumber(buf, offset);\n unpackSizes.push(sizeResult.value);\n remaining -= sizeResult.value;\n offset += sizeResult.bytesRead;\n }\n // Last stream size is remainder\n unpackSizes.push(remaining);\n }\n } else if (propertyId === PropertyId.kCRC) {\n // Count files that need CRC\n let numFiles = 0;\n for (let m = 0; m < folders.length; m++) {\n const numStreamsInFolder = numUnpackStreamsPerFolder[m];\n // Only count if folder doesn't have CRC or has multiple streams\n if (!folders[m].hasCRC || numStreamsInFolder > 1) {\n numFiles += numStreamsInFolder;\n }\n }\n\n unpackCRCs = [];\n const definedResult = readDefinedVector(buf, offset, numFiles);\n offset += definedResult.bytesRead;\n for (let n = 0; n < numFiles; n++) {\n if (definedResult.defined[n]) {\n unpackCRCs.push(buf.readUInt32LE(offset));\n offset += 4;\n } else {\n unpackCRCs.push(0);\n }\n }\n }\n }\n\n // If no sizes specified, use folder unpack sizes\n if (unpackSizes.length === 0) {\n for (let p = 0; p < folders.length; p++) {\n const folder = folders[p];\n unpackSizes.push(folder.unpackSizes[folder.unpackSizes.length - 1]);\n }\n }\n\n return { numUnpackStreamsPerFolder: numUnpackStreamsPerFolder, unpackSizes: unpackSizes, unpackCRCs: unpackCRCs, offset: offset };\n}\n\n/**\n * Parse FilesInfo block\n */\nfunction parseFilesInfo(buf: Buffer, offset: number): { files: FileInfo[]; offset: number } {\n // Number of files\n const numFilesResult = readNumber(buf, offset);\n const numFiles = numFilesResult.value;\n offset += numFilesResult.bytesRead;\n\n // Initialize files array\n const files: FileInfo[] = [];\n for (let i = 0; i < numFiles; i++) {\n files.push({\n name: '',\n size: 0,\n isDirectory: false,\n isAntiFile: false,\n hasStream: true,\n });\n }\n\n let emptyStreamFlags: boolean[] = [];\n let emptyFileFlags: boolean[] = [];\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n // Read property size\n const propSizeResult = readNumber(buf, offset);\n const propSize = propSizeResult.value;\n offset += propSizeResult.bytesRead;\n\n const propEnd = offset + propSize;\n\n switch (propertyId) {\n case PropertyId.kEmptyStream:\n emptyStreamFlags = readBoolVector(buf, offset, numFiles);\n // Mark files that don't have streams\n for (let j = 0; j < numFiles; j++) {\n files[j].hasStream = !emptyStreamFlags[j];\n }\n break;\n\n case PropertyId.kEmptyFile: {\n let numEmptyStreams = 0;\n for (let k = 0; k < emptyStreamFlags.length; k++) {\n if (emptyStreamFlags[k]) numEmptyStreams++;\n }\n emptyFileFlags = readBoolVector(buf, offset, numEmptyStreams);\n break;\n }\n\n case PropertyId.kAnti: {\n let numAnti = 0;\n for (let l = 0; l < emptyStreamFlags.length; l++) {\n if (emptyStreamFlags[l]) numAnti++;\n }\n const antiFlags = readBoolVector(buf, offset, numAnti);\n let antiIdx = 0;\n for (let m = 0; m < numFiles; m++) {\n if (emptyStreamFlags[m]) {\n files[m].isAntiFile = antiFlags[antiIdx++];\n }\n }\n break;\n }\n\n case PropertyId.kName:\n offset = parseFileNames(buf, offset, files);\n break;\n\n case PropertyId.kCTime:\n offset = parseFileTimes(buf, offset, files, 'ctime');\n break;\n\n case PropertyId.kATime:\n offset = parseFileTimes(buf, offset, files, 'atime');\n break;\n\n case PropertyId.kMTime:\n offset = parseFileTimes(buf, offset, files, 'mtime');\n break;\n\n case PropertyId.kWinAttributes:\n offset = parseAttributes(buf, offset, files);\n break;\n\n case PropertyId.kDummy:\n // Skip dummy bytes\n break;\n\n default:\n // Skip unknown properties\n break;\n }\n\n offset = propEnd;\n }\n\n // Determine directories from empty stream + not empty file\n let emptyIdx = 0;\n for (let n = 0; n < numFiles; n++) {\n if (emptyStreamFlags[n]) {\n // Empty stream - could be directory or empty file\n if (emptyIdx < emptyFileFlags.length && emptyFileFlags[emptyIdx]) {\n files[n].isDirectory = false; // Empty file\n } else {\n files[n].isDirectory = true; // Directory\n }\n emptyIdx++;\n }\n }\n\n return { files: files, offset: offset };\n}\n\n/**\n * Read a boolean vector (bit-packed)\n */\nfunction readBoolVector(buf: Buffer, offset: number, count: number): boolean[] {\n const result: boolean[] = [];\n let byteIdx = 0;\n let bitMask = 0x80;\n\n for (let i = 0; i < count; i++) {\n result.push((buf[offset + byteIdx] & bitMask) !== 0);\n bitMask = bitMask >>> 1;\n if (bitMask === 0) {\n bitMask = 0x80;\n byteIdx++;\n }\n }\n\n return result;\n}\n\n/**\n * Parse file names (UTF-16LE encoded)\n */\nfunction parseFileNames(buf: Buffer, offset: number, files: FileInfo[]): number {\n // External flag\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External file names not supported', ErrorCode.CORRUPT_HEADER);\n }\n\n // Names are UTF-16LE, null-terminated\n for (let i = 0; i < files.length; i++) {\n const nameChars: number[] = [];\n while (offset < buf.length) {\n const charCode = buf.readUInt16LE(offset);\n offset += 2;\n if (charCode === 0) break;\n nameChars.push(charCode);\n }\n files[i].name = String.fromCharCode.apply(null, nameChars);\n }\n\n return offset;\n}\n\n/**\n * Parse file times (Windows FILETIME format)\n */\nfunction parseFileTimes(buf: Buffer, offset: number, files: FileInfo[], timeType: 'ctime' | 'atime' | 'mtime'): number {\n // Read defined vector (allDefined byte + optional bitmask)\n const definedResult = readDefinedVector(buf, offset, files.length);\n offset += definedResult.bytesRead;\n\n // External flag - 0x00 means data follows inline, non-zero means external stream\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External file times not supported', ErrorCode.UNSUPPORTED_FEATURE);\n }\n\n // Read times\n for (let i = 0; i < files.length; i++) {\n if (definedResult.defined[i]) {\n const filetime = readUInt64LE(buf, offset);\n offset += 8;\n // Convert FILETIME (100ns since 1601) to JavaScript Date\n // FILETIME epoch: 1601-01-01\n // JS Date epoch: 1970-01-01\n // Difference: 11644473600 seconds\n const ms = filetime / 10000 - 11644473600000;\n files[i][timeType] = new Date(ms);\n }\n }\n\n return offset;\n}\n\n/**\n * Parse Windows file attributes\n */\nfunction parseAttributes(buf: Buffer, offset: number, files: FileInfo[]): number {\n // Read defined vector (allDefined byte + optional bitmask)\n const definedResult = readDefinedVector(buf, offset, files.length);\n offset += definedResult.bytesRead;\n\n // External flag - 0x00 means data follows inline, non-zero means external stream\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External file attributes not supported', ErrorCode.UNSUPPORTED_FEATURE);\n }\n\n // Read attributes\n for (let i = 0; i < files.length; i++) {\n if (definedResult.defined[i]) {\n files[i].attributes = buf.readUInt32LE(offset);\n offset += 4;\n }\n }\n\n return offset;\n}\n\n/**\n * Skip archive properties block\n */\nfunction skipArchiveProperties(buf: Buffer, offset: number): number {\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n const sizeResult = readNumber(buf, offset);\n offset += sizeResult.bytesRead + sizeResult.value;\n }\n return offset;\n}\n\n/**\n * Skip streams info block (for additional streams)\n */\nfunction skipStreamsInfo(buf: Buffer, offset: number): number {\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n // For nested structures, recurse\n if (propertyId === PropertyId.kPackInfo || propertyId === PropertyId.kUnpackInfo || propertyId === PropertyId.kSubStreamsInfo) {\n offset = skipStreamsInfo(buf, offset);\n }\n }\n return offset;\n}\n"],"names":["parseEncodedHeader","parseHeaderContent","parseSignatureHeader","buf","bufferEquals","SEVENZ_MAGIC","createCodedError","ErrorCode","INVALID_SIGNATURE","majorVersion","minorVersion","UNSUPPORTED_VERSION","startHeaderCRC","readUInt32LE","verifyCrc32Region","CRC_MISMATCH","nextHeaderOffset","readUInt64LE","nextHeaderSize","nextHeaderCRC","expectedCRC","length","offset","propertyId","PropertyId","kEncodedHeader","COMPRESSED_HEADER","kHeader","CORRUPT_HEADER","result","filesInfo","kEnd","kArchiveProperties","skipArchiveProperties","kAdditionalStreamsInfo","skipStreamsInfo","kMainStreamsInfo","streamsResult","parseStreamsInfo","streamsInfo","info","kFilesInfo","filesResult","parseFilesInfo","files","packPos","packSizes","folders","numUnpackStreamsPerFolder","unpackSizes","kPackInfo","packResult","parsePackInfo","packCRCs","kUnpackInfo","unpackResult","parseUnpackInfo","kSubStreamsInfo","subResult","parseSubStreamsInfo","unpackCRCs","i","folder","finalSize","push","packPosResult","readNumber","value","bytesRead","numPackResult","numPackStreams","kSize","sizeResult","kCRC","definedResult","readDefinedVector","j","defined","kFolder","numFoldersResult","numFolders","external","folderResult","parseFolder","kCodersUnpackSize","numOutputs","k","coders","numOutStreams","l","m","hasCRC","unpackCRC","numCodersResult","numCoders","numInStreamsTotal","numOutStreamsTotal","flags","idSize","isComplex","hasAttributes","id","numInStreams","inResult","outResult","properties","propsLenResult","slice","numBindPairs","bindPairs","inIndexResult","outIndexResult","inIndex","outIndex","numPackedStreams","packedStreams","isBound","n","p","indexResult","kNumUnpackStream","numResult","numStreams","remaining","numFiles","numStreamsInFolder","numFilesResult","name","size","isDirectory","isAntiFile","hasStream","emptyStreamFlags","emptyFileFlags","propSizeResult","propSize","propEnd","kEmptyStream","readBoolVector","kEmptyFile","numEmptyStreams","kAnti","numAnti","antiFlags","antiIdx","kName","parseFileNames","kCTime","parseFileTimes","kATime","kMTime","kWinAttributes","parseAttributes","kDummy","emptyIdx","count","byteIdx","bitMask","nameChars","charCode","readUInt16LE","String","fromCharCode","apply","timeType","UNSUPPORTED_FEATURE","filetime","ms","Date","attributes"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/sevenz/headers.ts"],"sourcesContent":["// 7z header parsing\n// Reference: https://py7zr.readthedocs.io/en/latest/archive_format.html\n\nimport { bufferEquals, readUInt64LE, verifyCrc32Region } from 'extract-base-iterator';\nimport { createCodedError, ErrorCode, PropertyId, SEVENZ_MAGIC } from './constants.ts';\nimport { readDefinedVector, readNumber } from './NumberCodec.ts';\n\n// Type definitions\nexport interface SignatureHeader {\n majorVersion: number;\n minorVersion: number;\n startHeaderCRC: number;\n nextHeaderOffset: number;\n nextHeaderSize: number;\n nextHeaderCRC: number;\n}\n\nexport interface Coder {\n id: number[]; // Codec ID bytes\n numInStreams: number; // Number of input streams\n numOutStreams: number; // Number of output streams\n properties?: Buffer; // Optional codec properties\n}\n\nexport interface Folder {\n coders: Coder[];\n bindPairs: { inIndex: number; outIndex: number }[];\n packedStreams: number[]; // Indices of packed streams\n unpackSizes: number[]; // Unpack size for each coder output\n unpackCRC?: number; // CRC of final unpacked data\n hasCRC: boolean;\n}\n\nexport interface StreamsInfo {\n packPos: number; // Position of packed data (relative to end of signature header)\n packSizes: number[]; // Sizes of packed streams\n packCRCs?: number[]; // Optional CRCs for packed streams\n folders: Folder[]; // Decompression info\n numUnpackStreamsPerFolder: number[]; // Number of files in each folder (for solid archives)\n unpackSizes: number[]; // Size of each unpacked file\n unpackCRCs?: number[]; // Optional CRCs for unpacked files\n}\n\nexport interface FileInfo {\n name: string;\n size: number;\n isDirectory: boolean;\n isAntiFile: boolean; // \"Anti\" items mark files to delete in delta archives\n hasStream: boolean; // False for empty files/directories\n crc?: number;\n ctime?: Date;\n atime?: Date;\n mtime?: Date;\n attributes?: number;\n}\n\nexport interface ArchiveHeader {\n signature: SignatureHeader;\n streamsInfo?: StreamsInfo;\n filesInfo: FileInfo[];\n}\n\n/**\n * Parse the signature header (first 32 bytes)\n */\nexport function parseSignatureHeader(buf: Buffer): SignatureHeader {\n // Verify magic bytes\n if (!bufferEquals(buf, 0, SEVENZ_MAGIC)) {\n throw createCodedError('Not a valid 7z archive', ErrorCode.INVALID_SIGNATURE);\n }\n\n // Read version\n const majorVersion = buf[6];\n const minorVersion = buf[7];\n\n // Version check - we support 0.x (current is 0.4)\n if (majorVersion > 0) {\n throw createCodedError(`Unsupported 7z version: ${majorVersion}.${minorVersion}`, ErrorCode.UNSUPPORTED_VERSION);\n }\n\n // Read start header CRC (CRC of the next 20 bytes)\n const startHeaderCRC = buf.readUInt32LE(8);\n\n // Verify start header CRC\n if (!verifyCrc32Region(buf, 12, 20, startHeaderCRC)) {\n throw createCodedError('Start header CRC mismatch', ErrorCode.CRC_MISMATCH);\n }\n\n // Read next header location\n const nextHeaderOffset = readUInt64LE(buf, 12);\n const nextHeaderSize = readUInt64LE(buf, 20);\n const nextHeaderCRC = buf.readUInt32LE(28);\n\n return {\n majorVersion: majorVersion,\n minorVersion: minorVersion,\n startHeaderCRC: startHeaderCRC,\n nextHeaderOffset: nextHeaderOffset,\n nextHeaderSize: nextHeaderSize,\n nextHeaderCRC: nextHeaderCRC,\n };\n}\n\n/**\n * Parse the encoded header (metadata block at end of archive)\n */\nexport function parseEncodedHeader(buf: Buffer, expectedCRC: number): { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } {\n // Verify CRC\n if (!verifyCrc32Region(buf, 0, buf.length, expectedCRC)) {\n throw createCodedError('Encoded header CRC mismatch', ErrorCode.CRC_MISMATCH);\n }\n\n let offset = 0;\n\n // Read property ID\n const propertyId = buf[offset++];\n\n // Handle kEncodedHeader - means the header itself is compressed\n if (propertyId === PropertyId.kEncodedHeader) {\n // Return indicator that we need to decompress\n throw createCodedError('Compressed header - needs decompression first', ErrorCode.COMPRESSED_HEADER);\n }\n\n // Should be kHeader\n if (propertyId !== PropertyId.kHeader) {\n throw createCodedError(`Expected kHeader, got ${propertyId}`, ErrorCode.CORRUPT_HEADER);\n }\n\n // Parse header contents (after kHeader byte)\n return parseHeaderContent(buf, offset);\n}\n\n/**\n * Parse header content (after kHeader byte has been read)\n * Used by parseEncodedHeader and for decompressed headers\n */\nexport function parseHeaderContent(buf: Buffer, offset: number): { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } {\n const result: { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } = {\n filesInfo: [],\n };\n\n // Parse header contents\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kArchiveProperties:\n offset = skipArchiveProperties(buf, offset);\n break;\n case PropertyId.kAdditionalStreamsInfo:\n // Additional streams - skip for now\n offset = skipStreamsInfo(buf, offset);\n break;\n case PropertyId.kMainStreamsInfo: {\n const streamsResult = parseStreamsInfo(buf, offset);\n result.streamsInfo = streamsResult.info;\n offset = streamsResult.offset;\n break;\n }\n case PropertyId.kFilesInfo: {\n const filesResult = parseFilesInfo(buf, offset);\n result.filesInfo = filesResult.files;\n offset = filesResult.offset;\n break;\n }\n default:\n throw createCodedError(`Unknown property ID in header: ${propertyId}`, ErrorCode.CORRUPT_HEADER);\n }\n }\n\n return result;\n}\n\n/**\n * Parse StreamsInfo block\n */\nfunction parseStreamsInfo(buf: Buffer, offset: number): { info: StreamsInfo; offset: number } {\n const info: StreamsInfo = {\n packPos: 0,\n packSizes: [],\n folders: [],\n numUnpackStreamsPerFolder: [],\n unpackSizes: [],\n };\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kPackInfo: {\n const packResult = parsePackInfo(buf, offset);\n info.packPos = packResult.packPos;\n info.packSizes = packResult.packSizes;\n info.packCRCs = packResult.packCRCs;\n offset = packResult.offset;\n break;\n }\n case PropertyId.kUnpackInfo: {\n const unpackResult = parseUnpackInfo(buf, offset);\n info.folders = unpackResult.folders;\n offset = unpackResult.offset;\n break;\n }\n case PropertyId.kSubStreamsInfo: {\n const subResult = parseSubStreamsInfo(buf, offset, info.folders);\n info.numUnpackStreamsPerFolder = subResult.numUnpackStreamsPerFolder;\n info.unpackSizes = subResult.unpackSizes;\n info.unpackCRCs = subResult.unpackCRCs;\n offset = subResult.offset;\n break;\n }\n default:\n throw createCodedError(`Unknown property ID in StreamsInfo: ${propertyId}`, ErrorCode.CORRUPT_HEADER);\n }\n }\n\n // If no SubStreamsInfo, each folder produces one file\n if (info.unpackSizes.length === 0 && info.folders.length > 0) {\n for (let i = 0; i < info.folders.length; i++) {\n const folder = info.folders[i];\n // Get the final unpack size (last coder's output)\n const finalSize = folder.unpackSizes[folder.unpackSizes.length - 1];\n info.unpackSizes.push(finalSize);\n info.numUnpackStreamsPerFolder.push(1);\n }\n }\n\n return { info: info, offset: offset };\n}\n\n/**\n * Parse PackInfo block\n */\nfunction parsePackInfo(buf: Buffer, offset: number): { packPos: number; packSizes: number[]; packCRCs?: number[]; offset: number } {\n // Pack position\n const packPosResult = readNumber(buf, offset);\n const packPos = packPosResult.value;\n offset += packPosResult.bytesRead;\n\n // Number of pack streams\n const numPackResult = readNumber(buf, offset);\n const numPackStreams = numPackResult.value;\n offset += numPackResult.bytesRead;\n\n const packSizes: number[] = [];\n let packCRCs: number[] | undefined;\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kSize) {\n for (let i = 0; i < numPackStreams; i++) {\n const sizeResult = readNumber(buf, offset);\n packSizes.push(sizeResult.value);\n offset += sizeResult.bytesRead;\n }\n } else if (propertyId === PropertyId.kCRC) {\n packCRCs = [];\n const definedResult = readDefinedVector(buf, offset, numPackStreams);\n offset += definedResult.bytesRead;\n for (let j = 0; j < numPackStreams; j++) {\n if (definedResult.defined[j]) {\n packCRCs.push(buf.readUInt32LE(offset));\n offset += 4;\n } else {\n packCRCs.push(0);\n }\n }\n }\n }\n\n return { packPos: packPos, packSizes: packSizes, packCRCs: packCRCs, offset: offset };\n}\n\n/**\n * Parse UnpackInfo block\n */\nfunction parseUnpackInfo(buf: Buffer, offset: number): { folders: Folder[]; offset: number } {\n const folders: Folder[] = [];\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kFolder) {\n // Number of folders\n const numFoldersResult = readNumber(buf, offset);\n const numFolders = numFoldersResult.value;\n offset += numFoldersResult.bytesRead;\n\n // External flag\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External folders not supported', ErrorCode.CORRUPT_HEADER);\n }\n\n // Parse each folder\n for (let i = 0; i < numFolders; i++) {\n const folderResult = parseFolder(buf, offset);\n folders.push(folderResult.folder);\n offset = folderResult.offset;\n }\n } else if (propertyId === PropertyId.kCodersUnpackSize) {\n // Unpack sizes for each coder output\n for (let j = 0; j < folders.length; j++) {\n const folder = folders[j];\n folder.unpackSizes = [];\n // One unpack size per coder output stream\n let numOutputs = 0;\n for (let k = 0; k < folder.coders.length; k++) {\n numOutputs += folder.coders[k].numOutStreams;\n }\n for (let l = 0; l < numOutputs; l++) {\n const sizeResult = readNumber(buf, offset);\n folder.unpackSizes.push(sizeResult.value);\n offset += sizeResult.bytesRead;\n }\n }\n } else if (propertyId === PropertyId.kCRC) {\n // CRCs for folders\n const definedResult = readDefinedVector(buf, offset, folders.length);\n offset += definedResult.bytesRead;\n for (let m = 0; m < folders.length; m++) {\n folders[m].hasCRC = definedResult.defined[m];\n if (definedResult.defined[m]) {\n folders[m].unpackCRC = buf.readUInt32LE(offset);\n offset += 4;\n }\n }\n }\n }\n\n return { folders: folders, offset: offset };\n}\n\n/**\n * Parse a single Folder structure\n */\nfunction parseFolder(buf: Buffer, offset: number): { folder: Folder; offset: number } {\n // Number of coders\n const numCodersResult = readNumber(buf, offset);\n const numCoders = numCodersResult.value;\n offset += numCodersResult.bytesRead;\n\n const coders: Coder[] = [];\n let numInStreamsTotal = 0;\n let numOutStreamsTotal = 0;\n\n for (let i = 0; i < numCoders; i++) {\n const flags = buf[offset++];\n const idSize = flags & 0x0f;\n const isComplex = (flags & 0x10) !== 0;\n const hasAttributes = (flags & 0x20) !== 0;\n\n // Read codec ID\n const id: number[] = [];\n for (let j = 0; j < idSize; j++) {\n id.push(buf[offset++]);\n }\n\n let numInStreams = 1;\n let numOutStreams = 1;\n\n if (isComplex) {\n const inResult = readNumber(buf, offset);\n numInStreams = inResult.value;\n offset += inResult.bytesRead;\n\n const outResult = readNumber(buf, offset);\n numOutStreams = outResult.value;\n offset += outResult.bytesRead;\n }\n\n let properties: Buffer | undefined;\n if (hasAttributes) {\n const propsLenResult = readNumber(buf, offset);\n offset += propsLenResult.bytesRead;\n properties = buf.slice(offset, offset + propsLenResult.value);\n offset += propsLenResult.value;\n }\n\n coders.push({\n id: id,\n numInStreams: numInStreams,\n numOutStreams: numOutStreams,\n properties: properties,\n });\n\n numInStreamsTotal += numInStreams;\n numOutStreamsTotal += numOutStreams;\n }\n\n // Bind pairs\n const numBindPairs = numOutStreamsTotal - 1;\n const bindPairs: { inIndex: number; outIndex: number }[] = [];\n\n for (let k = 0; k < numBindPairs; k++) {\n const inIndexResult = readNumber(buf, offset);\n offset += inIndexResult.bytesRead;\n\n const outIndexResult = readNumber(buf, offset);\n offset += outIndexResult.bytesRead;\n\n bindPairs.push({\n inIndex: inIndexResult.value,\n outIndex: outIndexResult.value,\n });\n }\n\n // Packed stream indices\n const numPackedStreams = numInStreamsTotal - numBindPairs;\n const packedStreams: number[] = [];\n\n if (numPackedStreams === 1) {\n // Find the unbound input stream\n for (let m = 0; m < numInStreamsTotal; m++) {\n let isBound = false;\n for (let n = 0; n < bindPairs.length; n++) {\n if (bindPairs[n].inIndex === m) {\n isBound = true;\n break;\n }\n }\n if (!isBound) {\n packedStreams.push(m);\n break;\n }\n }\n } else {\n for (let p = 0; p < numPackedStreams; p++) {\n const indexResult = readNumber(buf, offset);\n packedStreams.push(indexResult.value);\n offset += indexResult.bytesRead;\n }\n }\n\n return {\n folder: {\n coders: coders,\n bindPairs: bindPairs,\n packedStreams: packedStreams,\n unpackSizes: [],\n hasCRC: false,\n },\n offset: offset,\n };\n}\n\n/**\n * Parse SubStreamsInfo block\n */\nfunction parseSubStreamsInfo(buf: Buffer, offset: number, folders: Folder[]): { numUnpackStreamsPerFolder: number[]; unpackSizes: number[]; unpackCRCs?: number[]; offset: number } {\n const numUnpackStreamsPerFolder: number[] = [];\n const unpackSizes: number[] = [];\n let unpackCRCs: number[] | undefined;\n\n // Default: 1 file per folder\n for (let i = 0; i < folders.length; i++) {\n numUnpackStreamsPerFolder.push(1);\n }\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kNumUnpackStream) {\n for (let j = 0; j < folders.length; j++) {\n const numResult = readNumber(buf, offset);\n numUnpackStreamsPerFolder[j] = numResult.value;\n offset += numResult.bytesRead;\n }\n } else if (propertyId === PropertyId.kSize) {\n for (let k = 0; k < folders.length; k++) {\n const numStreams = numUnpackStreamsPerFolder[k];\n if (numStreams === 0) continue;\n\n // Read sizes for all but last stream in folder (last is calculated)\n let remaining = folders[k].unpackSizes[folders[k].unpackSizes.length - 1];\n for (let l = 0; l < numStreams - 1; l++) {\n const sizeResult = readNumber(buf, offset);\n unpackSizes.push(sizeResult.value);\n remaining -= sizeResult.value;\n offset += sizeResult.bytesRead;\n }\n // Last stream size is remainder\n unpackSizes.push(remaining);\n }\n } else if (propertyId === PropertyId.kCRC) {\n // Count files that need CRC\n let numFiles = 0;\n for (let m = 0; m < folders.length; m++) {\n const numStreamsInFolder = numUnpackStreamsPerFolder[m];\n // Only count if folder doesn't have CRC or has multiple streams\n if (!folders[m].hasCRC || numStreamsInFolder > 1) {\n numFiles += numStreamsInFolder;\n }\n }\n\n unpackCRCs = [];\n const definedResult = readDefinedVector(buf, offset, numFiles);\n offset += definedResult.bytesRead;\n for (let n = 0; n < numFiles; n++) {\n if (definedResult.defined[n]) {\n unpackCRCs.push(buf.readUInt32LE(offset));\n offset += 4;\n } else {\n unpackCRCs.push(0);\n }\n }\n }\n }\n\n // If no sizes specified, use folder unpack sizes\n if (unpackSizes.length === 0) {\n for (let p = 0; p < folders.length; p++) {\n const folder = folders[p];\n unpackSizes.push(folder.unpackSizes[folder.unpackSizes.length - 1]);\n }\n }\n\n return { numUnpackStreamsPerFolder: numUnpackStreamsPerFolder, unpackSizes: unpackSizes, unpackCRCs: unpackCRCs, offset: offset };\n}\n\n/**\n * Parse FilesInfo block\n */\nfunction parseFilesInfo(buf: Buffer, offset: number): { files: FileInfo[]; offset: number } {\n // Number of files\n const numFilesResult = readNumber(buf, offset);\n const numFiles = numFilesResult.value;\n offset += numFilesResult.bytesRead;\n\n // Initialize files array\n const files: FileInfo[] = [];\n for (let i = 0; i < numFiles; i++) {\n files.push({\n name: '',\n size: 0,\n isDirectory: false,\n isAntiFile: false,\n hasStream: true,\n });\n }\n\n let emptyStreamFlags: boolean[] = [];\n let emptyFileFlags: boolean[] = [];\n\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n // Read property size\n const propSizeResult = readNumber(buf, offset);\n const propSize = propSizeResult.value;\n offset += propSizeResult.bytesRead;\n\n const propEnd = offset + propSize;\n\n switch (propertyId) {\n case PropertyId.kEmptyStream:\n emptyStreamFlags = readBoolVector(buf, offset, numFiles);\n // Mark files that don't have streams\n for (let j = 0; j < numFiles; j++) {\n files[j].hasStream = !emptyStreamFlags[j];\n }\n break;\n\n case PropertyId.kEmptyFile: {\n let numEmptyStreams = 0;\n for (let k = 0; k < emptyStreamFlags.length; k++) {\n if (emptyStreamFlags[k]) numEmptyStreams++;\n }\n emptyFileFlags = readBoolVector(buf, offset, numEmptyStreams);\n break;\n }\n\n case PropertyId.kAnti: {\n let numAnti = 0;\n for (let l = 0; l < emptyStreamFlags.length; l++) {\n if (emptyStreamFlags[l]) numAnti++;\n }\n const antiFlags = readBoolVector(buf, offset, numAnti);\n let antiIdx = 0;\n for (let m = 0; m < numFiles; m++) {\n if (emptyStreamFlags[m]) {\n files[m].isAntiFile = antiFlags[antiIdx++];\n }\n }\n break;\n }\n\n case PropertyId.kName:\n offset = parseFileNames(buf, offset, files);\n break;\n\n case PropertyId.kCTime:\n offset = parseFileTimes(buf, offset, files, 'ctime');\n break;\n\n case PropertyId.kATime:\n offset = parseFileTimes(buf, offset, files, 'atime');\n break;\n\n case PropertyId.kMTime:\n offset = parseFileTimes(buf, offset, files, 'mtime');\n break;\n\n case PropertyId.kWinAttributes:\n offset = parseAttributes(buf, offset, files);\n break;\n\n case PropertyId.kDummy:\n // Skip dummy bytes\n break;\n\n default:\n // Skip unknown properties\n break;\n }\n\n offset = propEnd;\n }\n\n // Determine directories from empty stream + not empty file\n let emptyIdx = 0;\n for (let n = 0; n < numFiles; n++) {\n if (emptyStreamFlags[n]) {\n // Empty stream - could be directory or empty file\n if (emptyIdx < emptyFileFlags.length && emptyFileFlags[emptyIdx]) {\n files[n].isDirectory = false; // Empty file\n } else {\n files[n].isDirectory = true; // Directory\n }\n emptyIdx++;\n }\n }\n\n return { files: files, offset: offset };\n}\n\n/**\n * Read a boolean vector (bit-packed)\n */\nfunction readBoolVector(buf: Buffer, offset: number, count: number): boolean[] {\n const result: boolean[] = [];\n let byteIdx = 0;\n let bitMask = 0x80;\n\n for (let i = 0; i < count; i++) {\n result.push((buf[offset + byteIdx] & bitMask) !== 0);\n bitMask = bitMask >>> 1;\n if (bitMask === 0) {\n bitMask = 0x80;\n byteIdx++;\n }\n }\n\n return result;\n}\n\n/**\n * Parse file names (UTF-16LE encoded)\n */\nfunction parseFileNames(buf: Buffer, offset: number, files: FileInfo[]): number {\n // External flag\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External file names not supported', ErrorCode.CORRUPT_HEADER);\n }\n\n // Names are UTF-16LE, null-terminated\n for (let i = 0; i < files.length; i++) {\n const nameChars: number[] = [];\n while (offset < buf.length) {\n const charCode = buf.readUInt16LE(offset);\n offset += 2;\n if (charCode === 0) break;\n nameChars.push(charCode);\n }\n files[i].name = String.fromCharCode.apply(null, nameChars);\n }\n\n return offset;\n}\n\n/**\n * Parse file times (Windows FILETIME format)\n */\nfunction parseFileTimes(buf: Buffer, offset: number, files: FileInfo[], timeType: 'ctime' | 'atime' | 'mtime'): number {\n // Read defined vector (allDefined byte + optional bitmask)\n const definedResult = readDefinedVector(buf, offset, files.length);\n offset += definedResult.bytesRead;\n\n // External flag - 0x00 means data follows inline, non-zero means external stream\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External file times not supported', ErrorCode.UNSUPPORTED_FEATURE);\n }\n\n // Read times\n for (let i = 0; i < files.length; i++) {\n if (definedResult.defined[i]) {\n const filetime = readUInt64LE(buf, offset);\n offset += 8;\n // Convert FILETIME (100ns since 1601) to JavaScript Date\n // FILETIME epoch: 1601-01-01\n // JS Date epoch: 1970-01-01\n // Difference: 11644473600 seconds\n const ms = filetime / 10000 - 11644473600000;\n files[i][timeType] = new Date(ms);\n }\n }\n\n return offset;\n}\n\n/**\n * Parse Windows file attributes\n */\nfunction parseAttributes(buf: Buffer, offset: number, files: FileInfo[]): number {\n // Read defined vector (allDefined byte + optional bitmask)\n const definedResult = readDefinedVector(buf, offset, files.length);\n offset += definedResult.bytesRead;\n\n // External flag - 0x00 means data follows inline, non-zero means external stream\n const external = buf[offset++];\n if (external !== 0) {\n throw createCodedError('External file attributes not supported', ErrorCode.UNSUPPORTED_FEATURE);\n }\n\n // Read attributes\n for (let i = 0; i < files.length; i++) {\n if (definedResult.defined[i]) {\n files[i].attributes = buf.readUInt32LE(offset);\n offset += 4;\n }\n }\n\n return offset;\n}\n\n/**\n * Skip archive properties block\n */\nfunction skipArchiveProperties(buf: Buffer, offset: number): number {\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n const sizeResult = readNumber(buf, offset);\n offset += sizeResult.bytesRead + sizeResult.value;\n }\n return offset;\n}\n\n/**\n * Skip streams info block (for additional streams)\n */\nfunction skipStreamsInfo(buf: Buffer, offset: number): number {\n while (offset < buf.length) {\n const propertyId = buf[offset++];\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n // For nested structures, recurse\n if (propertyId === PropertyId.kPackInfo || propertyId === PropertyId.kUnpackInfo || propertyId === PropertyId.kSubStreamsInfo) {\n offset = skipStreamsInfo(buf, offset);\n }\n }\n return offset;\n}\n"],"names":["parseEncodedHeader","parseHeaderContent","parseSignatureHeader","buf","bufferEquals","SEVENZ_MAGIC","createCodedError","ErrorCode","INVALID_SIGNATURE","majorVersion","minorVersion","UNSUPPORTED_VERSION","startHeaderCRC","readUInt32LE","verifyCrc32Region","CRC_MISMATCH","nextHeaderOffset","readUInt64LE","nextHeaderSize","nextHeaderCRC","expectedCRC","length","offset","propertyId","PropertyId","kEncodedHeader","COMPRESSED_HEADER","kHeader","CORRUPT_HEADER","result","filesInfo","kEnd","kArchiveProperties","skipArchiveProperties","kAdditionalStreamsInfo","skipStreamsInfo","kMainStreamsInfo","streamsResult","parseStreamsInfo","streamsInfo","info","kFilesInfo","filesResult","parseFilesInfo","files","packPos","packSizes","folders","numUnpackStreamsPerFolder","unpackSizes","kPackInfo","packResult","parsePackInfo","packCRCs","kUnpackInfo","unpackResult","parseUnpackInfo","kSubStreamsInfo","subResult","parseSubStreamsInfo","unpackCRCs","i","folder","finalSize","push","packPosResult","readNumber","value","bytesRead","numPackResult","numPackStreams","kSize","sizeResult","kCRC","definedResult","readDefinedVector","j","defined","kFolder","numFoldersResult","numFolders","external","folderResult","parseFolder","kCodersUnpackSize","numOutputs","k","coders","numOutStreams","l","m","hasCRC","unpackCRC","numCodersResult","numCoders","numInStreamsTotal","numOutStreamsTotal","flags","idSize","isComplex","hasAttributes","id","numInStreams","inResult","outResult","properties","propsLenResult","slice","numBindPairs","bindPairs","inIndexResult","outIndexResult","inIndex","outIndex","numPackedStreams","packedStreams","isBound","n","p","indexResult","kNumUnpackStream","numResult","numStreams","remaining","numFiles","numStreamsInFolder","numFilesResult","name","size","isDirectory","isAntiFile","hasStream","emptyStreamFlags","emptyFileFlags","propSizeResult","propSize","propEnd","kEmptyStream","readBoolVector","kEmptyFile","numEmptyStreams","kAnti","numAnti","antiFlags","antiIdx","kName","parseFileNames","kCTime","parseFileTimes","kATime","kMTime","kWinAttributes","parseAttributes","kDummy","emptyIdx","count","byteIdx","bitMask","nameChars","charCode","readUInt16LE","String","fromCharCode","apply","timeType","UNSUPPORTED_FEATURE","filetime","ms","Date","attributes"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/index.ts"],"sourcesContent":["// 7z format parser exports\n// Only exports needed for public API - internal functions remain internal\n\n// Error types for handling specific error conditions\nexport type { CodedError } from './constants.ts';\nexport { createCodedError, ErrorCode } from './constants.ts';\n// Parser and sources for advanced users\nexport type { ArchiveSource, SevenZipEntry, VoidCallback } from './SevenZipParser.ts';\nexport { BufferSource, FileSource, SevenZipParser } from './SevenZipParser.ts';\n"],"names":["BufferSource","ErrorCode","FileSource","SevenZipParser","createCodedError"],"mappings":"AAAA,2BAA2B;AAC3B,0EAA0E;AAE1E,qDAAqD;;;;;;;;;;;;QAK5CA;eAAAA,8BAAY;;QAHMC;eAAAA,sBAAS;;QAGbC;eAAAA,4BAAU;;QAAEC;eAAAA,gCAAc;;QAHxCC;eAAAA,6BAAgB;;;2BAAmB;gCAGa"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/sevenz/index.ts"],"sourcesContent":["// 7z format parser exports\n// Only exports needed for public API - internal functions remain internal\n\n// Error types for handling specific error conditions\nexport type { CodedError } from './constants.ts';\nexport { createCodedError, ErrorCode } from './constants.ts';\n// Parser and sources for advanced users\nexport type { ArchiveSource, SevenZipEntry, VoidCallback } from './SevenZipParser.ts';\nexport { BufferSource, FileSource, SevenZipParser } from './SevenZipParser.ts';\n"],"names":["BufferSource","ErrorCode","FileSource","SevenZipParser","createCodedError"],"mappings":"AAAA,2BAA2B;AAC3B,0EAA0E;AAE1E,qDAAqD;;;;;;;;;;;;QAK5CA;eAAAA,8BAAY;;QAHMC;eAAAA,sBAAS;;QAGbC;eAAAA,4BAAU;;QAAEC;eAAAA,gCAAc;;QAHxCC;eAAAA,6BAAgB;;;2BAAmB;gCAGa"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/types.ts"],"sourcesContent":["export { DirectoryEntry, LinkEntry, Lock, SymbolicLinkEntry } from 'extract-base-iterator';\nexport { default as FileEntry } from './FileEntry.ts';\nexport type { SevenZipEntry } from './sevenz/SevenZipParser.ts';\n\nimport type { ExtractOptions as BaseExtractOptions, DirectoryEntry, LinkEntry, SymbolicLinkEntry } from 'extract-base-iterator';\nimport type FileEntry from './FileEntry.ts';\n\n// 7z-specific Entry union type with 7z-specific FileEntry\nexport type Entry = DirectoryEntry | FileEntry | LinkEntry | SymbolicLinkEntry;\n\n/**\n * Options for SevenZipIterator\n */\nexport interface ExtractOptions extends BaseExtractOptions {\n /**\n * Password for encrypted archives\n */\n password?: string;\n}\n\nexport type EntryCallback = (error?: Error, result?: IteratorResult<Entry>) => void;\n"],"names":["DirectoryEntry","FileEntry","LinkEntry","Lock","SymbolicLinkEntry"],"mappings":";;;;;;;;;;;QAASA;eAAAA,mCAAc;;QACHC;eAAAA,oBAAS;;QADJC;eAAAA,8BAAS;;QAAEC;eAAAA,yBAAI;;QAAEC;eAAAA,sCAAiB;;;mCAAQ;kEAC9B"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/iterators/7z-iterator/src/types.ts"],"sourcesContent":["export { DirectoryEntry, LinkEntry, Lock, SymbolicLinkEntry } from 'extract-base-iterator';\nexport { default as FileEntry } from './FileEntry.ts';\nexport type { SevenZipEntry } from './sevenz/SevenZipParser.ts';\n\nimport type { ExtractOptions as BaseExtractOptions, DirectoryEntry, LinkEntry, SymbolicLinkEntry } from 'extract-base-iterator';\nimport type FileEntry from './FileEntry.ts';\n\n// 7z-specific Entry union type with 7z-specific FileEntry\nexport type Entry = DirectoryEntry | FileEntry | LinkEntry | SymbolicLinkEntry;\n\n/**\n * Options for SevenZipIterator\n */\nexport interface ExtractOptions extends BaseExtractOptions {\n /**\n * Password for encrypted archives\n */\n password?: string;\n}\n\nexport type EntryCallback = (error?: Error, result?: IteratorResult<Entry>) => void;\n"],"names":["DirectoryEntry","FileEntry","LinkEntry","Lock","SymbolicLinkEntry"],"mappings":";;;;;;;;;;;QAASA;eAAAA,mCAAc;;QACHC;eAAAA,oBAAS;;QADJC;eAAAA,8BAAS;;QAAEC;eAAAA,yBAAI;;QAAEC;eAAAA,sCAAiB;;;mCAAQ;kEAC9B"}
@@ -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 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":["once","FileEntry","waitForAccess","fs","oo","SevenZipFileEntry","create","dest","options","callback","prototype","call","err","lock","release","Promise","resolve","reject","done","_writeFile","fullPath","_options","stream","Error","cb","writeStream","createWriteStream","on","streamErr","ws","destroy","pipe","pipeErr","s","attributes","canStream","retain","_canStream"],"mappings":"AAAA;;;;;CAKC,GAED,OAAOA,UAAU,eAAe;AAChC,SAA8BC,SAAS,EAAmCC,aAAa,QAAQ,wBAAwB;AACvH,OAAOC,QAAQ,cAAc;AAC7B,OAAOC,QAAQ,SAAS;AAGT,IAAA,AAAMC,oBAAN,MAAMA,0BAA0BJ;IAoB7CK,OAAOC,IAAY,EAAEC,OAA0C,EAAEC,QAA0B,EAA2B;QACpHA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;QACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;QAE7D,IAAI,OAAOC,aAAa,YAAY;YAClC,OAAOR,UAAUS,SAAS,CAACJ,MAAM,CAACK,IAAI,CAAC,IAAI,EAAEJ,MAAMC,SAAS,CAACI;gBAC3DH,SAASG;gBACT,IAAI,IAAI,CAACC,IAAI,EAAE;oBACb,IAAI,CAACA,IAAI,CAACC,OAAO;oBACjB,IAAI,CAACD,IAAI,GAAG;gBACd;YACF;QACF;QACA,OAAO,IAAIE,QAAQ,CAACC,SAASC,SAC3B,IAAI,CAACX,MAAM,CAACC,MAAMC,SAAS,CAACI,KAAaM;gBACvCN,MAAMK,OAAOL,OAAOI,QAAQE;YAC9B;IAEJ;IAEAC,WAAWC,QAAgB,EAAEC,QAAwB,EAAEZ,QAAyB,EAAQ;QACtF,IAAI,CAAC,IAAI,CAACa,MAAM,EAAE;YAChBb,SAAS,IAAIc,MAAM;YACnB;QACF;QAEA,MAAMD,SAAS,IAAI,CAACA,MAAM;QAC1B,IAAI,CAACA,MAAM,GAAG,MAAM,gBAAgB;QAEpC,oDAAoD;QACpD,MAAME,KAAKxB,KAAK,CAACY;YACfA,MAAMH,SAASG,OAAOV,cAAckB,UAAUX;QAChD;QAEA,IAAI;YACF,MAAMgB,cAActB,GAAGuB,iBAAiB,CAACN;YAEzC,2EAA2E;YAC3EE,OAAOK,EAAE,CAAC,SAAS,CAACC;gBAClB,4CAA4C;gBAC5C,iFAAiF;gBACjF,kFAAkF;gBAClF,mFAAmF;gBACnF,mEAAmE;gBACnE,gFAAgF;gBAChF,MAAMC,KAAKJ;gBACXA,YAAYE,EAAE,CAAC,SAAS,KAAO;gBAC/B,IAAI,OAAOE,GAAGC,OAAO,KAAK,YAAYD,GAAGC,OAAO;gBAChDN,GAAGI;YACL;YAEA,qDAAqD;YACrDN,OAAOS,IAAI,CAACN;YACZrB,GAAGqB,aAAa;gBAAC;gBAAS;gBAAS;aAAS,EAAED;QAChD,EAAE,OAAOQ,SAAS;YAChBR,GAAGQ;QACL;IACF;IAEAF,UAAU;QACR7B,UAAUS,SAAS,CAACoB,OAAO,CAACnB,IAAI,CAAC,IAAI;QACrC,IAAI,IAAI,CAACW,MAAM,EAAE;YACf,kGAAkG;YAClG,iEAAiE;YACjE,MAAMW,IAAI,IAAI,CAACX,MAAM;YACrB,IAAI,OAAOW,EAAEH,OAAO,KAAK,YAAY;gBACnCG,EAAEH,OAAO;YACX;YACA,IAAI,CAACR,MAAM,GAAG;QAChB;QACA,IAAI,IAAI,CAACT,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACC,OAAO;YACjB,IAAI,CAACD,IAAI,GAAG;QACd;IACF;IArFA,YAAYqB,UAA0B,EAAEZ,MAA6B,EAAET,IAAU,EAAEsB,SAAkB,CAAE;QACrG,KAAK,CAACD;QACN,IAAI,CAACZ,MAAM,GAAGA;QACd,IAAI,CAACT,IAAI,GAAGA;QACZ,IAAI,CAACA,IAAI,CAACuB,MAAM;QAChB,IAAI,CAACC,UAAU,GAAGF;IACpB;AAgFF;AA/FA,SAAqB9B,+BA+FpB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/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 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":["once","FileEntry","waitForAccess","fs","oo","SevenZipFileEntry","create","dest","options","callback","prototype","call","err","lock","release","Promise","resolve","reject","done","_writeFile","fullPath","_options","stream","Error","cb","writeStream","createWriteStream","on","streamErr","ws","destroy","pipe","pipeErr","s","attributes","canStream","retain","_canStream"],"mappings":"AAAA;;;;;CAKC,GAED,OAAOA,UAAU,eAAe;AAChC,SAA8BC,SAAS,EAAmCC,aAAa,QAAQ,wBAAwB;AACvH,OAAOC,QAAQ,cAAc;AAC7B,OAAOC,QAAQ,SAAS;AAGT,IAAA,AAAMC,oBAAN,MAAMA,0BAA0BJ;IAoB7CK,OAAOC,IAAY,EAAEC,OAA0C,EAAEC,QAA0B,EAA2B;QACpHA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;QACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;QAE7D,IAAI,OAAOC,aAAa,YAAY;YAClC,OAAOR,UAAUS,SAAS,CAACJ,MAAM,CAACK,IAAI,CAAC,IAAI,EAAEJ,MAAMC,SAAS,CAACI;gBAC3DH,SAASG;gBACT,IAAI,IAAI,CAACC,IAAI,EAAE;oBACb,IAAI,CAACA,IAAI,CAACC,OAAO;oBACjB,IAAI,CAACD,IAAI,GAAG;gBACd;YACF;QACF;QACA,OAAO,IAAIE,QAAQ,CAACC,SAASC,SAC3B,IAAI,CAACX,MAAM,CAACC,MAAMC,SAAS,CAACI,KAAaM;gBACvCN,MAAMK,OAAOL,OAAOI,QAAQE;YAC9B;IAEJ;IAEAC,WAAWC,QAAgB,EAAEC,QAAwB,EAAEZ,QAAyB,EAAQ;QACtF,IAAI,CAAC,IAAI,CAACa,MAAM,EAAE;YAChBb,SAAS,IAAIc,MAAM;YACnB;QACF;QAEA,MAAMD,SAAS,IAAI,CAACA,MAAM;QAC1B,IAAI,CAACA,MAAM,GAAG,MAAM,gBAAgB;QAEpC,oDAAoD;QACpD,MAAME,KAAKxB,KAAK,CAACY;YACfA,MAAMH,SAASG,OAAOV,cAAckB,UAAUX;QAChD;QAEA,IAAI;YACF,MAAMgB,cAActB,GAAGuB,iBAAiB,CAACN;YAEzC,2EAA2E;YAC3EE,OAAOK,EAAE,CAAC,SAAS,CAACC;gBAClB,4CAA4C;gBAC5C,iFAAiF;gBACjF,kFAAkF;gBAClF,mFAAmF;gBACnF,mEAAmE;gBACnE,gFAAgF;gBAChF,MAAMC,KAAKJ;gBACXA,YAAYE,EAAE,CAAC,SAAS,KAAO;gBAC/B,IAAI,OAAOE,GAAGC,OAAO,KAAK,YAAYD,GAAGC,OAAO;gBAChDN,GAAGI;YACL;YAEA,qDAAqD;YACrDN,OAAOS,IAAI,CAACN;YACZrB,GAAGqB,aAAa;gBAAC;gBAAS;gBAAS;aAAS,EAAED;QAChD,EAAE,OAAOQ,SAAS;YAChBR,GAAGQ;QACL;IACF;IAEAF,UAAU;QACR7B,UAAUS,SAAS,CAACoB,OAAO,CAACnB,IAAI,CAAC,IAAI;QACrC,IAAI,IAAI,CAACW,MAAM,EAAE;YACf,kGAAkG;YAClG,iEAAiE;YACjE,MAAMW,IAAI,IAAI,CAACX,MAAM;YACrB,IAAI,OAAOW,EAAEH,OAAO,KAAK,YAAY;gBACnCG,EAAEH,OAAO;YACX;YACA,IAAI,CAACR,MAAM,GAAG;QAChB;QACA,IAAI,IAAI,CAACT,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACC,OAAO;YACjB,IAAI,CAACD,IAAI,GAAG;QACd;IACF;IArFA,YAAYqB,UAA0B,EAAEZ,MAA6B,EAAET,IAAU,EAAEsB,SAAkB,CAAE;QACrG,KAAK,CAACD;QACN,IAAI,CAACZ,MAAM,GAAGA;QACd,IAAI,CAACT,IAAI,GAAGA;QACZ,IAAI,CAACA,IAAI,CAACuB,MAAM;QAChB,IAAI,CAACC,UAAU,GAAGF;IACpB;AAgFF;AA/FA,SAAqB9B,+BA+FpB"}