7z-iterator 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/cjs/FileEntry.d.cts +12 -4
  2. package/dist/cjs/FileEntry.d.ts +12 -4
  3. package/dist/cjs/FileEntry.js +52 -24
  4. package/dist/cjs/FileEntry.js.map +1 -1
  5. package/dist/cjs/SevenZipIterator.d.cts +25 -2
  6. package/dist/cjs/SevenZipIterator.d.ts +25 -2
  7. package/dist/cjs/SevenZipIterator.js +68 -21
  8. package/dist/cjs/SevenZipIterator.js.map +1 -1
  9. package/dist/cjs/compat.js +1 -8
  10. package/dist/cjs/compat.js.map +1 -1
  11. package/dist/cjs/index.d.cts +0 -2
  12. package/dist/cjs/index.d.ts +0 -2
  13. package/dist/cjs/index.js +3 -12
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/lib/streamToSource.d.cts +8 -11
  16. package/dist/cjs/lib/streamToSource.d.ts +8 -11
  17. package/dist/cjs/lib/streamToSource.js +21 -67
  18. package/dist/cjs/lib/streamToSource.js.map +1 -1
  19. package/dist/cjs/lzma/Lzma2ChunkParser.d.cts +73 -0
  20. package/dist/cjs/lzma/Lzma2ChunkParser.d.ts +73 -0
  21. package/dist/cjs/lzma/Lzma2ChunkParser.js +148 -0
  22. package/dist/cjs/lzma/Lzma2ChunkParser.js.map +1 -0
  23. package/dist/cjs/lzma/index.d.cts +13 -0
  24. package/dist/cjs/lzma/index.d.ts +13 -0
  25. package/dist/cjs/lzma/index.js +63 -0
  26. package/dist/cjs/lzma/index.js.map +1 -0
  27. package/dist/cjs/lzma/stream/transforms.d.cts +38 -0
  28. package/dist/cjs/lzma/stream/transforms.d.ts +38 -0
  29. package/dist/cjs/lzma/stream/transforms.js +149 -0
  30. package/dist/cjs/lzma/stream/transforms.js.map +1 -0
  31. package/dist/cjs/lzma/sync/Lzma2Decoder.d.cts +30 -0
  32. package/dist/cjs/lzma/sync/Lzma2Decoder.d.ts +30 -0
  33. package/dist/cjs/lzma/sync/Lzma2Decoder.js +135 -0
  34. package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +1 -0
  35. package/dist/cjs/lzma/sync/LzmaDecoder.d.cts +82 -0
  36. package/dist/cjs/lzma/sync/LzmaDecoder.d.ts +82 -0
  37. package/dist/cjs/lzma/sync/LzmaDecoder.js +440 -0
  38. package/dist/cjs/lzma/sync/LzmaDecoder.js.map +1 -0
  39. package/dist/cjs/lzma/sync/RangeDecoder.d.cts +69 -0
  40. package/dist/cjs/lzma/sync/RangeDecoder.d.ts +69 -0
  41. package/dist/cjs/lzma/sync/RangeDecoder.js +162 -0
  42. package/dist/cjs/lzma/sync/RangeDecoder.js.map +1 -0
  43. package/dist/cjs/lzma/types.d.cts +110 -0
  44. package/dist/cjs/lzma/types.d.ts +110 -0
  45. package/dist/cjs/lzma/types.js +264 -0
  46. package/dist/cjs/lzma/types.js.map +1 -0
  47. package/dist/cjs/nextEntry.js +24 -26
  48. package/dist/cjs/nextEntry.js.map +1 -1
  49. package/dist/cjs/sevenz/ArchiveSource.d.cts +16 -0
  50. package/dist/cjs/sevenz/ArchiveSource.d.ts +16 -0
  51. package/dist/cjs/sevenz/ArchiveSource.js +69 -0
  52. package/dist/cjs/sevenz/ArchiveSource.js.map +1 -1
  53. package/dist/cjs/sevenz/FolderStreamSplitter.d.cts +101 -0
  54. package/dist/cjs/sevenz/FolderStreamSplitter.d.ts +101 -0
  55. package/dist/cjs/sevenz/FolderStreamSplitter.js +229 -0
  56. package/dist/cjs/sevenz/FolderStreamSplitter.js.map +1 -0
  57. package/dist/cjs/sevenz/SevenZipParser.d.cts +71 -10
  58. package/dist/cjs/sevenz/SevenZipParser.d.ts +71 -10
  59. package/dist/cjs/sevenz/SevenZipParser.js +574 -203
  60. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
  61. package/dist/cjs/sevenz/codecs/BZip2.js +2 -1
  62. package/dist/cjs/sevenz/codecs/BZip2.js.map +1 -1
  63. package/dist/cjs/sevenz/codecs/Bcj.d.cts +5 -4
  64. package/dist/cjs/sevenz/codecs/Bcj.d.ts +5 -4
  65. package/dist/cjs/sevenz/codecs/Bcj.js +102 -8
  66. package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -1
  67. package/dist/cjs/sevenz/codecs/BcjArm.d.cts +5 -4
  68. package/dist/cjs/sevenz/codecs/BcjArm.d.ts +5 -4
  69. package/dist/cjs/sevenz/codecs/BcjArm.js +51 -9
  70. package/dist/cjs/sevenz/codecs/BcjArm.js.map +1 -1
  71. package/dist/cjs/sevenz/codecs/Copy.d.cts +2 -4
  72. package/dist/cjs/sevenz/codecs/Copy.d.ts +2 -4
  73. package/dist/cjs/sevenz/codecs/Copy.js +2 -15
  74. package/dist/cjs/sevenz/codecs/Copy.js.map +1 -1
  75. package/dist/cjs/sevenz/codecs/Deflate.d.cts +6 -4
  76. package/dist/cjs/sevenz/codecs/Deflate.d.ts +6 -4
  77. package/dist/cjs/sevenz/codecs/Deflate.js +4 -9
  78. package/dist/cjs/sevenz/codecs/Deflate.js.map +1 -1
  79. package/dist/cjs/sevenz/codecs/Delta.d.cts +5 -4
  80. package/dist/cjs/sevenz/codecs/Delta.d.ts +5 -4
  81. package/dist/cjs/sevenz/codecs/Delta.js +29 -10
  82. package/dist/cjs/sevenz/codecs/Delta.js.map +1 -1
  83. package/dist/cjs/sevenz/codecs/Lzma.d.cts +5 -2
  84. package/dist/cjs/sevenz/codecs/Lzma.d.ts +5 -2
  85. package/dist/cjs/sevenz/codecs/Lzma.js +13 -28
  86. package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
  87. package/dist/cjs/sevenz/codecs/Lzma2.d.cts +9 -3
  88. package/dist/cjs/sevenz/codecs/Lzma2.d.ts +9 -3
  89. package/dist/cjs/sevenz/codecs/Lzma2.js +17 -198
  90. package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
  91. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +2 -2
  92. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
  93. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +2 -15
  94. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  95. package/dist/cjs/types.d.cts +2 -16
  96. package/dist/cjs/types.d.ts +2 -16
  97. package/dist/cjs/types.js.map +1 -1
  98. package/dist/esm/FileEntry.d.ts +12 -4
  99. package/dist/esm/FileEntry.js +52 -26
  100. package/dist/esm/FileEntry.js.map +1 -1
  101. package/dist/esm/SevenZipIterator.d.ts +25 -2
  102. package/dist/esm/SevenZipIterator.js +69 -22
  103. package/dist/esm/SevenZipIterator.js.map +1 -1
  104. package/dist/esm/compat.js +1 -8
  105. package/dist/esm/compat.js.map +1 -1
  106. package/dist/esm/index.d.ts +0 -2
  107. package/dist/esm/index.js +0 -1
  108. package/dist/esm/index.js.map +1 -1
  109. package/dist/esm/lib/streamToSource.d.ts +8 -11
  110. package/dist/esm/lib/streamToSource.js +22 -68
  111. package/dist/esm/lib/streamToSource.js.map +1 -1
  112. package/dist/esm/lzma/Lzma2ChunkParser.d.ts +73 -0
  113. package/dist/esm/lzma/Lzma2ChunkParser.js +137 -0
  114. package/dist/esm/lzma/Lzma2ChunkParser.js.map +1 -0
  115. package/dist/esm/lzma/index.d.ts +13 -0
  116. package/dist/esm/lzma/index.js +15 -0
  117. package/dist/esm/lzma/index.js.map +1 -0
  118. package/dist/esm/lzma/stream/transforms.d.ts +38 -0
  119. package/dist/esm/lzma/stream/transforms.js +150 -0
  120. package/dist/esm/lzma/stream/transforms.js.map +1 -0
  121. package/dist/esm/lzma/sync/Lzma2Decoder.d.ts +30 -0
  122. package/dist/esm/lzma/sync/Lzma2Decoder.js +115 -0
  123. package/dist/esm/lzma/sync/Lzma2Decoder.js.map +1 -0
  124. package/dist/esm/lzma/sync/LzmaDecoder.d.ts +82 -0
  125. package/dist/esm/lzma/sync/LzmaDecoder.js +403 -0
  126. package/dist/esm/lzma/sync/LzmaDecoder.js.map +1 -0
  127. package/dist/esm/lzma/sync/RangeDecoder.d.ts +69 -0
  128. package/dist/esm/lzma/sync/RangeDecoder.js +132 -0
  129. package/dist/esm/lzma/sync/RangeDecoder.js.map +1 -0
  130. package/dist/esm/lzma/types.d.ts +110 -0
  131. package/dist/esm/lzma/types.js +154 -0
  132. package/dist/esm/lzma/types.js.map +1 -0
  133. package/dist/esm/nextEntry.js +24 -26
  134. package/dist/esm/nextEntry.js.map +1 -1
  135. package/dist/esm/sevenz/ArchiveSource.d.ts +16 -0
  136. package/dist/esm/sevenz/ArchiveSource.js +70 -1
  137. package/dist/esm/sevenz/ArchiveSource.js.map +1 -1
  138. package/dist/esm/sevenz/FolderStreamSplitter.d.ts +101 -0
  139. package/dist/esm/sevenz/FolderStreamSplitter.js +207 -0
  140. package/dist/esm/sevenz/FolderStreamSplitter.js.map +1 -0
  141. package/dist/esm/sevenz/SevenZipParser.d.ts +71 -10
  142. package/dist/esm/sevenz/SevenZipParser.js +414 -198
  143. package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
  144. package/dist/esm/sevenz/codecs/BZip2.js +2 -1
  145. package/dist/esm/sevenz/codecs/BZip2.js.map +1 -1
  146. package/dist/esm/sevenz/codecs/Bcj.d.ts +5 -4
  147. package/dist/esm/sevenz/codecs/Bcj.js +106 -6
  148. package/dist/esm/sevenz/codecs/Bcj.js.map +1 -1
  149. package/dist/esm/sevenz/codecs/BcjArm.d.ts +5 -4
  150. package/dist/esm/sevenz/codecs/BcjArm.js +55 -7
  151. package/dist/esm/sevenz/codecs/BcjArm.js.map +1 -1
  152. package/dist/esm/sevenz/codecs/Copy.d.ts +2 -4
  153. package/dist/esm/sevenz/codecs/Copy.js +1 -9
  154. package/dist/esm/sevenz/codecs/Copy.js.map +1 -1
  155. package/dist/esm/sevenz/codecs/Deflate.d.ts +6 -4
  156. package/dist/esm/sevenz/codecs/Deflate.js +9 -7
  157. package/dist/esm/sevenz/codecs/Deflate.js.map +1 -1
  158. package/dist/esm/sevenz/codecs/Delta.d.ts +5 -4
  159. package/dist/esm/sevenz/codecs/Delta.js +33 -8
  160. package/dist/esm/sevenz/codecs/Delta.js.map +1 -1
  161. package/dist/esm/sevenz/codecs/Lzma.d.ts +5 -2
  162. package/dist/esm/sevenz/codecs/Lzma.js +17 -24
  163. package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
  164. package/dist/esm/sevenz/codecs/Lzma2.d.ts +9 -3
  165. package/dist/esm/sevenz/codecs/Lzma2.js +15 -196
  166. package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
  167. package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
  168. package/dist/esm/sevenz/codecs/createBufferingDecoder.js +1 -9
  169. package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  170. package/dist/esm/types.d.ts +2 -16
  171. package/dist/esm/types.js.map +1 -1
  172. package/package.json +3 -3
  173. package/assets/lzma-purejs/LICENSE +0 -11
  174. package/assets/lzma-purejs/index.js +0 -19
  175. package/assets/lzma-purejs/lib/LZ/OutWindow.js +0 -78
  176. package/assets/lzma-purejs/lib/LZ.js +0 -6
  177. package/assets/lzma-purejs/lib/LZMA/Base.js +0 -48
  178. package/assets/lzma-purejs/lib/LZMA/Decoder.js +0 -328
  179. package/assets/lzma-purejs/lib/LZMA.js +0 -6
  180. package/assets/lzma-purejs/lib/RangeCoder/BitTreeDecoder.js +0 -41
  181. package/assets/lzma-purejs/lib/RangeCoder/Decoder.js +0 -58
  182. package/assets/lzma-purejs/lib/RangeCoder/Encoder.js +0 -106
  183. package/assets/lzma-purejs/lib/RangeCoder.js +0 -10
  184. package/assets/lzma-purejs/lib/Stream.js +0 -41
  185. package/assets/lzma-purejs/lib/Util.js +0 -114
  186. package/assets/lzma-purejs/lib/makeBuffer.js +0 -25
  187. package/assets/lzma-purejs/package-lock.json +0 -13
  188. package/assets/lzma-purejs/package.json +0 -8
