7z-iterator 0.2.9 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FileEntry.js.map +1 -1
- package/dist/cjs/SevenZipIterator.js.map +1 -1
- package/dist/cjs/compat.js.map +1 -1
- package/dist/cjs/lib/streamToSource.js.map +1 -1
- package/dist/cjs/nextEntry.js.map +1 -1
- package/dist/cjs/sevenz/NumberCodec.js.map +1 -1
- package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Aes.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Bcj.js +1 -1
- package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Bcj2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjArm.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjArm64.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjArmt.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjIa64.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjPpc.js.map +1 -1
- package/dist/cjs/sevenz/codecs/BcjSparc.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Delta.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/cjs/sevenz/codecs/index.js.map +1 -1
- package/dist/cjs/sevenz/codecs/lzmaCompat.d.cts +1 -1
- package/dist/cjs/sevenz/codecs/lzmaCompat.d.ts +1 -1
- package/dist/cjs/sevenz/codecs/lzmaCompat.js.map +1 -1
- package/dist/cjs/sevenz/codecs/streams.js.map +1 -1
- package/dist/cjs/sevenz/constants.d.cts +8 -8
- package/dist/cjs/sevenz/constants.d.ts +8 -8
- package/dist/cjs/sevenz/constants.js.map +1 -1
- package/dist/cjs/sevenz/headers.js +1 -1
- package/dist/cjs/sevenz/headers.js.map +1 -1
- package/dist/esm/FileEntry.js +1 -1
- package/dist/esm/FileEntry.js.map +1 -1
- package/dist/esm/SevenZipIterator.js +6 -6
- package/dist/esm/SevenZipIterator.js.map +1 -1
- package/dist/esm/compat.js +2 -2
- package/dist/esm/compat.js.map +1 -1
- package/dist/esm/lib/streamToSource.js +12 -12
- package/dist/esm/lib/streamToSource.js.map +1 -1
- package/dist/esm/nextEntry.js +11 -11
- package/dist/esm/nextEntry.js.map +1 -1
- package/dist/esm/sevenz/NumberCodec.js +19 -19
- package/dist/esm/sevenz/NumberCodec.js.map +1 -1
- package/dist/esm/sevenz/SevenZipParser.js +191 -191
- package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
- package/dist/esm/sevenz/codecs/Aes.js +29 -29
- package/dist/esm/sevenz/codecs/Aes.js.map +1 -1
- package/dist/esm/sevenz/codecs/Bcj.js +8 -8
- package/dist/esm/sevenz/codecs/Bcj.js.map +1 -1
- package/dist/esm/sevenz/codecs/Bcj2.js +35 -35
- package/dist/esm/sevenz/codecs/Bcj2.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjArm.js +4 -4
- package/dist/esm/sevenz/codecs/BcjArm.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjArm64.js +5 -5
- package/dist/esm/sevenz/codecs/BcjArm64.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjArmt.js +10 -10
- package/dist/esm/sevenz/codecs/BcjArmt.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjIa64.js +24 -24
- package/dist/esm/sevenz/codecs/BcjIa64.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjPpc.js +5 -5
- package/dist/esm/sevenz/codecs/BcjPpc.js.map +1 -1
- package/dist/esm/sevenz/codecs/BcjSparc.js +8 -8
- package/dist/esm/sevenz/codecs/BcjSparc.js.map +1 -1
- package/dist/esm/sevenz/codecs/Delta.js +6 -6
- package/dist/esm/sevenz/codecs/Delta.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma.js +16 -16
- package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma2.js +35 -35
- package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js +3 -3
- package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
- package/dist/esm/sevenz/codecs/index.js +6 -6
- package/dist/esm/sevenz/codecs/index.js.map +1 -1
- package/dist/esm/sevenz/codecs/lzmaCompat.d.ts +1 -1
- package/dist/esm/sevenz/codecs/lzmaCompat.js +5 -5
- package/dist/esm/sevenz/codecs/lzmaCompat.js.map +1 -1
- package/dist/esm/sevenz/codecs/streams.js +13 -13
- package/dist/esm/sevenz/codecs/streams.js.map +1 -1
- package/dist/esm/sevenz/constants.d.ts +8 -8
- package/dist/esm/sevenz/constants.js +9 -9
- package/dist/esm/sevenz/constants.js.map +1 -1
- package/dist/esm/sevenz/headers.js +134 -134
- package/dist/esm/sevenz/headers.js.map +1 -1
- package/package.json +20 -20
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
1
|
+
export declare const SEVENZ_MAGIC: number[];
|
|
2
|
+
export declare const SIGNATURE_HEADER_SIZE = 32;
|
|
3
|
+
export declare const START_HEADER_SIZE = 20;
|
|
4
|
+
export declare const PropertyId: {
|
|
5
5
|
kEnd: number;
|
|
6
6
|
kHeader: number;
|
|
7
7
|
kArchiveProperties: number;
|
|
@@ -29,7 +29,7 @@ export declare var PropertyId: {
|
|
|
29
29
|
kStartPos: number;
|
|
30
30
|
kDummy: number;
|
|
31
31
|
};
|
|
32
|
-
export declare
|
|
32
|
+
export declare const CodecId: {
|
|
33
33
|
COPY: number[];
|
|
34
34
|
DELTA: number[];
|
|
35
35
|
LZMA: number[];
|
|
@@ -47,7 +47,7 @@ export declare var CodecId: {
|
|
|
47
47
|
BZIP2: number[];
|
|
48
48
|
AES: number[];
|
|
49
49
|
};
|
|
50
|
-
export declare
|
|
50
|
+
export declare const FileAttribute: {
|
|
51
51
|
READONLY: number;
|
|
52
52
|
HIDDEN: number;
|
|
53
53
|
SYSTEM: number;
|
|
@@ -64,7 +64,7 @@ export declare var FileAttribute: {
|
|
|
64
64
|
ENCRYPTED: number;
|
|
65
65
|
UNIX_EXTENSION: number;
|
|
66
66
|
};
|
|
67
|
-
export declare
|
|
67
|
+
export declare const UnixMode: {
|
|
68
68
|
DIR: number;
|
|
69
69
|
FILE: number;
|
|
70
70
|
SYMLINK: number;
|
|
@@ -74,7 +74,7 @@ export declare var UnixMode: {
|
|
|
74
74
|
DEFAULT_DIR: number;
|
|
75
75
|
DEFAULT_FILE: number;
|
|
76
76
|
};
|
|
77
|
-
export declare
|
|
77
|
+
export declare const ErrorCode: {
|
|
78
78
|
INVALID_SIGNATURE: string;
|
|
79
79
|
CRC_MISMATCH: string;
|
|
80
80
|
UNSUPPORTED_CODEC: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
1
|
+
export declare const SEVENZ_MAGIC: number[];
|
|
2
|
+
export declare const SIGNATURE_HEADER_SIZE = 32;
|
|
3
|
+
export declare const START_HEADER_SIZE = 20;
|
|
4
|
+
export declare const PropertyId: {
|
|
5
5
|
kEnd: number;
|
|
6
6
|
kHeader: number;
|
|
7
7
|
kArchiveProperties: number;
|
|
@@ -29,7 +29,7 @@ export declare var PropertyId: {
|
|
|
29
29
|
kStartPos: number;
|
|
30
30
|
kDummy: number;
|
|
31
31
|
};
|
|
32
|
-
export declare
|
|
32
|
+
export declare const CodecId: {
|
|
33
33
|
COPY: number[];
|
|
34
34
|
DELTA: number[];
|
|
35
35
|
LZMA: number[];
|
|
@@ -47,7 +47,7 @@ export declare var CodecId: {
|
|
|
47
47
|
BZIP2: number[];
|
|
48
48
|
AES: number[];
|
|
49
49
|
};
|
|
50
|
-
export declare
|
|
50
|
+
export declare const FileAttribute: {
|
|
51
51
|
READONLY: number;
|
|
52
52
|
HIDDEN: number;
|
|
53
53
|
SYSTEM: number;
|
|
@@ -64,7 +64,7 @@ export declare var FileAttribute: {
|
|
|
64
64
|
ENCRYPTED: number;
|
|
65
65
|
UNIX_EXTENSION: number;
|
|
66
66
|
};
|
|
67
|
-
export declare
|
|
67
|
+
export declare const UnixMode: {
|
|
68
68
|
DIR: number;
|
|
69
69
|
FILE: number;
|
|
70
70
|
SYMLINK: number;
|
|
@@ -74,7 +74,7 @@ export declare var UnixMode: {
|
|
|
74
74
|
DEFAULT_DIR: number;
|
|
75
75
|
DEFAULT_FILE: number;
|
|
76
76
|
};
|
|
77
|
-
export declare
|
|
77
|
+
export declare const ErrorCode: {
|
|
78
78
|
INVALID_SIGNATURE: string;
|
|
79
79
|
CRC_MISMATCH: string;
|
|
80
80
|
UNSUPPORTED_CODEC: string;
|
|
@@ -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
|
|
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_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_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;;QAiCGC;eAAAA;;;AA/GT,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,gBAAgB;IAChBC,mBAAmB;IACnBC,mBAAmB;IACnBC,sBAAsB;AACxB;AAUO,SAAS3E,iBAAiB4E,OAAe,EAAEC,IAAY;IAC5D,IAAMC,MAAM,IAAIC,MAAMH;IACtBE,IAAID,IAAI,GAAGA;IACX,OAAOC;AACT"}
|
|
@@ -307,7 +307,7 @@ function parseHeaderContent(buf, offset) {
|
|
|
307
307
|
numOutStreams = outResult.value;
|
|
308
308
|
offset += outResult.bytesRead;
|
|
309
309
|
}
|
|
310
|
-
var properties;
|
|
310
|
+
var properties = void 0;
|
|
311
311
|
if (hasAttributes) {
|
|
312
312
|
var propsLenResult = (0, _NumberCodects.readNumber)(buf, offset);
|
|
313
313
|
offset += propsLenResult.bytesRead;
|
|
@@ -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 var majorVersion = buf[6];\n var 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 var 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 var nextHeaderOffset = readUInt64LE(buf, 12);\n var nextHeaderSize = readUInt64LE(buf, 20);\n var 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 var offset = 0;\n\n // Read property ID\n var 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 var result: { streamsInfo?: StreamsInfo; filesInfo: FileInfo[] } = {\n filesInfo: [],\n };\n\n // Parse header contents\n while (offset < buf.length) {\n var 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 var streamsResult = parseStreamsInfo(buf, offset);\n result.streamsInfo = streamsResult.info;\n offset = streamsResult.offset;\n break;\n }\n case PropertyId.kFilesInfo: {\n var 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 var info: StreamsInfo = {\n packPos: 0,\n packSizes: [],\n folders: [],\n numUnpackStreamsPerFolder: [],\n unpackSizes: [],\n };\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n switch (propertyId) {\n case PropertyId.kPackInfo: {\n var 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 var unpackResult = parseUnpackInfo(buf, offset);\n info.folders = unpackResult.folders;\n offset = unpackResult.offset;\n break;\n }\n case PropertyId.kSubStreamsInfo: {\n var 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 (var i = 0; i < info.folders.length; i++) {\n var folder = info.folders[i];\n // Get the final unpack size (last coder's output)\n var 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 var packPosResult = readNumber(buf, offset);\n var packPos = packPosResult.value;\n offset += packPosResult.bytesRead;\n\n // Number of pack streams\n var numPackResult = readNumber(buf, offset);\n var numPackStreams = numPackResult.value;\n offset += numPackResult.bytesRead;\n\n var packSizes: number[] = [];\n var packCRCs: number[] | undefined;\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kSize) {\n for (var i = 0; i < numPackStreams; i++) {\n var sizeResult = readNumber(buf, offset);\n packSizes.push(sizeResult.value);\n offset += sizeResult.bytesRead;\n }\n } else if (propertyId === PropertyId.kCRC) {\n packCRCs = [];\n var definedResult = readDefinedVector(buf, offset, numPackStreams);\n offset += definedResult.bytesRead;\n for (var 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 var folders: Folder[] = [];\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kFolder) {\n // Number of folders\n var numFoldersResult = readNumber(buf, offset);\n var numFolders = numFoldersResult.value;\n offset += numFoldersResult.bytesRead;\n\n // External flag\n var 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 (var i = 0; i < numFolders; i++) {\n var 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 (var j = 0; j < folders.length; j++) {\n var folder = folders[j];\n folder.unpackSizes = [];\n // One unpack size per coder output stream\n var numOutputs = 0;\n for (var k = 0; k < folder.coders.length; k++) {\n numOutputs += folder.coders[k].numOutStreams;\n }\n for (var l = 0; l < numOutputs; l++) {\n var 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 var definedResult = readDefinedVector(buf, offset, folders.length);\n offset += definedResult.bytesRead;\n for (var 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 var numCodersResult = readNumber(buf, offset);\n var numCoders = numCodersResult.value;\n offset += numCodersResult.bytesRead;\n\n var coders: Coder[] = [];\n var numInStreamsTotal = 0;\n var numOutStreamsTotal = 0;\n\n for (var i = 0; i < numCoders; i++) {\n var flags = buf[offset++];\n var idSize = flags & 0x0f;\n var isComplex = (flags & 0x10) !== 0;\n var hasAttributes = (flags & 0x20) !== 0;\n\n // Read codec ID\n var id: number[] = [];\n for (var j = 0; j < idSize; j++) {\n id.push(buf[offset++]);\n }\n\n var numInStreams = 1;\n var numOutStreams = 1;\n\n if (isComplex) {\n var inResult = readNumber(buf, offset);\n numInStreams = inResult.value;\n offset += inResult.bytesRead;\n\n var outResult = readNumber(buf, offset);\n numOutStreams = outResult.value;\n offset += outResult.bytesRead;\n }\n\n var properties: Buffer | undefined;\n if (hasAttributes) {\n var 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 var numBindPairs = numOutStreamsTotal - 1;\n var bindPairs: { inIndex: number; outIndex: number }[] = [];\n\n for (var k = 0; k < numBindPairs; k++) {\n var inIndexResult = readNumber(buf, offset);\n offset += inIndexResult.bytesRead;\n\n var 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 var numPackedStreams = numInStreamsTotal - numBindPairs;\n var packedStreams: number[] = [];\n\n if (numPackedStreams === 1) {\n // Find the unbound input stream\n for (var m = 0; m < numInStreamsTotal; m++) {\n var isBound = false;\n for (var 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 (var p = 0; p < numPackedStreams; p++) {\n var 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 var numUnpackStreamsPerFolder: number[] = [];\n var unpackSizes: number[] = [];\n var unpackCRCs: number[] | undefined;\n\n // Default: 1 file per folder\n for (var i = 0; i < folders.length; i++) {\n numUnpackStreamsPerFolder.push(1);\n }\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n if (propertyId === PropertyId.kNumUnpackStream) {\n for (var j = 0; j < folders.length; j++) {\n var numResult = readNumber(buf, offset);\n numUnpackStreamsPerFolder[j] = numResult.value;\n offset += numResult.bytesRead;\n }\n } else if (propertyId === PropertyId.kSize) {\n for (var k = 0; k < folders.length; k++) {\n var numStreams = numUnpackStreamsPerFolder[k];\n if (numStreams === 0) continue;\n\n // Read sizes for all but last stream in folder (last is calculated)\n var remaining = folders[k].unpackSizes[folders[k].unpackSizes.length - 1];\n for (var l = 0; l < numStreams - 1; l++) {\n var 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 var numFiles = 0;\n for (var m = 0; m < folders.length; m++) {\n var 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 var definedResult = readDefinedVector(buf, offset, numFiles);\n offset += definedResult.bytesRead;\n for (var 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 (var p = 0; p < folders.length; p++) {\n var 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 var numFilesResult = readNumber(buf, offset);\n var numFiles = numFilesResult.value;\n offset += numFilesResult.bytesRead;\n\n // Initialize files array\n var files: FileInfo[] = [];\n for (var 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 var emptyStreamFlags: boolean[] = [];\n var emptyFileFlags: boolean[] = [];\n\n while (offset < buf.length) {\n var propertyId = buf[offset++];\n\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n\n // Read property size\n var propSizeResult = readNumber(buf, offset);\n var propSize = propSizeResult.value;\n offset += propSizeResult.bytesRead;\n\n var 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 (var j = 0; j < numFiles; j++) {\n files[j].hasStream = !emptyStreamFlags[j];\n }\n break;\n\n case PropertyId.kEmptyFile: {\n var numEmptyStreams = 0;\n for (var 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 var numAnti = 0;\n for (var l = 0; l < emptyStreamFlags.length; l++) {\n if (emptyStreamFlags[l]) numAnti++;\n }\n var antiFlags = readBoolVector(buf, offset, numAnti);\n var antiIdx = 0;\n for (var 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 var emptyIdx = 0;\n for (var 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 var result: boolean[] = [];\n var byteIdx = 0;\n var bitMask = 0x80;\n\n for (var 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 var 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 (var i = 0; i < files.length; i++) {\n var nameChars: number[] = [];\n while (offset < buf.length) {\n var 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 var 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 var 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 (var i = 0; i < files.length; i++) {\n if (definedResult.defined[i]) {\n var 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 var 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 var 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 var 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 (var 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 var propertyId = buf[offset++];\n if (propertyId === PropertyId.kEnd) {\n break;\n }\n var 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 var 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/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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"}
|
package/dist/esm/FileEntry.js
CHANGED
|
@@ -32,7 +32,7 @@ let SevenZipFileEntry = class SevenZipFileEntry extends FileEntry {
|
|
|
32
32
|
this.parser.getEntryStreamAsync(this.entry, (err, stream)=>{
|
|
33
33
|
if (err) return callback(err);
|
|
34
34
|
if (!stream) return callback(new Error('No stream returned'));
|
|
35
|
-
|
|
35
|
+
const res = stream.pipe(fs.createWriteStream(fullPath));
|
|
36
36
|
oo(res, [
|
|
37
37
|
'error',
|
|
38
38
|
'end',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/FileEntry.ts"],"sourcesContent":["import { type FileAttributes, FileEntry, type NoParamCallback, waitForAccess } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\nimport type { ExtractOptions, LockT } from './types.ts';\n\nexport default class SevenZipFileEntry extends FileEntry {\n private lock: LockT;\n private entry: SevenZipEntry;\n private parser: SevenZipParser;\n\n constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: LockT) {\n super(attributes);\n this.entry = entry;\n this.parser = parser;\n this.lock = lock;\n this.lock.retain();\n }\n\n create(dest: string, options: ExtractOptions | NoParamCallback, callback: NoParamCallback): undefined | Promise<boolean> {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n\n if (typeof callback === 'function') {\n options = options || {};\n return FileEntry.prototype.create.call(this, dest, options, (err?: Error) => {\n callback(err);\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n });\n }\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => {\n err ? reject(err) : resolve(done);\n });\n });\n }\n\n _writeFile(fullPath: string, _options: ExtractOptions, callback: NoParamCallback): undefined {\n if (!this.entry || !this.parser) {\n callback(new Error('7z FileEntry missing entry. Check for calling create multiple times'));\n return;\n }\n\n // Use callback-based async decompression\n this.parser.getEntryStreamAsync(this.entry, (err, stream) => {\n if (err) return callback(err);\n if (!stream) return callback(new Error('No stream returned'));\n\n
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/FileEntry.ts"],"sourcesContent":["import { type FileAttributes, FileEntry, type NoParamCallback, waitForAccess } from 'extract-base-iterator';\nimport fs from 'fs';\nimport oo from 'on-one';\nimport type { SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\nimport type { ExtractOptions, LockT } from './types.ts';\n\nexport default class SevenZipFileEntry extends FileEntry {\n private lock: LockT;\n private entry: SevenZipEntry;\n private parser: SevenZipParser;\n\n constructor(attributes: FileAttributes, entry: SevenZipEntry, parser: SevenZipParser, lock: LockT) {\n super(attributes);\n this.entry = entry;\n this.parser = parser;\n this.lock = lock;\n this.lock.retain();\n }\n\n create(dest: string, options: ExtractOptions | NoParamCallback, callback: NoParamCallback): undefined | Promise<boolean> {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n\n if (typeof callback === 'function') {\n options = options || {};\n return FileEntry.prototype.create.call(this, dest, options, (err?: Error) => {\n callback(err);\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n });\n }\n return new Promise((resolve, reject) => {\n this.create(dest, options, (err?: Error, done?: boolean) => {\n err ? reject(err) : resolve(done);\n });\n });\n }\n\n _writeFile(fullPath: string, _options: ExtractOptions, callback: NoParamCallback): undefined {\n if (!this.entry || !this.parser) {\n callback(new Error('7z FileEntry missing entry. Check for calling create multiple times'));\n return;\n }\n\n // Use callback-based async decompression\n this.parser.getEntryStreamAsync(this.entry, (err, stream) => {\n if (err) return callback(err);\n if (!stream) return callback(new Error('No stream returned'));\n\n const res = stream.pipe(fs.createWriteStream(fullPath));\n oo(res, ['error', 'end', 'close', 'finish'], (writeErr?: Error) => {\n writeErr ? callback(writeErr) : waitForAccess(fullPath, callback);\n });\n });\n }\n\n destroy() {\n FileEntry.prototype.destroy.call(this);\n this.entry = null;\n this.parser = null;\n if (this.lock) {\n this.lock.release();\n this.lock = null;\n }\n }\n}\n"],"names":["FileEntry","waitForAccess","fs","oo","SevenZipFileEntry","create","dest","options","callback","prototype","call","err","lock","release","Promise","resolve","reject","done","_writeFile","fullPath","_options","entry","parser","Error","getEntryStreamAsync","stream","res","pipe","createWriteStream","writeErr","destroy","attributes","retain"],"mappings":"AAAA,SAA8BA,SAAS,EAAwBC,aAAa,QAAQ,wBAAwB;AAC5G,OAAOC,QAAQ,KAAK;AACpB,OAAOC,QAAQ,SAAS;AAIT,IAAA,AAAMC,oBAAN,MAAMA,0BAA0BJ;IAa7CK,OAAOC,IAAY,EAAEC,OAAyC,EAAEC,QAAyB,EAAgC;QACvH,IAAI,OAAOD,YAAY,YAAY;YACjCC,WAAWD;YACXA,UAAU;QACZ;QAEA,IAAI,OAAOC,aAAa,YAAY;YAClCD,UAAUA,WAAW,CAAC;YACtB,OAAOP,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;YAC3B,IAAI,CAACX,MAAM,CAACC,MAAMC,SAAS,CAACI,KAAaM;gBACvCN,MAAMK,OAAOL,OAAOI,QAAQE;YAC9B;QACF;IACF;IAEAC,WAAWC,QAAgB,EAAEC,QAAwB,EAAEZ,QAAyB,EAAa;QAC3F,IAAI,CAAC,IAAI,CAACa,KAAK,IAAI,CAAC,IAAI,CAACC,MAAM,EAAE;YAC/Bd,SAAS,IAAIe,MAAM;YACnB;QACF;QAEA,yCAAyC;QACzC,IAAI,CAACD,MAAM,CAACE,mBAAmB,CAAC,IAAI,CAACH,KAAK,EAAE,CAACV,KAAKc;YAChD,IAAId,KAAK,OAAOH,SAASG;YACzB,IAAI,CAACc,QAAQ,OAAOjB,SAAS,IAAIe,MAAM;YAEvC,MAAMG,MAAMD,OAAOE,IAAI,CAACzB,GAAG0B,iBAAiB,CAACT;YAC7ChB,GAAGuB,KAAK;gBAAC;gBAAS;gBAAO;gBAAS;aAAS,EAAE,CAACG;gBAC5CA,WAAWrB,SAASqB,YAAY5B,cAAckB,UAAUX;YAC1D;QACF;IACF;IAEAsB,UAAU;QACR9B,UAAUS,SAAS,CAACqB,OAAO,CAACpB,IAAI,CAAC,IAAI;QACrC,IAAI,CAACW,KAAK,GAAG;QACb,IAAI,CAACC,MAAM,GAAG;QACd,IAAI,IAAI,CAACV,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAACC,OAAO;YACjB,IAAI,CAACD,IAAI,GAAG;QACd;IACF;IAzDA,YAAYmB,UAA0B,EAAEV,KAAoB,EAAEC,MAAsB,EAAEV,IAAW,CAAE;QACjG,KAAK,CAACmB;QACN,IAAI,CAACV,KAAK,GAAGA;QACb,IAAI,CAACC,MAAM,GAAGA;QACd,IAAI,CAACV,IAAI,GAAGA;QACZ,IAAI,CAACA,IAAI,CAACoB,MAAM;IAClB;AAoDF;AA/DA,SAAqB5B,+BA+DpB"}
|
|
@@ -43,10 +43,10 @@ let SevenZipIterator = class SevenZipIterator extends BaseIterator {
|
|
|
43
43
|
super(options);
|
|
44
44
|
this.lock = new Lock();
|
|
45
45
|
this.lock.iterator = this;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
const queue = new Queue(1);
|
|
47
|
+
let cancelled = false;
|
|
48
|
+
let archiveSource = null;
|
|
49
|
+
const setup = ()=>{
|
|
50
50
|
cancelled = true;
|
|
51
51
|
return undefined;
|
|
52
52
|
};
|
|
@@ -72,7 +72,7 @@ let SevenZipIterator = class SevenZipIterator extends BaseIterator {
|
|
|
72
72
|
// Stream input - use hybrid memory/temp-file approach
|
|
73
73
|
// Store source stream in lock for cleanup if destroyed during download
|
|
74
74
|
this.lock.sourceStream = source;
|
|
75
|
-
|
|
75
|
+
const tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));
|
|
76
76
|
queue.defer((cb)=>{
|
|
77
77
|
streamToSource(source, {
|
|
78
78
|
memoryThreshold: options.memoryThreshold,
|
|
@@ -97,7 +97,7 @@ let SevenZipIterator = class SevenZipIterator extends BaseIterator {
|
|
|
97
97
|
if (this.done || cancelled) return;
|
|
98
98
|
if (!archiveSource) return cb(new Error('No archive source'));
|
|
99
99
|
try {
|
|
100
|
-
|
|
100
|
+
const parser = new SevenZipParser(archiveSource);
|
|
101
101
|
parser.parse();
|
|
102
102
|
this.iterator = new EntryIterator(parser);
|
|
103
103
|
cb();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport { tmpdir } from './compat.ts';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/SevenZipIterator.ts"],"sourcesContent":["import BaseIterator from 'extract-base-iterator';\nimport fs from 'fs';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport shortHash from 'short-hash';\nimport tempSuffix from 'temp-suffix';\nimport { tmpdir } from './compat.ts';\nimport Lock from './lib/Lock.ts';\nimport streamToSource, { type SourceResult } from './lib/streamToSource.ts';\nimport nextEntry from './nextEntry.ts';\nimport { setPassword } from './sevenz/codecs/index.ts';\nimport { type ArchiveSource, FileSource, type SevenZipEntry, SevenZipParser } from './sevenz/SevenZipParser.ts';\n\nimport type { ExtractOptions, LockT, SevenZipFileIterator } from './types.ts';\n\n/**\n * Iterator wrapper around SevenZipParser entries\n */\nclass EntryIterator implements SevenZipFileIterator {\n private parser: SevenZipParser;\n private entries: SevenZipEntry[];\n private index = 0;\n\n constructor(parser: SevenZipParser) {\n this.parser = parser;\n this.entries = parser.getEntries();\n }\n\n next(): SevenZipEntry | null {\n if (this.index >= this.entries.length) {\n return null;\n }\n return this.entries[this.index++];\n }\n\n getParser(): SevenZipParser {\n return this.parser;\n }\n}\n\nexport default class SevenZipIterator extends BaseIterator {\n lock: LockT;\n iterator: SevenZipFileIterator;\n\n constructor(source: string | NodeJS.ReadableStream, options: ExtractOptions = {}) {\n super(options);\n this.lock = new Lock();\n this.lock.iterator = this;\n const queue = new Queue(1);\n let cancelled = false;\n let archiveSource: ArchiveSource | null = null;\n const setup = (): undefined => {\n cancelled = true;\n return undefined;\n };\n this.processing.push(setup);\n\n // Set password (or clear if not provided)\n setPassword(options.password || null);\n\n if (typeof source === 'string') {\n // File path input - use FileSource directly\n queue.defer((cb: (err?: Error) => void) => {\n fs.stat(source, (statErr, stats) => {\n if (this.done || cancelled) return;\n if (statErr) return cb(statErr);\n\n fs.open(source, 'r', (err, fd) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n\n archiveSource = new FileSource(fd, stats.size);\n this.lock.fd = fd;\n cb();\n });\n });\n });\n } else {\n // Stream input - use hybrid memory/temp-file approach\n // Store source stream in lock for cleanup if destroyed during download\n this.lock.sourceStream = source as NodeJS.ReadableStream;\n const tempPath = path.join(tmpdir(), '7z-iterator', shortHash(process.cwd()), tempSuffix('tmp.7z'));\n queue.defer((cb: (err?: Error) => void) => {\n streamToSource(\n source,\n {\n memoryThreshold: options.memoryThreshold,\n tempPath: tempPath,\n },\n (err?: Error, result?: SourceResult) => {\n if (this.done || cancelled) return;\n if (err) return cb(err);\n if (!result) return cb(new Error('No result from streamToSource'));\n\n archiveSource = result.source;\n if (result.fd !== undefined) {\n this.lock.fd = result.fd;\n }\n if (result.tempPath) {\n this.lock.tempPath = result.tempPath;\n }\n cb();\n }\n );\n });\n }\n\n // Parse and build iterator\n queue.defer((cb: (err?: Error) => void) => {\n if (this.done || cancelled) return;\n if (!archiveSource) return cb(new Error('No archive source'));\n\n try {\n const parser = new SevenZipParser(archiveSource);\n parser.parse();\n this.iterator = new EntryIterator(parser);\n cb();\n } catch (parseErr) {\n cb(parseErr as Error);\n }\n });\n\n // start processing\n queue.await((err?: Error) => {\n this.processing.remove(setup);\n if (this.done || cancelled) return;\n err ? this.end(err) : this.push(nextEntry);\n });\n }\n\n end(err?: Error) {\n if (this.lock) {\n const lock = this.lock;\n this.lock = null; // Clear before release to prevent re-entrancy\n lock.err = err;\n lock.release();\n }\n // Don't call base end here - Lock.__destroy() handles it\n this.iterator = null;\n }\n}\n"],"names":["BaseIterator","fs","path","Queue","shortHash","tempSuffix","tmpdir","Lock","streamToSource","nextEntry","setPassword","FileSource","SevenZipParser","EntryIterator","next","index","entries","length","getParser","parser","getEntries","SevenZipIterator","end","err","lock","release","iterator","source","options","queue","cancelled","archiveSource","setup","undefined","processing","push","password","defer","cb","stat","statErr","stats","done","open","fd","size","sourceStream","tempPath","join","process","cwd","memoryThreshold","result","Error","parse","parseErr","await","remove"],"mappings":"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"}
|
package/dist/esm/compat.js
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
* os.tmpdir wrapper for Node.js 0.8+
|
|
7
7
|
* - Uses native os.tmpdir on Node 0.10+
|
|
8
8
|
* - Falls back to os-shim on Node 0.8
|
|
9
|
-
*/
|
|
9
|
+
*/ const hasTmpdir = typeof os.tmpdir === 'function';
|
|
10
10
|
export function tmpdir() {
|
|
11
11
|
if (hasTmpdir) {
|
|
12
12
|
return os.tmpdir();
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
const osShim = require('os-shim');
|
|
15
15
|
return osShim.tmpdir();
|
|
16
16
|
}
|
package/dist/esm/compat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\nimport os from 'os';\n\n/**\n * os.tmpdir wrapper for Node.js 0.8+\n * - Uses native os.tmpdir on Node 0.10+\n * - Falls back to os-shim on Node 0.8\n */\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\nimport os from 'os';\n\n/**\n * os.tmpdir wrapper for Node.js 0.8+\n * - Uses native os.tmpdir on Node 0.10+\n * - Falls back to os-shim on Node 0.8\n */\nconst hasTmpdir = typeof os.tmpdir === 'function';\n\nexport function tmpdir(): string {\n if (hasTmpdir) {\n return os.tmpdir();\n }\n const osShim = require('os-shim');\n return osShim.tmpdir();\n}\n"],"names":["os","hasTmpdir","tmpdir","osShim","require"],"mappings":"AAAA;;;CAGC,GACD,OAAOA,QAAQ,KAAK;AAEpB;;;;CAIC,GACD,MAAMC,YAAY,OAAOD,GAAGE,MAAM,KAAK;AAEvC,OAAO,SAASA;IACd,IAAID,WAAW;QACb,OAAOD,GAAGE,MAAM;IAClB;IACA,MAAMC,SAASC,QAAQ;IACvB,OAAOD,OAAOD,MAAM;AACtB"}
|
|
@@ -7,7 +7,7 @@ import oo from 'on-one';
|
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import { BufferSource, FileSource } from '../sevenz/SevenZipParser.js';
|
|
9
9
|
// Default memory threshold: 100 MB
|
|
10
|
-
|
|
10
|
+
const DEFAULT_MEMORY_THRESHOLD = 100 * 1024 * 1024;
|
|
11
11
|
/**
|
|
12
12
|
* Convert a stream to an ArchiveSource (BufferSource for small files, FileSource for large)
|
|
13
13
|
*
|
|
@@ -16,16 +16,16 @@ var DEFAULT_MEMORY_THRESHOLD = 100 * 1024 * 1024;
|
|
|
16
16
|
* 2. If threshold exceeded, write all buffered data to temp file and continue streaming
|
|
17
17
|
* 3. When done, return BufferSource for memory buffer or FileSource for temp file
|
|
18
18
|
*/ export default function streamToSource(stream, options, callback) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
const threshold = options.memoryThreshold !== undefined ? options.memoryThreshold : DEFAULT_MEMORY_THRESHOLD;
|
|
20
|
+
const tempPath = options.tempPath;
|
|
21
|
+
let chunks = [];
|
|
22
|
+
let totalSize = 0;
|
|
23
|
+
let writeStream = null;
|
|
24
|
+
let useTempFile = false;
|
|
25
|
+
const end = once(callback);
|
|
26
26
|
function onData(chunk) {
|
|
27
27
|
// Convert string chunks to Buffer
|
|
28
|
-
|
|
28
|
+
const buf = typeof chunk === 'string' ? bufferFrom(chunk) : chunk;
|
|
29
29
|
totalSize += buf.length;
|
|
30
30
|
if (!useTempFile && totalSize <= threshold) {
|
|
31
31
|
// Still under threshold - buffer in memory
|
|
@@ -40,7 +40,7 @@ var DEFAULT_MEMORY_THRESHOLD = 100 * 1024 * 1024;
|
|
|
40
40
|
mkdirp.sync(path.dirname(tempPath));
|
|
41
41
|
writeStream = fs.createWriteStream(tempPath);
|
|
42
42
|
// Write all buffered chunks to temp file
|
|
43
|
-
for(
|
|
43
|
+
for(let i = 0; i < chunks.length; i++){
|
|
44
44
|
writeStream.write(chunks[i]);
|
|
45
45
|
}
|
|
46
46
|
chunks = []; // Allow GC
|
|
@@ -56,7 +56,7 @@ var DEFAULT_MEMORY_THRESHOLD = 100 * 1024 * 1024;
|
|
|
56
56
|
function onEnd() {
|
|
57
57
|
if (useTempFile && writeStream && tempPath) {
|
|
58
58
|
// Close write stream, then open for reading
|
|
59
|
-
|
|
59
|
+
const filePath = tempPath; // Capture for closure
|
|
60
60
|
writeStream.end(()=>{
|
|
61
61
|
fs.open(filePath, 'r', (err, fd)=>{
|
|
62
62
|
if (err) return end(err);
|
|
@@ -75,7 +75,7 @@ var DEFAULT_MEMORY_THRESHOLD = 100 * 1024 * 1024;
|
|
|
75
75
|
});
|
|
76
76
|
} else {
|
|
77
77
|
// Use memory buffer
|
|
78
|
-
|
|
78
|
+
const fullBuffer = Buffer.concat(chunks);
|
|
79
79
|
end(null, {
|
|
80
80
|
source: new BufferSource(fullBuffer)
|
|
81
81
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lib/streamToSource.ts"],"sourcesContent":["// Hybrid stream handling: buffers in memory up to threshold, then switches to temp file\nimport once from 'call-once-fn';\nimport { bufferFrom } from 'extract-base-iterator';\nimport fs from 'fs';\nimport mkdirp from 'mkdirp-classic';\nimport oo from 'on-one';\nimport path from 'path';\nimport { BufferSource, FileSource } from '../sevenz/SevenZipParser.ts';\n\n// Default memory threshold: 100 MB\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lib/streamToSource.ts"],"sourcesContent":["// Hybrid stream handling: buffers in memory up to threshold, then switches to temp file\nimport once from 'call-once-fn';\nimport { bufferFrom } from 'extract-base-iterator';\nimport fs from 'fs';\nimport mkdirp from 'mkdirp-classic';\nimport oo from 'on-one';\nimport path from 'path';\nimport { BufferSource, FileSource } from '../sevenz/SevenZipParser.ts';\n\n// Default memory threshold: 100 MB\nconst DEFAULT_MEMORY_THRESHOLD = 100 * 1024 * 1024;\n\nexport interface StreamToSourceOptions {\n memoryThreshold?: number;\n tempPath?: string;\n}\n\nexport interface SourceResult {\n source: BufferSource | FileSource;\n fd?: number; // Set if FileSource was used (caller must close)\n tempPath?: string; // Set if temp file was created (caller must clean up)\n}\n\nexport type Callback = (error?: Error, result?: SourceResult) => void;\n\n/**\n * Convert a stream to an ArchiveSource (BufferSource for small files, FileSource for large)\n *\n * Algorithm:\n * 1. Buffer stream data in memory up to memoryThreshold\n * 2. If threshold exceeded, write all buffered data to temp file and continue streaming\n * 3. When done, return BufferSource for memory buffer or FileSource for temp file\n */\nexport default function streamToSource(stream: NodeJS.ReadableStream, options: StreamToSourceOptions, callback: Callback): void {\n const threshold = options.memoryThreshold !== undefined ? options.memoryThreshold : DEFAULT_MEMORY_THRESHOLD;\n const tempPath = options.tempPath;\n\n let chunks: Buffer[] = [];\n let totalSize = 0;\n let writeStream: fs.WriteStream | null = null;\n let useTempFile = false;\n\n const end = once(callback);\n\n function onData(chunk: Buffer | string): void {\n // Convert string chunks to Buffer\n const buf = typeof chunk === 'string' ? bufferFrom(chunk) : chunk;\n totalSize += buf.length;\n\n if (!useTempFile && totalSize <= threshold) {\n // Still under threshold - buffer in memory\n chunks.push(buf);\n } else if (!useTempFile) {\n // Just exceeded threshold - switch to temp file\n useTempFile = true;\n\n if (!tempPath) {\n end(new Error('memoryThreshold exceeded but no tempPath provided'));\n return;\n }\n\n mkdirp.sync(path.dirname(tempPath));\n writeStream = fs.createWriteStream(tempPath);\n\n // Write all buffered chunks to temp file\n for (let i = 0; i < chunks.length; i++) {\n writeStream.write(chunks[i]);\n }\n chunks = []; // Allow GC\n\n // Write current chunk\n writeStream.write(buf);\n } else {\n // Already using temp file - write directly\n if (writeStream) {\n writeStream.write(buf);\n }\n }\n }\n\n function onEnd(): void {\n if (useTempFile && writeStream && tempPath) {\n // Close write stream, then open for reading\n const filePath = tempPath; // Capture for closure\n writeStream.end(() => {\n fs.open(filePath, 'r', (err, fd) => {\n if (err) return end(err);\n fs.stat(filePath, (statErr, stats) => {\n if (statErr) {\n fs.closeSync(fd);\n return end(statErr);\n }\n end(null, {\n source: new FileSource(fd, stats.size),\n fd: fd,\n tempPath: filePath,\n });\n });\n });\n });\n } else {\n // Use memory buffer\n const fullBuffer = Buffer.concat(chunks);\n end(null, {\n source: new BufferSource(fullBuffer),\n });\n }\n }\n\n function onError(err: Error): void {\n // Clean up if we created a temp file\n if (writeStream) {\n writeStream.end();\n }\n end(err);\n }\n\n stream.on('data', onData);\n oo(stream, ['error'], onError);\n oo(stream, ['end', 'close', 'finish'], onEnd);\n}\n"],"names":["once","bufferFrom","fs","mkdirp","oo","path","BufferSource","FileSource","DEFAULT_MEMORY_THRESHOLD","streamToSource","stream","options","callback","threshold","memoryThreshold","undefined","tempPath","chunks","totalSize","writeStream","useTempFile","end","onData","chunk","buf","length","push","Error","sync","dirname","createWriteStream","i","write","onEnd","filePath","open","err","fd","stat","statErr","stats","closeSync","source","size","fullBuffer","Buffer","concat","onError","on"],"mappings":"AAAA,wFAAwF;AACxF,OAAOA,UAAU,eAAe;AAChC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,OAAOC,QAAQ,KAAK;AACpB,OAAOC,YAAY,iBAAiB;AACpC,OAAOC,QAAQ,SAAS;AACxB,OAAOC,UAAU,OAAO;AACxB,SAASC,YAAY,EAAEC,UAAU,QAAQ,8BAA8B;AAEvE,mCAAmC;AACnC,MAAMC,2BAA2B,MAAM,OAAO;AAe9C;;;;;;;CAOC,GACD,eAAe,SAASC,eAAeC,MAA6B,EAAEC,OAA8B,EAAEC,QAAkB;IACtH,MAAMC,YAAYF,QAAQG,eAAe,KAAKC,YAAYJ,QAAQG,eAAe,GAAGN;IACpF,MAAMQ,WAAWL,QAAQK,QAAQ;IAEjC,IAAIC,SAAmB,EAAE;IACzB,IAAIC,YAAY;IAChB,IAAIC,cAAqC;IACzC,IAAIC,cAAc;IAElB,MAAMC,MAAMrB,KAAKY;IAEjB,SAASU,OAAOC,KAAsB;QACpC,kCAAkC;QAClC,MAAMC,MAAM,OAAOD,UAAU,WAAWtB,WAAWsB,SAASA;QAC5DL,aAAaM,IAAIC,MAAM;QAEvB,IAAI,CAACL,eAAeF,aAAaL,WAAW;YAC1C,2CAA2C;YAC3CI,OAAOS,IAAI,CAACF;QACd,OAAO,IAAI,CAACJ,aAAa;YACvB,gDAAgD;YAChDA,cAAc;YAEd,IAAI,CAACJ,UAAU;gBACbK,IAAI,IAAIM,MAAM;gBACd;YACF;YAEAxB,OAAOyB,IAAI,CAACvB,KAAKwB,OAAO,CAACb;YACzBG,cAAcjB,GAAG4B,iBAAiB,CAACd;YAEnC,yCAAyC;YACzC,IAAK,IAAIe,IAAI,GAAGA,IAAId,OAAOQ,MAAM,EAAEM,IAAK;gBACtCZ,YAAYa,KAAK,CAACf,MAAM,CAACc,EAAE;YAC7B;YACAd,SAAS,EAAE,EAAE,WAAW;YAExB,sBAAsB;YACtBE,YAAYa,KAAK,CAACR;QACpB,OAAO;YACL,2CAA2C;YAC3C,IAAIL,aAAa;gBACfA,YAAYa,KAAK,CAACR;YACpB;QACF;IACF;IAEA,SAASS;QACP,IAAIb,eAAeD,eAAeH,UAAU;YAC1C,4CAA4C;YAC5C,MAAMkB,WAAWlB,UAAU,sBAAsB;YACjDG,YAAYE,GAAG,CAAC;gBACdnB,GAAGiC,IAAI,CAACD,UAAU,KAAK,CAACE,KAAKC;oBAC3B,IAAID,KAAK,OAAOf,IAAIe;oBACpBlC,GAAGoC,IAAI,CAACJ,UAAU,CAACK,SAASC;wBAC1B,IAAID,SAAS;4BACXrC,GAAGuC,SAAS,CAACJ;4BACb,OAAOhB,IAAIkB;wBACb;wBACAlB,IAAI,MAAM;4BACRqB,QAAQ,IAAInC,WAAW8B,IAAIG,MAAMG,IAAI;4BACrCN,IAAIA;4BACJrB,UAAUkB;wBACZ;oBACF;gBACF;YACF;QACF,OAAO;YACL,oBAAoB;YACpB,MAAMU,aAAaC,OAAOC,MAAM,CAAC7B;YACjCI,IAAI,MAAM;gBACRqB,QAAQ,IAAIpC,aAAasC;YAC3B;QACF;IACF;IAEA,SAASG,QAAQX,GAAU;QACzB,qCAAqC;QACrC,IAAIjB,aAAa;YACfA,YAAYE,GAAG;QACjB;QACAA,IAAIe;IACN;IAEA1B,OAAOsC,EAAE,CAAC,QAAQ1B;IAClBlB,GAAGM,QAAQ;QAAC;KAAQ,EAAEqC;IACtB3C,GAAGM,QAAQ;QAAC;QAAO;QAAS;KAAS,EAAEuB;AACzC"}
|