7z-iterator 0.1.4 → 0.1.6
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/sevenz/SevenZipParser.d.cts +4 -1
- package/dist/cjs/sevenz/SevenZipParser.d.ts +4 -1
- package/dist/cjs/sevenz/SevenZipParser.js +45 -7
- package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Bcj2.js +17 -4
- package/dist/cjs/sevenz/codecs/Bcj2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma.js +2 -1
- package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/cjs/sevenz/codecs/Lzma2.d.cts +2 -2
- package/dist/cjs/sevenz/codecs/Lzma2.d.ts +2 -2
- package/dist/cjs/sevenz/codecs/Lzma2.js +30 -6
- package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/cjs/sevenz/codecs/streams.d.cts +7 -1
- package/dist/cjs/sevenz/codecs/streams.d.ts +7 -1
- package/dist/cjs/sevenz/codecs/streams.js +47 -17
- package/dist/cjs/sevenz/codecs/streams.js.map +1 -1
- package/dist/cjs/sevenz/constants.d.cts +1 -0
- package/dist/cjs/sevenz/constants.d.ts +1 -0
- package/dist/cjs/sevenz/constants.js +2 -1
- package/dist/cjs/sevenz/constants.js.map +1 -1
- package/dist/esm/sevenz/SevenZipParser.d.ts +4 -1
- package/dist/esm/sevenz/SevenZipParser.js +45 -7
- package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
- package/dist/esm/sevenz/codecs/Bcj2.js +17 -4
- package/dist/esm/sevenz/codecs/Bcj2.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma.js +2 -1
- package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
- package/dist/esm/sevenz/codecs/Lzma2.d.ts +2 -2
- package/dist/esm/sevenz/codecs/Lzma2.js +31 -7
- package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
- package/dist/esm/sevenz/codecs/streams.d.ts +7 -1
- package/dist/esm/sevenz/codecs/streams.js +53 -17
- package/dist/esm/sevenz/codecs/streams.js.map +1 -1
- package/dist/esm/sevenz/constants.d.ts +1 -0
- package/dist/esm/sevenz/constants.js +2 -1
- package/dist/esm/sevenz/constants.js.map +1 -1
- package/package.json +5 -3
- package/patches/lzma-purejs+0.9.3.patch +196 -0
|
@@ -27,19 +27,53 @@ import { allocBufferUnsafe } from 'extract-base-iterator';
|
|
|
27
27
|
/**
|
|
28
28
|
* Output stream wrapper for lzma-purejs
|
|
29
29
|
* Collects output bytes into Buffer chunks
|
|
30
|
-
|
|
30
|
+
* Uses typed arrays for memory efficiency (1 byte per element instead of 8)
|
|
31
|
+
*
|
|
32
|
+
* Memory optimization: If expectedSize is provided, pre-allocates a single buffer
|
|
33
|
+
* to avoid double-memory during Buffer.concat.
|
|
34
|
+
*
|
|
35
|
+
* @param expectedSize - Optional expected output size for pre-allocation
|
|
36
|
+
*/ export function createOutputStream(expectedSize) {
|
|
37
|
+
// Pre-allocation mode: single buffer, no concat needed
|
|
38
|
+
// Includes bounds checking for safety on older Node.js versions
|
|
39
|
+
if (expectedSize && expectedSize > 0) {
|
|
40
|
+
var buffer = allocBufferUnsafe(expectedSize);
|
|
41
|
+
var bufPos = 0;
|
|
42
|
+
var bufLen = buffer.length;
|
|
43
|
+
return {
|
|
44
|
+
writeByte: (b)=>{
|
|
45
|
+
if (bufPos < bufLen) {
|
|
46
|
+
buffer[bufPos++] = b;
|
|
47
|
+
}
|
|
48
|
+
// Silently ignore overflow (should not happen with correct size)
|
|
49
|
+
},
|
|
50
|
+
write: (buf, bufOffset, len)=>{
|
|
51
|
+
for(var i = 0; i < len && bufPos < bufLen; i++){
|
|
52
|
+
buffer[bufPos++] = buf[bufOffset + i];
|
|
53
|
+
}
|
|
54
|
+
return len;
|
|
55
|
+
},
|
|
56
|
+
flush: ()=>{
|
|
57
|
+
// No-op for pre-allocated buffer
|
|
58
|
+
},
|
|
59
|
+
toBuffer: ()=>{
|
|
60
|
+
// Return only the used portion
|
|
61
|
+
return bufPos < buffer.length ? buffer.slice(0, bufPos) : buffer;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Chunked mode: accumulate in 64KB chunks (fallback for unknown size)
|
|
31
66
|
var chunks = [];
|
|
32
|
-
var
|
|
33
|
-
var
|
|
67
|
+
var CHUNK_SIZE = 65536; // 64KB chunks for better memory efficiency
|
|
68
|
+
var currentChunk = allocBufferUnsafe(CHUNK_SIZE);
|
|
69
|
+
var pos = 0;
|
|
34
70
|
return {
|
|
35
71
|
writeByte: (b)=>{
|
|
36
|
-
currentChunk
|
|
37
|
-
if (
|
|
38
|
-
chunks.push(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
currentChunk = [];
|
|
72
|
+
currentChunk[pos++] = b;
|
|
73
|
+
if (pos >= CHUNK_SIZE) {
|
|
74
|
+
chunks.push(currentChunk);
|
|
75
|
+
currentChunk = allocBufferUnsafe(CHUNK_SIZE);
|
|
76
|
+
pos = 0;
|
|
43
77
|
}
|
|
44
78
|
},
|
|
45
79
|
write: function(buf, bufOffset, len) {
|
|
@@ -49,17 +83,19 @@ import { allocBufferUnsafe } from 'extract-base-iterator';
|
|
|
49
83
|
return len;
|
|
50
84
|
},
|
|
51
85
|
flush: ()=>{
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
chunks.push(finalChunk);
|
|
58
|
-
currentChunk = [];
|
|
86
|
+
if (pos > 0) {
|
|
87
|
+
// Only keep the used portion of the current chunk
|
|
88
|
+
chunks.push(currentChunk.slice(0, pos));
|
|
89
|
+
currentChunk = allocBufferUnsafe(CHUNK_SIZE);
|
|
90
|
+
pos = 0;
|
|
59
91
|
}
|
|
60
92
|
},
|
|
61
93
|
toBuffer: function() {
|
|
62
94
|
this.flush();
|
|
95
|
+
// Optimization: if single chunk, return it directly
|
|
96
|
+
if (chunks.length === 1) {
|
|
97
|
+
return chunks[0];
|
|
98
|
+
}
|
|
63
99
|
return Buffer.concat(chunks);
|
|
64
100
|
}
|
|
65
101
|
};
|
|
@@ -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 var pos = 0;\n var end = Math.min(offset + length, buffer.length);\n var 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 var 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 */\nexport function createOutputStream() {\n
|
|
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 var pos = 0;\n var end = Math.min(offset + length, buffer.length);\n var 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 var 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 var buffer = allocBufferUnsafe(expectedSize);\n var bufPos = 0;\n var 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 (var 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 var chunks: Buffer[] = [];\n var CHUNK_SIZE = 65536; // 64KB chunks for better memory efficiency\n var currentChunk: Buffer = allocBufferUnsafe(CHUNK_SIZE);\n var 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 (var 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":["allocBufferUnsafe","createInputStream","buffer","offset","length","pos","end","Math","min","start","readByte","read","buf","bufOffset","len","bytesRead","createOutputStream","expectedSize","bufPos","bufLen","writeByte","b","write","i","flush","toBuffer","slice","chunks","CHUNK_SIZE","currentChunk","push","Buffer","concat"],"mappings":"AAAA,yDAAyD;AACzD,sEAAsE;AAEtE,SAASA,iBAAiB,QAAQ,wBAAwB;AAE1D;;;CAGC,GACD,OAAO,SAASC,kBAAkBC,MAAc,EAAEC,MAAc,EAAEC,MAAc;IAC9E,IAAIC,MAAM;IACV,IAAIC,MAAMC,KAAKC,GAAG,CAACL,SAASC,QAAQF,OAAOE,MAAM;IACjD,IAAIK,QAAQN;IAEZ,OAAO;QACLO,UAAU;YACR,IAAID,QAAQJ,OAAOC,KAAK,OAAO,CAAC;YAChC,OAAOJ,MAAM,CAACO,QAAQJ,MAAM;QAC9B;QACAM,MAAM,CAACC,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;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASC,mBAAmBC,YAAqB;IACtD,uDAAuD;IACvD,gEAAgE;IAChE,IAAIA,gBAAgBA,eAAe,GAAG;QACpC,IAAIf,SAASF,kBAAkBiB;QAC/B,IAAIC,SAAS;QACb,IAAIC,SAASjB,OAAOE,MAAM;QAE1B,OAAO;YACLgB,WAAW,CAACC;gBACV,IAAIH,SAASC,QAAQ;oBACnBjB,MAAM,CAACgB,SAAS,GAAGG;gBACrB;YACA,iEAAiE;YACnE;YACAC,OAAO,CAACV,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,IAAIyB,SAAmB,EAAE;IACzB,IAAIC,aAAa,OAAO,2CAA2C;IACnE,IAAIC,eAAuB7B,kBAAkB4B;IAC7C,IAAIvB,MAAM;IAEV,OAAO;QACLe,WAAW,CAACC;YACVQ,YAAY,CAACxB,MAAM,GAAGgB;YACtB,IAAIhB,OAAOuB,YAAY;gBACrBD,OAAOG,IAAI,CAACD;gBACZA,eAAe7B,kBAAkB4B;gBACjCvB,MAAM;YACR;QACF;QACAiB,OAAO,SAAUV,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,eAAe7B,kBAAkB4B;gBACjCvB,MAAM;YACR;QACF;QACAoB,UAAU;YACR,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"}
|
|
@@ -126,7 +126,8 @@ export var ErrorCode = {
|
|
|
126
126
|
TRUNCATED_ARCHIVE: 'TRUNCATED_ARCHIVE',
|
|
127
127
|
CORRUPT_HEADER: 'CORRUPT_HEADER',
|
|
128
128
|
ENCRYPTED_ARCHIVE: 'ENCRYPTED_ARCHIVE',
|
|
129
|
-
COMPRESSED_HEADER: 'COMPRESSED_HEADER'
|
|
129
|
+
COMPRESSED_HEADER: 'COMPRESSED_HEADER',
|
|
130
|
+
DECOMPRESSION_FAILED: 'DECOMPRESSION_FAILED'
|
|
130
131
|
};
|
|
131
132
|
/**
|
|
132
133
|
* Create an error with a code property
|
|
@@ -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 var SEVENZ_MAGIC = [0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c];\n\n// Header sizes\nexport var SIGNATURE_HEADER_SIZE = 32;\nexport var START_HEADER_SIZE = 20; // Part of signature header after magic + version\n\n// Property IDs for encoded header\nexport var 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\nexport var CodecId = {\n COPY: [0x00],\n DELTA: [0x03],\n LZMA: [0x03, 0x01, 0x01],\n LZMA2: [0x21],\n BCJ_X86: [0x03, 0x03, 0x01, 0x03],\n BCJ2: [0x03, 0x03, 0x01, 0x1b],\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 var 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 var 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 var 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};\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 var err = new Error(message) as CodedError;\n err.code = code;\n return err;\n}\n"],"names":["SEVENZ_MAGIC","SIGNATURE_HEADER_SIZE","START_HEADER_SIZE","PropertyId","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","CodecId","COPY","DELTA","LZMA","LZMA2","BCJ_X86","BCJ2","DEFLATE","BZIP2","AES","FileAttribute","READONLY","HIDDEN","SYSTEM","DIRECTORY","ARCHIVE","DEVICE","NORMAL","TEMPORARY","SPARSE_FILE","REPARSE_POINT","COMPRESSED","OFFLINE","NOT_CONTENT_INDEXED","ENCRYPTED","UNIX_EXTENSION","UnixMode","DIR","FILE","SYMLINK","RWXRWXRWX","RWXRXRX","RWRR","DEFAULT_DIR","DEFAULT_FILE","ErrorCode","INVALID_SIGNATURE","CRC_MISMATCH","UNSUPPORTED_CODEC","UNSUPPORTED_VERSION","UNSUPPORTED_FEATURE","TRUNCATED_ARCHIVE","CORRUPT_HEADER","ENCRYPTED_ARCHIVE","COMPRESSED_HEADER","createCodedError","message","code","err","Error"],"mappings":"AAAA,sBAAsB;AACtB,wEAAwE;AAExE,mCAAmC;AACnC,OAAO,IAAIA,eAAe;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;CAAK,CAAC;AAE/D,eAAe;AACf,OAAO,IAAIC,wBAAwB,GAAG;AACtC,OAAO,IAAIC,oBAAoB,GAAG,CAAC,iDAAiD;AAEpF,kCAAkC;AAClC,OAAO,IAAIC,aAAa;IACtBC,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,EAAE;AAEF,YAAY;AACZ,oCAAoC;AACpC,OAAO,IAAIC,UAAU;IACnBC,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,MAAM;QAAC;QAAM;QAAM;QAAM;KAAK;IAC9BC,SAAS;QAAC;QAAM;QAAM;KAAK;IAC3BC,OAAO;QAAC;QAAM;QAAM;KAAK;IACzBC,KAAK;QAAC;QAAM;QAAM;QAAM;KAAK;AAC/B,EAAE;AAEF,4DAA4D;AAC5D,OAAO,IAAIC,gBAAgB;IACzBC,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,EAAE;AAEF,oEAAoE;AACpE,OAAO,IAAIC,WAAW;IACpBC,KAAK;IACLC,MAAM;IACNC,SAAS;IACTC,WAAW;IACXC,SAAS;IACTC,MAAM;IACNC,aAAa;IACbC,cAAc;AAChB,EAAE;AAEF,cAAc;AACd,OAAO,IAAIC,YAAY;IACrBC,mBAAmB;IACnBC,cAAc;IACdC,mBAAmB;IACnBC,qBAAqB;IACrBC,qBAAqB;IACrBC,mBAAmB;IACnBC,gBAAgB;IAChBC,mBAAmB;IACnBC,mBAAmB;
|
|
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 var SEVENZ_MAGIC = [0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c];\n\n// Header sizes\nexport var SIGNATURE_HEADER_SIZE = 32;\nexport var START_HEADER_SIZE = 20; // Part of signature header after magic + version\n\n// Property IDs for encoded header\nexport var 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\nexport var CodecId = {\n COPY: [0x00],\n DELTA: [0x03],\n LZMA: [0x03, 0x01, 0x01],\n LZMA2: [0x21],\n BCJ_X86: [0x03, 0x03, 0x01, 0x03],\n BCJ2: [0x03, 0x03, 0x01, 0x1b],\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 var 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 var 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 var 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 var err = new Error(message) as CodedError;\n err.code = code;\n return err;\n}\n"],"names":["SEVENZ_MAGIC","SIGNATURE_HEADER_SIZE","START_HEADER_SIZE","PropertyId","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","CodecId","COPY","DELTA","LZMA","LZMA2","BCJ_X86","BCJ2","DEFLATE","BZIP2","AES","FileAttribute","READONLY","HIDDEN","SYSTEM","DIRECTORY","ARCHIVE","DEVICE","NORMAL","TEMPORARY","SPARSE_FILE","REPARSE_POINT","COMPRESSED","OFFLINE","NOT_CONTENT_INDEXED","ENCRYPTED","UNIX_EXTENSION","UnixMode","DIR","FILE","SYMLINK","RWXRWXRWX","RWXRXRX","RWRR","DEFAULT_DIR","DEFAULT_FILE","ErrorCode","INVALID_SIGNATURE","CRC_MISMATCH","UNSUPPORTED_CODEC","UNSUPPORTED_VERSION","UNSUPPORTED_FEATURE","TRUNCATED_ARCHIVE","CORRUPT_HEADER","ENCRYPTED_ARCHIVE","COMPRESSED_HEADER","DECOMPRESSION_FAILED","createCodedError","message","code","err","Error"],"mappings":"AAAA,sBAAsB;AACtB,wEAAwE;AAExE,mCAAmC;AACnC,OAAO,IAAIA,eAAe;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;CAAK,CAAC;AAE/D,eAAe;AACf,OAAO,IAAIC,wBAAwB,GAAG;AACtC,OAAO,IAAIC,oBAAoB,GAAG,CAAC,iDAAiD;AAEpF,kCAAkC;AAClC,OAAO,IAAIC,aAAa;IACtBC,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,EAAE;AAEF,YAAY;AACZ,oCAAoC;AACpC,OAAO,IAAIC,UAAU;IACnBC,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,MAAM;QAAC;QAAM;QAAM;QAAM;KAAK;IAC9BC,SAAS;QAAC;QAAM;QAAM;KAAK;IAC3BC,OAAO;QAAC;QAAM;QAAM;KAAK;IACzBC,KAAK;QAAC;QAAM;QAAM;QAAM;KAAK;AAC/B,EAAE;AAEF,4DAA4D;AAC5D,OAAO,IAAIC,gBAAgB;IACzBC,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,EAAE;AAEF,oEAAoE;AACpE,OAAO,IAAIC,WAAW;IACpBC,KAAK;IACLC,MAAM;IACNC,SAAS;IACTC,WAAW;IACXC,SAAS;IACTC,MAAM;IACNC,aAAa;IACbC,cAAc;AAChB,EAAE;AAEF,cAAc;AACd,OAAO,IAAIC,YAAY;IACrBC,mBAAmB;IACnBC,cAAc;IACdC,mBAAmB;IACnBC,qBAAqB;IACrBC,qBAAqB;IACrBC,mBAAmB;IACnBC,gBAAgB;IAChBC,mBAAmB;IACnBC,mBAAmB;IACnBC,sBAAsB;AACxB,EAAE;AAOF;;CAEC,GACD,OAAO,SAASC,iBAAiBC,OAAe,EAAEC,IAAY;IAC5D,IAAIC,MAAM,IAAIC,MAAMH;IACpBE,IAAID,IAAI,GAAGA;IACX,OAAOC;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "7z-iterator",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Extract contents from 7z archives using an iterator API. Pure JavaScript, works on Node.js 0.8+",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"extract",
|
|
@@ -34,7 +34,8 @@
|
|
|
34
34
|
"main": "dist/cjs/index.js",
|
|
35
35
|
"types": "dist/cjs/index.d.ts",
|
|
36
36
|
"files": [
|
|
37
|
-
"dist"
|
|
37
|
+
"dist",
|
|
38
|
+
"patches"
|
|
38
39
|
],
|
|
39
40
|
"scripts": {
|
|
40
41
|
"build": "tsds build",
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"on-one": "*",
|
|
55
56
|
"os-shim": "*",
|
|
56
57
|
"pako": "^1.0.11",
|
|
58
|
+
"patch-package": "*",
|
|
57
59
|
"queue-cb": "*",
|
|
58
60
|
"readable-stream": "^2.3.7",
|
|
59
61
|
"rimraf2": "*",
|
|
@@ -66,12 +68,12 @@
|
|
|
66
68
|
"@types/mocha": "*",
|
|
67
69
|
"@types/node": "*",
|
|
68
70
|
"array-find": "^1.0.0",
|
|
71
|
+
"end-with": "^1.0.2",
|
|
69
72
|
"fs-iterator": "*",
|
|
70
73
|
"fs-stats-spys": "*",
|
|
71
74
|
"get-remote": "^2.2.1",
|
|
72
75
|
"lzma-native": "^8.0.6",
|
|
73
76
|
"node-version-use": "*",
|
|
74
|
-
"patch-package": "^8.0.1",
|
|
75
77
|
"pinkie-promise": "*",
|
|
76
78
|
"ts-dev-stack": "*"
|
|
77
79
|
},
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
diff --git a/node_modules/lzma-purejs/lib/LZMA/Decoder.js b/node_modules/lzma-purejs/lib/LZMA/Decoder.js
|
|
2
|
+
index b82db68..3a124a1 100644
|
|
3
|
+
--- a/node_modules/lzma-purejs/lib/LZMA/Decoder.js
|
|
4
|
+
+++ b/node_modules/lzma-purejs/lib/LZMA/Decoder.js
|
|
5
|
+
@@ -163,11 +163,26 @@ var Decoder = function(){
|
|
6
|
+
this._dictionarySizeCheck = -1;
|
|
7
|
+
this._posStateMask = 0;
|
|
8
|
+
|
|
9
|
+
+ // LZMA2 state preservation: these were local vars in code(), now instance props
|
|
10
|
+
+ this._state = 0;
|
|
11
|
+
+ this._rep0 = 0;
|
|
12
|
+
+ this._rep1 = 0;
|
|
13
|
+
+ this._rep2 = 0;
|
|
14
|
+
+ this._rep3 = 0;
|
|
15
|
+
+ this._prevByte = 0;
|
|
16
|
+
+ this._nowPos64 = 0; // Cumulative position for solid mode
|
|
17
|
+
+ this._solid = false; // When true, don't reset state in code()
|
|
18
|
+
+
|
|
19
|
+
for (i=0; i<Base.kNumLenToPosStates; i++) {
|
|
20
|
+
this._posSlotDecoder[i] = new RangeCoder.BitTreeDecoder(Base.kNumPosSlotBits);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
+// LZMA2 support: Set solid mode to preserve state across chunks
|
|
25
|
+
+Decoder.prototype.setSolid = function(solid) {
|
|
26
|
+
+ this._solid = solid;
|
|
27
|
+
+};
|
|
28
|
+
+
|
|
29
|
+
Decoder.prototype.setDictionarySize = function(dictionarySize){
|
|
30
|
+
if (dictionarySize < 0){
|
|
31
|
+
return false;
|
|
32
|
+
@@ -224,100 +239,120 @@ Decoder.prototype.init = function(){
|
|
33
|
+
Decoder.prototype.code = function(inStream, outStream, outSize){
|
|
34
|
+
// note that nowPos64 is actually only 53 bits long; that sets a limit
|
|
35
|
+
// on the amount of data we can decode
|
|
36
|
+
- var state, rep0 = 0, rep1 = 0, rep2 = 0, rep3 = 0, nowPos64 = 0, prevByte = 0,
|
|
37
|
+
- posState, decoder2, len, distance, posSlot, numDirectBits;
|
|
38
|
+
+ // LZMA2 patch: use instance properties for state vars instead of locals
|
|
39
|
+
+ // chunkPos tracks bytes in current chunk (for loop termination)
|
|
40
|
+
+ // cumPos tracks cumulative bytes across chunks (for posState, literal context, rep0 validation)
|
|
41
|
+
+ var chunkPos = 0, posState, decoder2, len, distance, posSlot, numDirectBits;
|
|
42
|
+
+ var cumPos;
|
|
43
|
+
|
|
44
|
+
this._rangeDecoder.setStream(inStream);
|
|
45
|
+
this._outWindow.setStream(outStream);
|
|
46
|
+
|
|
47
|
+
- this.init();
|
|
48
|
+
+ // LZMA2 patch: only init when not in solid mode (state preservation)
|
|
49
|
+
+ if (!this._solid) {
|
|
50
|
+
+ this.init();
|
|
51
|
+
+ this._state = Base.stateInit();
|
|
52
|
+
+ this._rep0 = 0;
|
|
53
|
+
+ this._rep1 = 0;
|
|
54
|
+
+ this._rep2 = 0;
|
|
55
|
+
+ this._rep3 = 0;
|
|
56
|
+
+ this._prevByte = 0;
|
|
57
|
+
+ this._nowPos64 = 0;
|
|
58
|
+
+ } else {
|
|
59
|
+
+ // In solid mode, preserve dictionary (pass true), just init the range decoder
|
|
60
|
+
+ this._outWindow.init(true);
|
|
61
|
+
+ this._rangeDecoder.init();
|
|
62
|
+
+ }
|
|
63
|
+
+ cumPos = this._nowPos64;
|
|
64
|
+
|
|
65
|
+
- state = Base.stateInit();
|
|
66
|
+
- while(outSize < 0 || nowPos64 < outSize){
|
|
67
|
+
- posState = nowPos64 & this._posStateMask;
|
|
68
|
+
+ while(outSize < 0 || chunkPos < outSize){
|
|
69
|
+
+ posState = cumPos & this._posStateMask;
|
|
70
|
+
|
|
71
|
+
- if (this._rangeDecoder.decodeBit(this._isMatchDecoders, (state << Base.kNumPosStatesBitsMax) + posState) === 0){
|
|
72
|
+
- decoder2 = this._literalDecoder.getDecoder(nowPos64, prevByte);
|
|
73
|
+
+ if (this._rangeDecoder.decodeBit(this._isMatchDecoders, (this._state << Base.kNumPosStatesBitsMax) + posState) === 0){
|
|
74
|
+
+ decoder2 = this._literalDecoder.getDecoder(cumPos, this._prevByte);
|
|
75
|
+
|
|
76
|
+
- if (!Base.stateIsCharState(state)){
|
|
77
|
+
- prevByte = decoder2.decodeWithMatchByte(this._rangeDecoder, this._outWindow.getByte(rep0) );
|
|
78
|
+
+ if (!Base.stateIsCharState(this._state)){
|
|
79
|
+
+ this._prevByte = decoder2.decodeWithMatchByte(this._rangeDecoder, this._outWindow.getByte(this._rep0) );
|
|
80
|
+
}else{
|
|
81
|
+
- prevByte = decoder2.decodeNormal(this._rangeDecoder);
|
|
82
|
+
+ this._prevByte = decoder2.decodeNormal(this._rangeDecoder);
|
|
83
|
+
}
|
|
84
|
+
- this._outWindow.putByte(prevByte);
|
|
85
|
+
- state = Base.stateUpdateChar(state);
|
|
86
|
+
- nowPos64++;
|
|
87
|
+
+ this._outWindow.putByte(this._prevByte);
|
|
88
|
+
+ this._state = Base.stateUpdateChar(this._state);
|
|
89
|
+
+ chunkPos++; cumPos++;
|
|
90
|
+
|
|
91
|
+
}else{
|
|
92
|
+
|
|
93
|
+
- if (this._rangeDecoder.decodeBit(this._isRepDecoders, state) === 1){
|
|
94
|
+
+ if (this._rangeDecoder.decodeBit(this._isRepDecoders, this._state) === 1){
|
|
95
|
+
len = 0;
|
|
96
|
+
- if (this._rangeDecoder.decodeBit(this._isRepG0Decoders, state) === 0){
|
|
97
|
+
- if (this._rangeDecoder.decodeBit(this._isRep0LongDecoders, (state << Base.kNumPosStatesBitsMax) + posState) === 0){
|
|
98
|
+
- state = Base.stateUpdateShortRep(state);
|
|
99
|
+
+ if (this._rangeDecoder.decodeBit(this._isRepG0Decoders, this._state) === 0){
|
|
100
|
+
+ if (this._rangeDecoder.decodeBit(this._isRep0LongDecoders, (this._state << Base.kNumPosStatesBitsMax) + posState) === 0){
|
|
101
|
+
+ this._state = Base.stateUpdateShortRep(this._state);
|
|
102
|
+
len = 1;
|
|
103
|
+
}
|
|
104
|
+
}else{
|
|
105
|
+
- if (this._rangeDecoder.decodeBit(this._isRepG1Decoders, state) === 0){
|
|
106
|
+
- distance = rep1;
|
|
107
|
+
+ if (this._rangeDecoder.decodeBit(this._isRepG1Decoders, this._state) === 0){
|
|
108
|
+
+ distance = this._rep1;
|
|
109
|
+
}else{
|
|
110
|
+
- if (this._rangeDecoder.decodeBit(this._isRepG2Decoders, state) === 0){
|
|
111
|
+
- distance = rep2;
|
|
112
|
+
+ if (this._rangeDecoder.decodeBit(this._isRepG2Decoders, this._state) === 0){
|
|
113
|
+
+ distance = this._rep2;
|
|
114
|
+
}else{
|
|
115
|
+
- distance = rep3;
|
|
116
|
+
- rep3 = rep2;
|
|
117
|
+
+ distance = this._rep3;
|
|
118
|
+
+ this._rep3 = this._rep2;
|
|
119
|
+
}
|
|
120
|
+
- rep2 = rep1;
|
|
121
|
+
+ this._rep2 = this._rep1;
|
|
122
|
+
}
|
|
123
|
+
- rep1 = rep0;
|
|
124
|
+
- rep0 = distance;
|
|
125
|
+
+ this._rep1 = this._rep0;
|
|
126
|
+
+ this._rep0 = distance;
|
|
127
|
+
}
|
|
128
|
+
if (len === 0){
|
|
129
|
+
len = Base.kMatchMinLen + this._repLenDecoder.decode(this._rangeDecoder, posState);
|
|
130
|
+
- state = Base.stateUpdateRep(state);
|
|
131
|
+
+ this._state = Base.stateUpdateRep(this._state);
|
|
132
|
+
}
|
|
133
|
+
}else{
|
|
134
|
+
- rep3 = rep2;
|
|
135
|
+
- rep2 = rep1;
|
|
136
|
+
- rep1 = rep0;
|
|
137
|
+
+ this._rep3 = this._rep2;
|
|
138
|
+
+ this._rep2 = this._rep1;
|
|
139
|
+
+ this._rep1 = this._rep0;
|
|
140
|
+
|
|
141
|
+
len = Base.kMatchMinLen + this._lenDecoder.decode(this._rangeDecoder, posState);
|
|
142
|
+
- state = Base.stateUpdateMatch(state);
|
|
143
|
+
+ this._state = Base.stateUpdateMatch(this._state);
|
|
144
|
+
|
|
145
|
+
posSlot = this._posSlotDecoder[Base.getLenToPosState(len)].decode(this._rangeDecoder);
|
|
146
|
+
if (posSlot >= Base.kStartPosModelIndex){
|
|
147
|
+
|
|
148
|
+
numDirectBits = (posSlot >> 1) - 1;
|
|
149
|
+
- rep0 = (2 | (posSlot & 1) ) << numDirectBits;
|
|
150
|
+
+ this._rep0 = (2 | (posSlot & 1) ) << numDirectBits;
|
|
151
|
+
|
|
152
|
+
if (posSlot < Base.kEndPosModelIndex){
|
|
153
|
+
- rep0 += RangeCoder.BitTreeDecoder.reverseDecode(this._posDecoders,
|
|
154
|
+
- rep0 - posSlot - 1, this._rangeDecoder, numDirectBits);
|
|
155
|
+
+ this._rep0 += RangeCoder.BitTreeDecoder.reverseDecode(this._posDecoders,
|
|
156
|
+
+ this._rep0 - posSlot - 1, this._rangeDecoder, numDirectBits);
|
|
157
|
+
}else{
|
|
158
|
+
- rep0 += this._rangeDecoder.decodeDirectBits(numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits;
|
|
159
|
+
- rep0 += this._posAlignDecoder.reverseDecode(this._rangeDecoder);
|
|
160
|
+
- if (rep0 < 0){
|
|
161
|
+
- if (rep0 === -1){
|
|
162
|
+
+ this._rep0 += this._rangeDecoder.decodeDirectBits(numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits;
|
|
163
|
+
+ this._rep0 += this._posAlignDecoder.reverseDecode(this._rangeDecoder);
|
|
164
|
+
+ if (this._rep0 < 0){
|
|
165
|
+
+ if (this._rep0 === -1){
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}else{
|
|
172
|
+
- rep0 = posSlot;
|
|
173
|
+
+ this._rep0 = posSlot;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
- if (rep0 >= nowPos64 || rep0 >= this._dictionarySizeCheck){
|
|
178
|
+
+ if (this._rep0 >= cumPos || this._rep0 >= this._dictionarySizeCheck){
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
- this._outWindow.copyBlock(rep0, len);
|
|
183
|
+
- nowPos64 += len;
|
|
184
|
+
- prevByte = this._outWindow.getByte(0);
|
|
185
|
+
+ this._outWindow.copyBlock(this._rep0, len);
|
|
186
|
+
+ chunkPos += len; cumPos += len;
|
|
187
|
+
+ this._prevByte = this._outWindow.getByte(0);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
+ // LZMA2: save cumulative position for next solid chunk
|
|
192
|
+
+ this._nowPos64 = cumPos;
|
|
193
|
+
+
|
|
194
|
+
this._outWindow.flush();
|
|
195
|
+
this._outWindow.releaseStream();
|
|
196
|
+
this._rangeDecoder.releaseStream();
|