@@ -0,0 +1,403 @@
1
+ /**
2
+ * Synchronous LZMA1 Decoder
3
+ *
4
+ * Decodes LZMA1 compressed data from a buffer.
5
+ * All operations are synchronous.
6
+ */ import { allocBufferUnsafe } from 'extract-base-iterator';
7
+ import { getLenToPosState, initBitModels, kEndPosModelIndex, kMatchMinLen, kNumAlignBits, kNumFullDistances, kNumLenToPosStates, kNumLitContextBitsMax, kNumPosSlotBits, kNumPosStatesBitsMax, kNumStates, kStartPosModelIndex, parseProperties, stateIsCharState, stateUpdateChar, stateUpdateMatch, stateUpdateRep, stateUpdateShortRep } from '../types.js';
8
+ import { BitTreeDecoder, RangeDecoder, reverseDecodeFromArray } from './RangeDecoder.js';
9
+ /**
10
+ * Length decoder for match/rep lengths
11
+ */ let LenDecoder = class LenDecoder {
12
+ create(numPosStates) {
13
+ for(; this.numPosStates < numPosStates; this.numPosStates++){
14
+ this.lowCoder[this.numPosStates] = new BitTreeDecoder(3);
15
+ this.midCoder[this.numPosStates] = new BitTreeDecoder(3);
16
+ }
17
+ }
18
+ init() {
19
+ initBitModels(this.choice);
20
+ for(let i = this.numPosStates - 1; i >= 0; i--){
21
+ this.lowCoder[i].init();
22
+ this.midCoder[i].init();
23
+ }
24
+ this.highCoder.init();
25
+ }
26
+ decode(rangeDecoder, posState) {
27
+ if (rangeDecoder.decodeBit(this.choice, 0) === 0) {
28
+ return this.lowCoder[posState].decode(rangeDecoder);
29
+ }
30
+ if (rangeDecoder.decodeBit(this.choice, 1) === 0) {
31
+ return 8 + this.midCoder[posState].decode(rangeDecoder);
32
+ }
33
+ return 16 + this.highCoder.decode(rangeDecoder);
34
+ }
35
+ constructor(){
36
+ this.choice = initBitModels(null, 2);
37
+ this.lowCoder = [];
38
+ this.midCoder = [];
39
+ this.highCoder = new BitTreeDecoder(8);
40
+ this.numPosStates = 0;
41
+ }
42
+ };
43
+ /**
44
+ * Single literal decoder (decodes one byte)
45
+ */ let LiteralDecoder2 = class LiteralDecoder2 {
46
+ init() {
47
+ initBitModels(this.decoders);
48
+ }
49
+ decodeNormal(rangeDecoder) {
50
+ let symbol = 1;
51
+ do {
52
+ symbol = symbol << 1 | rangeDecoder.decodeBit(this.decoders, symbol);
53
+ }while (symbol < 0x100)
54
+ return symbol & 0xff;
55
+ }
56
+ decodeWithMatchByte(rangeDecoder, matchByte) {
57
+ let symbol = 1;
58
+ do {
59
+ const matchBit = matchByte >> 7 & 1;
60
+ matchByte <<= 1;
61
+ const bit = rangeDecoder.decodeBit(this.decoders, (1 + matchBit << 8) + symbol);
62
+ symbol = symbol << 1 | bit;
63
+ if (matchBit !== bit) {
64
+ while(symbol < 0x100){
65
+ symbol = symbol << 1 | rangeDecoder.decodeBit(this.decoders, symbol);
66
+ }
67
+ break;
68
+ }
69
+ }while (symbol < 0x100)
70
+ return symbol & 0xff;
71
+ }
72
+ constructor(){
73
+ this.decoders = initBitModels(null, 0x300);
74
+ }
75
+ };
76
+ /**
77
+ * Literal decoder (array of single decoders)
78
+ */ let LiteralDecoder = class LiteralDecoder {
79
+ create(numPosBits, numPrevBits) {
80
+ if (this.coders.length > 0 && this.numPrevBits === numPrevBits && this.numPosBits === numPosBits) {
81
+ return;
82
+ }
83
+ this.numPosBits = numPosBits;
84
+ this.posMask = (1 << numPosBits) - 1;
85
+ this.numPrevBits = numPrevBits;
86
+ this.coders = [];
87
+ }
88
+ init() {
89
+ for(let i = 0; i < this.coders.length; i++){
90
+ if (this.coders[i]) {
91
+ var _this_coders_i;
92
+ (_this_coders_i = this.coders[i]) === null || _this_coders_i === void 0 ? void 0 : _this_coders_i.init();
93
+ }
94
+ }
95
+ }
96
+ getDecoder(pos, prevByte) {
97
+ const index = ((pos & this.posMask) << this.numPrevBits) + ((prevByte & 0xff) >>> 8 - this.numPrevBits);
98
+ let decoder = this.coders[index];
99
+ if (!decoder) {
100
+ decoder = new LiteralDecoder2();
101
+ this.coders[index] = decoder;
102
+ }
103
+ return decoder;
104
+ }
105
+ constructor(){
106
+ this.numPosBits = 0;
107
+ this.numPrevBits = 0;
108
+ this.posMask = 0;
109
+ this.coders = [];
110
+ }
111
+ };
112
+ /**
113
+ * Output window (sliding dictionary)
114
+ */ let OutWindow = class OutWindow {
115
+ create(windowSize) {
116
+ if (!this.buffer || this.windowSize !== windowSize) {
117
+ this.buffer = allocBufferUnsafe(windowSize);
118
+ }
119
+ this.windowSize = windowSize;
120
+ this.pos = 0;
121
+ }
122
+ init(solid) {
123
+ if (!solid) {
124
+ this.pos = 0;
125
+ }
126
+ }
127
+ putByte(b) {
128
+ this.buffer[this.pos++] = b;
129
+ if (this.pos >= this.windowSize) {
130
+ this.pos = 0;
131
+ }
132
+ }
133
+ getByte(distance) {
134
+ let pos = this.pos - distance - 1;
135
+ if (pos < 0) {
136
+ pos += this.windowSize;
137
+ }
138
+ return this.buffer[pos];
139
+ }
140
+ copyBlock(distance, len) {
141
+ let pos = this.pos - distance - 1;
142
+ if (pos < 0) {
143
+ pos += this.windowSize;
144
+ }
145
+ for(let i = 0; i < len; i++){
146
+ if (pos >= this.windowSize) {
147
+ pos = 0;
148
+ }
149
+ this.putByte(this.buffer[pos++]);
150
+ }
151
+ }
152
+ /**
153
+ * Copy decoded data to output buffer
154
+ */ copyTo(output, outputOffset, count) {
155
+ const srcPos = this.pos - count;
156
+ if (srcPos < 0) {
157
+ // Wrap around case - data spans end and beginning of buffer
158
+ const firstPart = -srcPos;
159
+ this.buffer.copy(output, outputOffset, this.windowSize + srcPos, this.windowSize);
160
+ this.buffer.copy(output, outputOffset + firstPart, 0, count - firstPart);
161
+ } else {
162
+ this.buffer.copy(output, outputOffset, srcPos, srcPos + count);
163
+ }
164
+ }
165
+ constructor(){
166
+ this.buffer = allocBufferUnsafe(0); // Replaced by create() before use
167
+ this.windowSize = 0;
168
+ this.pos = 0;
169
+ }
170
+ };
171
+ /**
172
+ * Synchronous LZMA1 decoder
173
+ */ export class LzmaDecoder {
174
+ /**
175
+ * Set dictionary size
176
+ */ setDictionarySize(dictionarySize) {
177
+ if (dictionarySize < 0) return false;
178
+ if (this.dictionarySize !== dictionarySize) {
179
+ this.dictionarySize = dictionarySize;
180
+ this.dictionarySizeCheck = Math.max(dictionarySize, 1);
181
+ this.outWindow.create(Math.max(this.dictionarySizeCheck, 1 << 12));
182
+ }
183
+ return true;
184
+ }
185
+ /**
186
+ * Set lc, lp, pb properties
187
+ */ setLcLpPb(lc, lp, pb) {
188
+ if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {
189
+ return false;
190
+ }
191
+ const numPosStates = 1 << pb;
192
+ this.literalDecoder.create(lp, lc);
193
+ this.lenDecoder.create(numPosStates);
194
+ this.repLenDecoder.create(numPosStates);
195
+ this.posStateMask = numPosStates - 1;
196
+ return true;
197
+ }
198
+ /**
199
+ * Set decoder properties from 5-byte buffer
200
+ */ setDecoderProperties(properties) {
201
+ const props = parseProperties(properties);
202
+ if (!this.setLcLpPb(props.lc, props.lp, props.pb)) return false;
203
+ return this.setDictionarySize(props.dictionarySize);
204
+ }
205
+ /**
206
+ * Initialize probability tables
207
+ */ initProbabilities() {
208
+ initBitModels(this.isMatchDecoders);
209
+ initBitModels(this.isRepDecoders);
210
+ initBitModels(this.isRepG0Decoders);
211
+ initBitModels(this.isRepG1Decoders);
212
+ initBitModels(this.isRepG2Decoders);
213
+ initBitModels(this.isRep0LongDecoders);
214
+ initBitModels(this.posDecoders);
215
+ this.literalDecoder.init();
216
+ for(let i = kNumLenToPosStates - 1; i >= 0; i--){
217
+ this.posSlotDecoder[i].init();
218
+ }
219
+ this.lenDecoder.init();
220
+ this.repLenDecoder.init();
221
+ this.posAlignDecoder.init();
222
+ }
223
+ /**
224
+ * Reset probabilities only (for LZMA2 state reset)
225
+ */ resetProbabilities() {
226
+ this.initProbabilities();
227
+ this.state = 0;
228
+ this.rep0 = 0;
229
+ this.rep1 = 0;
230
+ this.rep2 = 0;
231
+ this.rep3 = 0;
232
+ }
233
+ /**
234
+ * Reset dictionary position (for LZMA2 dictionary reset)
235
+ */ resetDictionary() {
236
+ this.outWindow.init(false);
237
+ this.totalPos = 0;
238
+ }
239
+ /**
240
+ * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)
241
+ * This updates the sliding window so subsequent LZMA chunks can reference this data.
242
+ */ feedUncompressed(data) {
243
+ for(let i = 0; i < data.length; i++){
244
+ this.outWindow.putByte(data[i]);
245
+ }
246
+ this.totalPos += data.length;
247
+ if (data.length > 0) {
248
+ this.prevByte = data[data.length - 1];
249
+ }
250
+ }
251
+ /**
252
+ * Decode LZMA data
253
+ * @param input - Compressed input buffer
254
+ * @param inputOffset - Offset into input buffer
255
+ * @param outSize - Expected output size
256
+ * @param solid - If true, preserve state from previous decode
257
+ * @returns Decompressed data
258
+ */ decode(input, inputOffset, outSize, solid = false) {
259
+ this.rangeDecoder.setInput(input, inputOffset);
260
+ if (!solid) {
261
+ this.outWindow.init(false);
262
+ this.initProbabilities();
263
+ this.state = 0;
264
+ this.rep0 = 0;
265
+ this.rep1 = 0;
266
+ this.rep2 = 0;
267
+ this.rep3 = 0;
268
+ this.prevByte = 0;
269
+ this.totalPos = 0;
270
+ } else {
271
+ // Solid mode: preserve dictionary state but reinitialize range decoder
272
+ this.outWindow.init(true);
273
+ }
274
+ const output = allocBufferUnsafe(outSize);
275
+ let outPos = 0;
276
+ let cumPos = this.totalPos;
277
+ while(outPos < outSize){
278
+ const posState = cumPos & this.posStateMask;
279
+ if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {
280
+ // Literal
281
+ const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);
282
+ if (!stateIsCharState(this.state)) {
283
+ this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));
284
+ } else {
285
+ this.prevByte = decoder2.decodeNormal(this.rangeDecoder);
286
+ }
287
+ this.outWindow.putByte(this.prevByte);
288
+ output[outPos++] = this.prevByte;
289
+ this.state = stateUpdateChar(this.state);
290
+ cumPos++;
291
+ } else {
292
+ // Match or rep
293
+ let len;
294
+ if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {
295
+ // Rep match
296
+ len = 0;
297
+ if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {
298
+ if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {
299
+ this.state = stateUpdateShortRep(this.state);
300
+ len = 1;
301
+ }
302
+ } else {
303
+ let distance;
304
+ if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {
305
+ distance = this.rep1;
306
+ } else {
307
+ if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {
308
+ distance = this.rep2;
309
+ } else {
310
+ distance = this.rep3;
311
+ this.rep3 = this.rep2;
312
+ }
313
+ this.rep2 = this.rep1;
314
+ }
315
+ this.rep1 = this.rep0;
316
+ this.rep0 = distance;
317
+ }
318
+ if (len === 0) {
319
+ len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);
320
+ this.state = stateUpdateRep(this.state);
321
+ }
322
+ } else {
323
+ // Normal match
324
+ this.rep3 = this.rep2;
325
+ this.rep2 = this.rep1;
326
+ this.rep1 = this.rep0;
327
+ len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);
328
+ this.state = stateUpdateMatch(this.state);
329
+ const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);
330
+ if (posSlot >= kStartPosModelIndex) {
331
+ const numDirectBits = (posSlot >> 1) - 1;
332
+ this.rep0 = (2 | posSlot & 1) << numDirectBits;
333
+ if (posSlot < kEndPosModelIndex) {
334
+ this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);
335
+ } else {
336
+ this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;
337
+ this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);
338
+ if (this.rep0 < 0) {
339
+ if (this.rep0 === -1) break; // End marker
340
+ throw new Error('LZMA: Invalid distance');
341
+ }
342
+ }
343
+ } else {
344
+ this.rep0 = posSlot;
345
+ }
346
+ }
347
+ if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {
348
+ throw new Error('LZMA: Invalid distance');
349
+ }
350
+ // Copy match bytes
351
+ for(let i = 0; i < len; i++){
352
+ const b = this.outWindow.getByte(this.rep0);
353
+ this.outWindow.putByte(b);
354
+ output[outPos++] = b;
355
+ }
356
+ cumPos += len;
357
+ this.prevByte = this.outWindow.getByte(0);
358
+ }
359
+ }
360
+ this.totalPos = cumPos;
361
+ return output;
362
+ }
363
+ constructor(){
364
+ this.outWindow = new OutWindow();
365
+ this.rangeDecoder = new RangeDecoder();
366
+ this.isMatchDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);
367
+ this.isRepDecoders = initBitModels(null, kNumStates);
368
+ this.isRepG0Decoders = initBitModels(null, kNumStates);
369
+ this.isRepG1Decoders = initBitModels(null, kNumStates);
370
+ this.isRepG2Decoders = initBitModels(null, kNumStates);
371
+ this.isRep0LongDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);
372
+ this.posSlotDecoder = [];
373
+ this.posDecoders = initBitModels(null, kNumFullDistances - kEndPosModelIndex);
374
+ this.posAlignDecoder = new BitTreeDecoder(kNumAlignBits);
375
+ this.lenDecoder = new LenDecoder();
376
+ this.repLenDecoder = new LenDecoder();
377
+ this.literalDecoder = new LiteralDecoder();
378
+ for(let i = 0; i < kNumLenToPosStates; i++){
379
+ this.posSlotDecoder[i] = new BitTreeDecoder(kNumPosSlotBits);
380
+ }
381
+ this.dictionarySize = -1;
382
+ this.dictionarySizeCheck = -1;
383
+ this.posStateMask = 0;
384
+ this.state = 0;
385
+ this.rep0 = 0;
386
+ this.rep1 = 0;
387
+ this.rep2 = 0;
388
+ this.rep3 = 0;
389
+ this.prevByte = 0;
390
+ this.totalPos = 0;
391
+ }
392
+ }
393
+ /**
394
+ * Decode LZMA1 data synchronously
395
+ * @param input - Compressed data (without 5-byte properties header)
396
+ * @param properties - 5-byte LZMA properties
397
+ * @param outSize - Expected output size
398
+ * @returns Decompressed data
399
+ */ export function decodeLzma(input, properties, outSize) {
400
+ const decoder = new LzmaDecoder();
401
+ decoder.setDecoderProperties(properties);
402
+ return decoder.decode(input, 0, outSize, false);
403
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lzma/sync/LzmaDecoder.ts"],"sourcesContent":["/**\n * Synchronous LZMA1 Decoder\n *\n * Decodes LZMA1 compressed data from a buffer.\n * All operations are synchronous.\n */\n\nimport { allocBufferUnsafe } from 'extract-base-iterator';\nimport {\n getLenToPosState,\n initBitModels,\n kEndPosModelIndex,\n kMatchMinLen,\n kNumAlignBits,\n kNumFullDistances,\n kNumLenToPosStates,\n kNumLitContextBitsMax,\n kNumPosSlotBits,\n kNumPosStatesBitsMax,\n kNumStates,\n kStartPosModelIndex,\n parseProperties,\n stateIsCharState,\n stateUpdateChar,\n stateUpdateMatch,\n stateUpdateRep,\n stateUpdateShortRep,\n} from '../types.ts';\nimport { BitTreeDecoder, RangeDecoder, reverseDecodeFromArray } from './RangeDecoder.ts';\n\n/**\n * Length decoder for match/rep lengths\n */\nclass LenDecoder {\n private choice: Uint16Array;\n private lowCoder: BitTreeDecoder[];\n private midCoder: BitTreeDecoder[];\n private highCoder: BitTreeDecoder;\n private numPosStates: number;\n\n constructor() {\n this.choice = initBitModels(null, 2);\n this.lowCoder = [];\n this.midCoder = [];\n this.highCoder = new BitTreeDecoder(8);\n this.numPosStates = 0;\n }\n\n create(numPosStates: number): void {\n for (; this.numPosStates < numPosStates; this.numPosStates++) {\n this.lowCoder[this.numPosStates] = new BitTreeDecoder(3);\n this.midCoder[this.numPosStates] = new BitTreeDecoder(3);\n }\n }\n\n init(): void {\n initBitModels(this.choice);\n for (let i = this.numPosStates - 1; i >= 0; i--) {\n this.lowCoder[i].init();\n this.midCoder[i].init();\n }\n this.highCoder.init();\n }\n\n decode(rangeDecoder: RangeDecoder, posState: number): number {\n if (rangeDecoder.decodeBit(this.choice, 0) === 0) {\n return this.lowCoder[posState].decode(rangeDecoder);\n }\n if (rangeDecoder.decodeBit(this.choice, 1) === 0) {\n return 8 + this.midCoder[posState].decode(rangeDecoder);\n }\n return 16 + this.highCoder.decode(rangeDecoder);\n }\n}\n\n/**\n * Single literal decoder (decodes one byte)\n */\nclass LiteralDecoder2 {\n private decoders: Uint16Array;\n\n constructor() {\n this.decoders = initBitModels(null, 0x300);\n }\n\n init(): void {\n initBitModels(this.decoders);\n }\n\n decodeNormal(rangeDecoder: RangeDecoder): number {\n let symbol = 1;\n do {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n\n decodeWithMatchByte(rangeDecoder: RangeDecoder, matchByte: number): number {\n let symbol = 1;\n do {\n const matchBit = (matchByte >> 7) & 1;\n matchByte <<= 1;\n const bit = rangeDecoder.decodeBit(this.decoders, ((1 + matchBit) << 8) + symbol);\n symbol = (symbol << 1) | bit;\n if (matchBit !== bit) {\n while (symbol < 0x100) {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n }\n break;\n }\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n}\n\n/**\n * Literal decoder (array of single decoders)\n */\nclass LiteralDecoder {\n private numPosBits: number;\n private numPrevBits: number;\n private posMask: number;\n private coders: (LiteralDecoder2 | undefined)[];\n\n constructor() {\n this.numPosBits = 0;\n this.numPrevBits = 0;\n this.posMask = 0;\n this.coders = [];\n }\n\n create(numPosBits: number, numPrevBits: number): void {\n if (this.coders.length > 0 && this.numPrevBits === numPrevBits && this.numPosBits === numPosBits) {\n return;\n }\n this.numPosBits = numPosBits;\n this.posMask = (1 << numPosBits) - 1;\n this.numPrevBits = numPrevBits;\n this.coders = [];\n }\n\n init(): void {\n for (let i = 0; i < this.coders.length; i++) {\n if (this.coders[i]) {\n this.coders[i]?.init();\n }\n }\n }\n\n getDecoder(pos: number, prevByte: number): LiteralDecoder2 {\n const index = ((pos & this.posMask) << this.numPrevBits) + ((prevByte & 0xff) >>> (8 - this.numPrevBits));\n let decoder = this.coders[index];\n if (!decoder) {\n decoder = new LiteralDecoder2();\n this.coders[index] = decoder;\n }\n return decoder;\n }\n}\n\n/**\n * Output window (sliding dictionary)\n */\nclass OutWindow {\n private buffer: Buffer;\n private windowSize: number;\n private pos: number;\n\n constructor() {\n this.buffer = allocBufferUnsafe(0); // Replaced by create() before use\n this.windowSize = 0;\n this.pos = 0;\n }\n\n create(windowSize: number): void {\n if (!this.buffer || this.windowSize !== windowSize) {\n this.buffer = allocBufferUnsafe(windowSize);\n }\n this.windowSize = windowSize;\n this.pos = 0;\n }\n\n init(solid: boolean): void {\n if (!solid) {\n this.pos = 0;\n }\n }\n\n putByte(b: number): void {\n this.buffer[this.pos++] = b;\n if (this.pos >= this.windowSize) {\n this.pos = 0;\n }\n }\n\n getByte(distance: number): number {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n return this.buffer[pos];\n }\n\n copyBlock(distance: number, len: number): void {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n for (let i = 0; i < len; i++) {\n if (pos >= this.windowSize) {\n pos = 0;\n }\n this.putByte(this.buffer[pos++]);\n }\n }\n\n /**\n * Copy decoded data to output buffer\n */\n copyTo(output: Buffer, outputOffset: number, count: number): void {\n const srcPos = this.pos - count;\n if (srcPos < 0) {\n // Wrap around case - data spans end and beginning of buffer\n const firstPart = -srcPos;\n this.buffer.copy(output, outputOffset, this.windowSize + srcPos, this.windowSize);\n this.buffer.copy(output, outputOffset + firstPart, 0, count - firstPart);\n } else {\n this.buffer.copy(output, outputOffset, srcPos, srcPos + count);\n }\n }\n}\n\n/**\n * Synchronous LZMA1 decoder\n */\nexport class LzmaDecoder {\n private outWindow: OutWindow;\n private rangeDecoder: RangeDecoder;\n\n // Probability models\n private isMatchDecoders: Uint16Array;\n private isRepDecoders: Uint16Array;\n private isRepG0Decoders: Uint16Array;\n private isRepG1Decoders: Uint16Array;\n private isRepG2Decoders: Uint16Array;\n private isRep0LongDecoders: Uint16Array;\n private posSlotDecoder: BitTreeDecoder[];\n private posDecoders: Uint16Array;\n private posAlignDecoder: BitTreeDecoder;\n private lenDecoder: LenDecoder;\n private repLenDecoder: LenDecoder;\n private literalDecoder: LiteralDecoder;\n\n // Properties\n private dictionarySize: number;\n private dictionarySizeCheck: number;\n private posStateMask: number;\n\n // State (preserved across solid calls)\n private state: number;\n private rep0: number;\n private rep1: number;\n private rep2: number;\n private rep3: number;\n private prevByte: number;\n private totalPos: number;\n\n constructor() {\n this.outWindow = new OutWindow();\n this.rangeDecoder = new RangeDecoder();\n\n this.isMatchDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.isRepDecoders = initBitModels(null, kNumStates);\n this.isRepG0Decoders = initBitModels(null, kNumStates);\n this.isRepG1Decoders = initBitModels(null, kNumStates);\n this.isRepG2Decoders = initBitModels(null, kNumStates);\n this.isRep0LongDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.posSlotDecoder = [];\n this.posDecoders = initBitModels(null, kNumFullDistances - kEndPosModelIndex);\n this.posAlignDecoder = new BitTreeDecoder(kNumAlignBits);\n this.lenDecoder = new LenDecoder();\n this.repLenDecoder = new LenDecoder();\n this.literalDecoder = new LiteralDecoder();\n\n for (let i = 0; i < kNumLenToPosStates; i++) {\n this.posSlotDecoder[i] = new BitTreeDecoder(kNumPosSlotBits);\n }\n\n this.dictionarySize = -1;\n this.dictionarySizeCheck = -1;\n this.posStateMask = 0;\n\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n }\n\n /**\n * Set dictionary size\n */\n setDictionarySize(dictionarySize: number): boolean {\n if (dictionarySize < 0) return false;\n if (this.dictionarySize !== dictionarySize) {\n this.dictionarySize = dictionarySize;\n this.dictionarySizeCheck = Math.max(dictionarySize, 1);\n this.outWindow.create(Math.max(this.dictionarySizeCheck, 1 << 12));\n }\n return true;\n }\n\n /**\n * Set lc, lp, pb properties\n */\n setLcLpPb(lc: number, lp: number, pb: number): boolean {\n if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {\n return false;\n }\n const numPosStates = 1 << pb;\n this.literalDecoder.create(lp, lc);\n this.lenDecoder.create(numPosStates);\n this.repLenDecoder.create(numPosStates);\n this.posStateMask = numPosStates - 1;\n return true;\n }\n\n /**\n * Set decoder properties from 5-byte buffer\n */\n setDecoderProperties(properties: Buffer | Uint8Array): boolean {\n const props = parseProperties(properties);\n if (!this.setLcLpPb(props.lc, props.lp, props.pb)) return false;\n return this.setDictionarySize(props.dictionarySize);\n }\n\n /**\n * Initialize probability tables\n */\n private initProbabilities(): void {\n initBitModels(this.isMatchDecoders);\n initBitModels(this.isRepDecoders);\n initBitModels(this.isRepG0Decoders);\n initBitModels(this.isRepG1Decoders);\n initBitModels(this.isRepG2Decoders);\n initBitModels(this.isRep0LongDecoders);\n initBitModels(this.posDecoders);\n this.literalDecoder.init();\n for (let i = kNumLenToPosStates - 1; i >= 0; i--) {\n this.posSlotDecoder[i].init();\n }\n this.lenDecoder.init();\n this.repLenDecoder.init();\n this.posAlignDecoder.init();\n }\n\n /**\n * Reset probabilities only (for LZMA2 state reset)\n */\n resetProbabilities(): void {\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n }\n\n /**\n * Reset dictionary position (for LZMA2 dictionary reset)\n */\n resetDictionary(): void {\n this.outWindow.init(false);\n this.totalPos = 0;\n }\n\n /**\n * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)\n * This updates the sliding window so subsequent LZMA chunks can reference this data.\n */\n feedUncompressed(data: Buffer): void {\n for (let i = 0; i < data.length; i++) {\n this.outWindow.putByte(data[i]);\n }\n this.totalPos += data.length;\n if (data.length > 0) {\n this.prevByte = data[data.length - 1];\n }\n }\n\n /**\n * Decode LZMA data\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Decompressed data\n */\n decode(input: Buffer, inputOffset: number, outSize: number, solid = false): Buffer {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n // Solid mode: preserve dictionary state but reinitialize range decoder\n this.outWindow.init(true);\n }\n\n const output = allocBufferUnsafe(outSize);\n let outPos = 0;\n let cumPos = this.totalPos;\n\n while (outPos < outSize) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n output[outPos++] = this.prevByte;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break; // End marker\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n output[outPos++] = b;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return output;\n }\n}\n\n/**\n * Decode LZMA1 data synchronously\n * @param input - Compressed data (without 5-byte properties header)\n * @param properties - 5-byte LZMA properties\n * @param outSize - Expected output size\n * @returns Decompressed data\n */\nexport function decodeLzma(input: Buffer, properties: Buffer | Uint8Array, outSize: number): Buffer {\n const decoder = new LzmaDecoder();\n decoder.setDecoderProperties(properties);\n return decoder.decode(input, 0, outSize, false);\n}\n"],"names":["allocBufferUnsafe","getLenToPosState","initBitModels","kEndPosModelIndex","kMatchMinLen","kNumAlignBits","kNumFullDistances","kNumLenToPosStates","kNumLitContextBitsMax","kNumPosSlotBits","kNumPosStatesBitsMax","kNumStates","kStartPosModelIndex","parseProperties","stateIsCharState","stateUpdateChar","stateUpdateMatch","stateUpdateRep","stateUpdateShortRep","BitTreeDecoder","RangeDecoder","reverseDecodeFromArray","LenDecoder","create","numPosStates","lowCoder","midCoder","init","choice","i","highCoder","decode","rangeDecoder","posState","decodeBit","LiteralDecoder2","decoders","decodeNormal","symbol","decodeWithMatchByte","matchByte","matchBit","bit","LiteralDecoder","numPosBits","numPrevBits","coders","length","posMask","getDecoder","pos","prevByte","index","decoder","OutWindow","windowSize","buffer","solid","putByte","b","getByte","distance","copyBlock","len","copyTo","output","outputOffset","count","srcPos","firstPart","copy","LzmaDecoder","setDictionarySize","dictionarySize","dictionarySizeCheck","Math","max","outWindow","setLcLpPb","lc","lp","pb","literalDecoder","lenDecoder","repLenDecoder","posStateMask","setDecoderProperties","properties","props","initProbabilities","isMatchDecoders","isRepDecoders","isRepG0Decoders","isRepG1Decoders","isRepG2Decoders","isRep0LongDecoders","posDecoders","posSlotDecoder","posAlignDecoder","resetProbabilities","state","rep0","rep1","rep2","rep3","resetDictionary","totalPos","feedUncompressed","data","input","inputOffset","outSize","setInput","outPos","cumPos","decoder2","posSlot","numDirectBits","decodeDirectBits","reverseDecode","Error","decodeLzma"],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Synchronous Range Decoder for LZMA
3
+ *
4
+ * Decodes arithmetic-coded bits from a buffer.
5
+ * All operations are synchronous - for streaming use the async version.
6
+ */
7
+ /**
8
+ * Range decoder for synchronous buffer-based LZMA decoding
9
+ */
10
+ export declare class RangeDecoder {
11
+ private input;
12
+ private pos;
13
+ private code;
14
+ private range;
15
+ constructor();
16
+ /**
17
+ * Set input buffer and initialize decoder state
18
+ */
19
+ setInput(input: Buffer, offset?: number): void;
20
+ /**
21
+ * Initialize range decoder (reads first 5 bytes)
22
+ */
23
+ private init;
24
+ /**
25
+ * Get current position in input buffer
26
+ */
27
+ getPosition(): number;
28
+ /**
29
+ * Normalize range if needed (read more bytes)
30
+ */
31
+ private normalize;
32
+ /**
33
+ * Decode a single bit using probability model
34
+ * @param probs - Probability array
35
+ * @param index - Index into probability array
36
+ * @returns Decoded bit (0 or 1)
37
+ */
38
+ decodeBit(probs: Uint16Array, index: number): number;
39
+ /**
40
+ * Decode direct bits (not probability-based)
41
+ * @param numTotalBits - Number of bits to decode
42
+ * @returns Decoded value
43
+ */
44
+ decodeDirectBits(numTotalBits: number): number;
45
+ }
46
+ /**
47
+ * Bit tree decoder for multi-bit symbols
48
+ */
49
+ export declare class BitTreeDecoder {
50
+ private numBitLevels;
51
+ private models;
52
+ constructor(numBitLevels: number);
53
+ /**
54
+ * Initialize probability models
55
+ */
56
+ init(): void;
57
+ /**
58
+ * Decode a symbol (forward bit order)
59
+ */
60
+ decode(rangeDecoder: RangeDecoder): number;
61
+ /**
62
+ * Decode a symbol (reverse bit order)
63
+ */
64
+ reverseDecode(rangeDecoder: RangeDecoder): number;
65
+ }
66
+ /**
67
+ * Static reverse decode from external probability array
68
+ */
69
+ export declare function reverseDecodeFromArray(models: Uint16Array, startIndex: number, rangeDecoder: RangeDecoder, numBitLevels: number): number;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Synchronous Range Decoder for LZMA
3
+ *
4
+ * Decodes arithmetic-coded bits from a buffer.
5
+ * All operations are synchronous - for streaming use the async version.
6
+ */ import { allocBuffer } from 'extract-base-iterator';
7
+ /**
8
+ * Range decoder for synchronous buffer-based LZMA decoding
9
+ */ export class RangeDecoder {
10
+ /**
11
+ * Set input buffer and initialize decoder state
12
+ */ setInput(input, offset = 0) {
13
+ this.input = input;
14
+ this.pos = offset;
15
+ this.init();
16
+ }
17
+ /**
18
+ * Initialize range decoder (reads first 5 bytes)
19
+ */ init() {
20
+ this.code = 0;
21
+ this.range = -1; // 0xFFFFFFFF as signed int
22
+ // First byte is ignored (should be 0)
23
+ this.pos++;
24
+ // Read 4 bytes into code
25
+ for(let i = 0; i < 4; i++){
26
+ this.code = this.code << 8 | this.input[this.pos++];
27
+ }
28
+ }
29
+ /**
30
+ * Get current position in input buffer
31
+ */ getPosition() {
32
+ return this.pos;
33
+ }
34
+ /**
35
+ * Normalize range if needed (read more bytes)
36
+ */ normalize() {
37
+ if ((this.range & 0xff000000) === 0) {
38
+ this.code = this.code << 8 | this.input[this.pos++];
39
+ this.range <<= 8;
40
+ }
41
+ }
42
+ /**
43
+ * Decode a single bit using probability model
44
+ * @param probs - Probability array
45
+ * @param index - Index into probability array
46
+ * @returns Decoded bit (0 or 1)
47
+ */ decodeBit(probs, index) {
48
+ const prob = probs[index];
49
+ const newBound = (this.range >>> 11) * prob;
50
+ if ((this.code ^ 0x80000000) < (newBound ^ 0x80000000)) {
51
+ this.range = newBound;
52
+ probs[index] += 2048 - prob >>> 5;
53
+ this.normalize();
54
+ return 0;
55
+ }
56
+ this.range -= newBound;
57
+ this.code -= newBound;
58
+ probs[index] -= prob >>> 5;
59
+ this.normalize();
60
+ return 1;
61
+ }
62
+ /**
63
+ * Decode direct bits (not probability-based)
64
+ * @param numTotalBits - Number of bits to decode
65
+ * @returns Decoded value
66
+ */ decodeDirectBits(numTotalBits) {
67
+ let result = 0;
68
+ for(let i = numTotalBits; i > 0; i--){
69
+ this.range >>>= 1;
70
+ const t = this.code - this.range >>> 31;
71
+ this.code -= this.range & t - 1;
72
+ result = result << 1 | 1 - t;
73
+ this.normalize();
74
+ }
75
+ return result;
76
+ }
77
+ constructor(){
78
+ this.input = allocBuffer(0); // Replaced by setInput() before use
79
+ this.pos = 0;
80
+ this.code = 0;
81
+ this.range = 0;
82
+ }
83
+ }
84
+ /**
85
+ * Bit tree decoder for multi-bit symbols
86
+ */ export class BitTreeDecoder {
87
+ /**
88
+ * Initialize probability models
89
+ */ init() {
90
+ for(let i = 0; i < this.models.length; i++){
91
+ this.models[i] = 1024; // kProbInitValue
92
+ }
93
+ }
94
+ /**
95
+ * Decode a symbol (forward bit order)
96
+ */ decode(rangeDecoder) {
97
+ let m = 1;
98
+ for(let i = this.numBitLevels; i > 0; i--){
99
+ m = m << 1 | rangeDecoder.decodeBit(this.models, m);
100
+ }
101
+ return m - (1 << this.numBitLevels);
102
+ }
103
+ /**
104
+ * Decode a symbol (reverse bit order)
105
+ */ reverseDecode(rangeDecoder) {
106
+ let m = 1;
107
+ let symbol = 0;
108
+ for(let i = 0; i < this.numBitLevels; i++){
109
+ const bit = rangeDecoder.decodeBit(this.models, m);
110
+ m = m << 1 | bit;
111
+ symbol |= bit << i;
112
+ }
113
+ return symbol;
114
+ }
115
+ constructor(numBitLevels){
116
+ this.numBitLevels = numBitLevels;
117
+ this.models = new Uint16Array(1 << numBitLevels);
118
+ this.init();
119
+ }
120
+ }
121
+ /**
122
+ * Static reverse decode from external probability array
123
+ */ export function reverseDecodeFromArray(models, startIndex, rangeDecoder, numBitLevels) {
124
+ let m = 1;
125
+ let symbol = 0;
126
+ for(let i = 0; i < numBitLevels; i++){
127
+ const bit = rangeDecoder.decodeBit(models, startIndex + m);
128
+ m = m << 1 | bit;
129
+ symbol |= bit << i;
130
+ }
131
+ return symbol;
132
+ }