7z-iterator 1.1.2 → 1.3.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 (184) 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/index.d.cts +1 -2
  10. package/dist/cjs/index.d.ts +1 -2
  11. package/dist/cjs/index.js +19 -3
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/lib/streamToSource.d.cts +8 -11
  14. package/dist/cjs/lib/streamToSource.d.ts +8 -11
  15. package/dist/cjs/lib/streamToSource.js +21 -67
  16. package/dist/cjs/lib/streamToSource.js.map +1 -1
  17. package/dist/cjs/lzma/Lzma2ChunkParser.d.cts +73 -0
  18. package/dist/cjs/lzma/Lzma2ChunkParser.d.ts +73 -0
  19. package/dist/cjs/lzma/Lzma2ChunkParser.js +148 -0
  20. package/dist/cjs/lzma/Lzma2ChunkParser.js.map +1 -0
  21. package/dist/cjs/lzma/index.d.cts +13 -0
  22. package/dist/cjs/lzma/index.d.ts +13 -0
  23. package/dist/cjs/lzma/index.js +63 -0
  24. package/dist/cjs/lzma/index.js.map +1 -0
  25. package/dist/cjs/lzma/stream/transforms.d.cts +38 -0
  26. package/dist/cjs/lzma/stream/transforms.d.ts +38 -0
  27. package/dist/cjs/lzma/stream/transforms.js +149 -0
  28. package/dist/cjs/lzma/stream/transforms.js.map +1 -0
  29. package/dist/cjs/lzma/sync/Lzma2Decoder.d.cts +30 -0
  30. package/dist/cjs/lzma/sync/Lzma2Decoder.d.ts +30 -0
  31. package/dist/cjs/lzma/sync/Lzma2Decoder.js +135 -0
  32. package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +1 -0
  33. package/dist/cjs/lzma/sync/LzmaDecoder.d.cts +82 -0
  34. package/dist/cjs/lzma/sync/LzmaDecoder.d.ts +82 -0
  35. package/dist/cjs/lzma/sync/LzmaDecoder.js +440 -0
  36. package/dist/cjs/lzma/sync/LzmaDecoder.js.map +1 -0
  37. package/dist/cjs/lzma/sync/RangeDecoder.d.cts +69 -0
  38. package/dist/cjs/lzma/sync/RangeDecoder.d.ts +69 -0
  39. package/dist/cjs/lzma/sync/RangeDecoder.js +162 -0
  40. package/dist/cjs/lzma/sync/RangeDecoder.js.map +1 -0
  41. package/dist/cjs/lzma/types.d.cts +110 -0
  42. package/dist/cjs/lzma/types.d.ts +110 -0
  43. package/dist/cjs/lzma/types.js +264 -0
  44. package/dist/cjs/lzma/types.js.map +1 -0
  45. package/dist/cjs/nextEntry.js +24 -26
  46. package/dist/cjs/nextEntry.js.map +1 -1
  47. package/dist/cjs/sevenz/ArchiveSource.d.cts +16 -0
  48. package/dist/cjs/sevenz/ArchiveSource.d.ts +16 -0
  49. package/dist/cjs/sevenz/ArchiveSource.js +69 -0
  50. package/dist/cjs/sevenz/ArchiveSource.js.map +1 -1
  51. package/dist/cjs/sevenz/FolderStreamSplitter.d.cts +101 -0
  52. package/dist/cjs/sevenz/FolderStreamSplitter.d.ts +101 -0
  53. package/dist/cjs/sevenz/FolderStreamSplitter.js +229 -0
  54. package/dist/cjs/sevenz/FolderStreamSplitter.js.map +1 -0
  55. package/dist/cjs/sevenz/SevenZipParser.d.cts +71 -10
  56. package/dist/cjs/sevenz/SevenZipParser.d.ts +71 -10
  57. package/dist/cjs/sevenz/SevenZipParser.js +574 -203
  58. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
  59. package/dist/cjs/sevenz/codecs/BZip2.js +2 -1
  60. package/dist/cjs/sevenz/codecs/BZip2.js.map +1 -1
  61. package/dist/cjs/sevenz/codecs/Bcj.d.cts +5 -4
  62. package/dist/cjs/sevenz/codecs/Bcj.d.ts +5 -4
  63. package/dist/cjs/sevenz/codecs/Bcj.js +102 -8
  64. package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -1
  65. package/dist/cjs/sevenz/codecs/BcjArm.d.cts +5 -4
  66. package/dist/cjs/sevenz/codecs/BcjArm.d.ts +5 -4
  67. package/dist/cjs/sevenz/codecs/BcjArm.js +51 -9
  68. package/dist/cjs/sevenz/codecs/BcjArm.js.map +1 -1
  69. package/dist/cjs/sevenz/codecs/Copy.d.cts +2 -4
  70. package/dist/cjs/sevenz/codecs/Copy.d.ts +2 -4
  71. package/dist/cjs/sevenz/codecs/Copy.js +2 -15
  72. package/dist/cjs/sevenz/codecs/Copy.js.map +1 -1
  73. package/dist/cjs/sevenz/codecs/Deflate.d.cts +6 -4
  74. package/dist/cjs/sevenz/codecs/Deflate.d.ts +6 -4
  75. package/dist/cjs/sevenz/codecs/Deflate.js +4 -9
  76. package/dist/cjs/sevenz/codecs/Deflate.js.map +1 -1
  77. package/dist/cjs/sevenz/codecs/Delta.d.cts +5 -4
  78. package/dist/cjs/sevenz/codecs/Delta.d.ts +5 -4
  79. package/dist/cjs/sevenz/codecs/Delta.js +29 -10
  80. package/dist/cjs/sevenz/codecs/Delta.js.map +1 -1
  81. package/dist/cjs/sevenz/codecs/Lzma.d.cts +5 -2
  82. package/dist/cjs/sevenz/codecs/Lzma.d.ts +5 -2
  83. package/dist/cjs/sevenz/codecs/Lzma.js +13 -28
  84. package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
  85. package/dist/cjs/sevenz/codecs/Lzma2.d.cts +9 -3
  86. package/dist/cjs/sevenz/codecs/Lzma2.d.ts +9 -3
  87. package/dist/cjs/sevenz/codecs/Lzma2.js +17 -198
  88. package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
  89. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +2 -2
  90. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
  91. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +2 -15
  92. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  93. package/dist/cjs/types.d.cts +2 -16
  94. package/dist/cjs/types.d.ts +2 -16
  95. package/dist/cjs/types.js.map +1 -1
  96. package/dist/esm/FileEntry.d.ts +12 -4
  97. package/dist/esm/FileEntry.js +52 -26
  98. package/dist/esm/FileEntry.js.map +1 -1
  99. package/dist/esm/SevenZipIterator.d.ts +25 -2
  100. package/dist/esm/SevenZipIterator.js +69 -22
  101. package/dist/esm/SevenZipIterator.js.map +1 -1
  102. package/dist/esm/index.d.ts +1 -2
  103. package/dist/esm/index.js +2 -1
  104. package/dist/esm/index.js.map +1 -1
  105. package/dist/esm/lib/streamToSource.d.ts +8 -11
  106. package/dist/esm/lib/streamToSource.js +22 -68
  107. package/dist/esm/lib/streamToSource.js.map +1 -1
  108. package/dist/esm/lzma/Lzma2ChunkParser.d.ts +73 -0
  109. package/dist/esm/lzma/Lzma2ChunkParser.js +137 -0
  110. package/dist/esm/lzma/Lzma2ChunkParser.js.map +1 -0
  111. package/dist/esm/lzma/index.d.ts +13 -0
  112. package/dist/esm/lzma/index.js +15 -0
  113. package/dist/esm/lzma/index.js.map +1 -0
  114. package/dist/esm/lzma/stream/transforms.d.ts +38 -0
  115. package/dist/esm/lzma/stream/transforms.js +150 -0
  116. package/dist/esm/lzma/stream/transforms.js.map +1 -0
  117. package/dist/esm/lzma/sync/Lzma2Decoder.d.ts +30 -0
  118. package/dist/esm/lzma/sync/Lzma2Decoder.js +115 -0
  119. package/dist/esm/lzma/sync/Lzma2Decoder.js.map +1 -0
  120. package/dist/esm/lzma/sync/LzmaDecoder.d.ts +82 -0
  121. package/dist/esm/lzma/sync/LzmaDecoder.js +403 -0
  122. package/dist/esm/lzma/sync/LzmaDecoder.js.map +1 -0
  123. package/dist/esm/lzma/sync/RangeDecoder.d.ts +69 -0
  124. package/dist/esm/lzma/sync/RangeDecoder.js +132 -0
  125. package/dist/esm/lzma/sync/RangeDecoder.js.map +1 -0
  126. package/dist/esm/lzma/types.d.ts +110 -0
  127. package/dist/esm/lzma/types.js +154 -0
  128. package/dist/esm/lzma/types.js.map +1 -0
  129. package/dist/esm/nextEntry.js +24 -26
  130. package/dist/esm/nextEntry.js.map +1 -1
  131. package/dist/esm/sevenz/ArchiveSource.d.ts +16 -0
  132. package/dist/esm/sevenz/ArchiveSource.js +70 -1
  133. package/dist/esm/sevenz/ArchiveSource.js.map +1 -1
  134. package/dist/esm/sevenz/FolderStreamSplitter.d.ts +101 -0
  135. package/dist/esm/sevenz/FolderStreamSplitter.js +207 -0
  136. package/dist/esm/sevenz/FolderStreamSplitter.js.map +1 -0
  137. package/dist/esm/sevenz/SevenZipParser.d.ts +71 -10
  138. package/dist/esm/sevenz/SevenZipParser.js +414 -198
  139. package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
  140. package/dist/esm/sevenz/codecs/BZip2.js +2 -1
  141. package/dist/esm/sevenz/codecs/BZip2.js.map +1 -1
  142. package/dist/esm/sevenz/codecs/Bcj.d.ts +5 -4
  143. package/dist/esm/sevenz/codecs/Bcj.js +106 -6
  144. package/dist/esm/sevenz/codecs/Bcj.js.map +1 -1
  145. package/dist/esm/sevenz/codecs/BcjArm.d.ts +5 -4
  146. package/dist/esm/sevenz/codecs/BcjArm.js +55 -7
  147. package/dist/esm/sevenz/codecs/BcjArm.js.map +1 -1
  148. package/dist/esm/sevenz/codecs/Copy.d.ts +2 -4
  149. package/dist/esm/sevenz/codecs/Copy.js +1 -9
  150. package/dist/esm/sevenz/codecs/Copy.js.map +1 -1
  151. package/dist/esm/sevenz/codecs/Deflate.d.ts +6 -4
  152. package/dist/esm/sevenz/codecs/Deflate.js +9 -7
  153. package/dist/esm/sevenz/codecs/Deflate.js.map +1 -1
  154. package/dist/esm/sevenz/codecs/Delta.d.ts +5 -4
  155. package/dist/esm/sevenz/codecs/Delta.js +33 -8
  156. package/dist/esm/sevenz/codecs/Delta.js.map +1 -1
  157. package/dist/esm/sevenz/codecs/Lzma.d.ts +5 -2
  158. package/dist/esm/sevenz/codecs/Lzma.js +17 -24
  159. package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
  160. package/dist/esm/sevenz/codecs/Lzma2.d.ts +9 -3
  161. package/dist/esm/sevenz/codecs/Lzma2.js +15 -196
  162. package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
  163. package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +2 -2
  164. package/dist/esm/sevenz/codecs/createBufferingDecoder.js +1 -9
  165. package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  166. package/dist/esm/types.d.ts +2 -16
  167. package/dist/esm/types.js.map +1 -1
  168. package/package.json +3 -3
  169. package/assets/lzma-purejs/LICENSE +0 -11
  170. package/assets/lzma-purejs/index.js +0 -19
  171. package/assets/lzma-purejs/lib/LZ/OutWindow.js +0 -78
  172. package/assets/lzma-purejs/lib/LZ.js +0 -6
  173. package/assets/lzma-purejs/lib/LZMA/Base.js +0 -48
  174. package/assets/lzma-purejs/lib/LZMA/Decoder.js +0 -328
  175. package/assets/lzma-purejs/lib/LZMA.js +0 -6
  176. package/assets/lzma-purejs/lib/RangeCoder/BitTreeDecoder.js +0 -41
  177. package/assets/lzma-purejs/lib/RangeCoder/Decoder.js +0 -58
  178. package/assets/lzma-purejs/lib/RangeCoder/Encoder.js +0 -106
  179. package/assets/lzma-purejs/lib/RangeCoder.js +0 -10
  180. package/assets/lzma-purejs/lib/Stream.js +0 -41
  181. package/assets/lzma-purejs/lib/Util.js +0 -114
  182. package/assets/lzma-purejs/lib/makeBuffer.js +0 -25
  183. package/assets/lzma-purejs/package-lock.json +0 -13
  184. package/assets/lzma-purejs/package.json +0 -8
@@ -0,0 +1,149 @@
1
+ /**
2
+ * LZMA Transform Stream Wrappers
3
+ *
4
+ * Provides Transform streams for LZMA1 and LZMA2 decompression.
5
+ *
6
+ * LZMA2 streaming works by buffering until a complete chunk is available,
7
+ * then decoding synchronously. LZMA2 chunks are bounded in size (~2MB max
8
+ * uncompressed), so memory usage is predictable and bounded.
9
+ *
10
+ * True byte-by-byte async LZMA streaming would require rewriting the entire
11
+ * decoder with continuation-passing style, which is complex and not worth
12
+ * the effort given LZMA2's chunked format.
13
+ */ "use strict";
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ function _export(target, all) {
18
+ for(var name in all)Object.defineProperty(target, name, {
19
+ enumerable: true,
20
+ get: Object.getOwnPropertyDescriptor(all, name).get
21
+ });
22
+ }
23
+ _export(exports, {
24
+ get createLzma2Decoder () {
25
+ return createLzma2Decoder;
26
+ },
27
+ get createLzmaDecoder () {
28
+ return createLzmaDecoder;
29
+ }
30
+ });
31
+ var _extractbaseiterator = require("extract-base-iterator");
32
+ var _Lzma2ChunkParserts = require("../Lzma2ChunkParser.js");
33
+ var _LzmaDecoderts = require("../sync/LzmaDecoder.js");
34
+ var _typests = require("../types.js");
35
+ function createLzma2Decoder(properties) {
36
+ if (!properties || properties.length < 1) {
37
+ throw new Error('LZMA2 requires properties byte');
38
+ }
39
+ var dictSize = (0, _typests.parseLzma2DictionarySize)(properties[0]);
40
+ // LZMA decoder instance - reused across chunks for solid mode
41
+ var decoder = new _LzmaDecoderts.LzmaDecoder();
42
+ decoder.setDictionarySize(dictSize);
43
+ // Track current LZMA properties
44
+ var propsSet = false;
45
+ // Buffer for incomplete chunk data
46
+ var pending = null;
47
+ var finished = false;
48
+ return new _extractbaseiterator.Transform({
49
+ transform: function transform(chunk, _encoding, callback) {
50
+ if (finished) {
51
+ callback(null);
52
+ return;
53
+ }
54
+ // Combine with pending data
55
+ var input;
56
+ if (pending && pending.length > 0) {
57
+ input = Buffer.concat([
58
+ pending,
59
+ chunk
60
+ ]);
61
+ pending = null;
62
+ } else {
63
+ input = chunk;
64
+ }
65
+ var offset = 0;
66
+ try {
67
+ while(offset < input.length && !finished){
68
+ var result = (0, _Lzma2ChunkParserts.hasCompleteChunk)(input, offset);
69
+ if (!result.success) {
70
+ // Need more data
71
+ pending = input.slice(offset);
72
+ break;
73
+ }
74
+ var chunkInfo = result.chunk, totalSize = result.totalSize;
75
+ if (chunkInfo.type === 'end') {
76
+ finished = true;
77
+ break;
78
+ }
79
+ // Handle dictionary reset
80
+ if (chunkInfo.dictReset) {
81
+ decoder.resetDictionary();
82
+ }
83
+ var dataOffset = offset + chunkInfo.headerSize;
84
+ if (chunkInfo.type === 'uncompressed') {
85
+ var uncompData = input.slice(dataOffset, dataOffset + chunkInfo.uncompSize);
86
+ this.push(uncompData);
87
+ // Feed uncompressed data to dictionary for subsequent LZMA chunks
88
+ decoder.feedUncompressed(uncompData);
89
+ } else {
90
+ // LZMA compressed chunk
91
+ // Apply new properties if present
92
+ if (chunkInfo.newProps) {
93
+ var _chunkInfo_newProps = chunkInfo.newProps, lc = _chunkInfo_newProps.lc, lp = _chunkInfo_newProps.lp, pb = _chunkInfo_newProps.pb;
94
+ if (!decoder.setLcLpPb(lc, lp, pb)) {
95
+ throw new Error("Invalid LZMA properties: lc=".concat(lc, " lp=").concat(lp, " pb=").concat(pb));
96
+ }
97
+ propsSet = true;
98
+ }
99
+ if (!propsSet) {
100
+ throw new Error('LZMA chunk without properties');
101
+ }
102
+ // Reset probabilities if state reset
103
+ if (chunkInfo.stateReset) {
104
+ decoder.resetProbabilities();
105
+ }
106
+ // Determine solid mode - preserve dictionary if not resetting state or if only resetting state (not dict)
107
+ var useSolid = !chunkInfo.stateReset || chunkInfo.stateReset && !chunkInfo.dictReset;
108
+ var compData = input.slice(dataOffset, dataOffset + chunkInfo.compSize);
109
+ var decoded = decoder.decode(compData, 0, chunkInfo.uncompSize, useSolid);
110
+ this.push(decoded);
111
+ }
112
+ offset += totalSize;
113
+ }
114
+ callback(null);
115
+ } catch (err) {
116
+ callback(err);
117
+ }
118
+ },
119
+ flush: function flush(callback) {
120
+ if (pending && pending.length > 0 && !finished) {
121
+ callback(new Error('Truncated LZMA2 stream'));
122
+ } else {
123
+ callback(null);
124
+ }
125
+ }
126
+ });
127
+ }
128
+ function createLzmaDecoder(properties, unpackSize) {
129
+ var decoder = new _LzmaDecoderts.LzmaDecoder();
130
+ decoder.setDecoderProperties(properties);
131
+ var chunks = [];
132
+ return new _extractbaseiterator.Transform({
133
+ transform: function transform(chunk, _encoding, callback) {
134
+ chunks.push(chunk);
135
+ callback(null);
136
+ },
137
+ flush: function flush(callback) {
138
+ try {
139
+ var input = Buffer.concat(chunks);
140
+ var output = decoder.decode(input, 0, unpackSize, false);
141
+ this.push(output);
142
+ callback(null);
143
+ } catch (err) {
144
+ callback(err);
145
+ }
146
+ }
147
+ });
148
+ }
149
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lzma/stream/transforms.ts"],"sourcesContent":["/**\n * LZMA Transform Stream Wrappers\n *\n * Provides Transform streams for LZMA1 and LZMA2 decompression.\n *\n * LZMA2 streaming works by buffering until a complete chunk is available,\n * then decoding synchronously. LZMA2 chunks are bounded in size (~2MB max\n * uncompressed), so memory usage is predictable and bounded.\n *\n * True byte-by-byte async LZMA streaming would require rewriting the entire\n * decoder with continuation-passing style, which is complex and not worth\n * the effort given LZMA2's chunked format.\n */\n\nimport { Transform } from 'extract-base-iterator';\nimport { hasCompleteChunk } from '../Lzma2ChunkParser.ts';\nimport { LzmaDecoder } from '../sync/LzmaDecoder.ts';\nimport { parseLzma2DictionarySize } from '../types.ts';\n\n/**\n * Create an LZMA2 decoder Transform stream\n *\n * This is a streaming decoder that processes LZMA2 chunks incrementally.\n * Memory usage is O(dictionary_size + max_chunk_size) instead of O(folder_size).\n *\n * @param properties - 1-byte LZMA2 properties (dictionary size)\n * @returns Transform stream that decompresses LZMA2 data\n */\nexport function createLzma2Decoder(properties: Buffer | Uint8Array): InstanceType<typeof Transform> {\n if (!properties || properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n\n const dictSize = parseLzma2DictionarySize(properties[0]);\n\n // LZMA decoder instance - reused across chunks for solid mode\n const decoder = new LzmaDecoder();\n decoder.setDictionarySize(dictSize);\n\n // Track current LZMA properties\n let propsSet = false;\n\n // Buffer for incomplete chunk data\n let pending: Buffer | null = null;\n let finished = false;\n\n return new Transform({\n transform: function (this: InstanceType<typeof Transform>, chunk: Buffer, _encoding: string, callback: (err?: Error | null) => void) {\n if (finished) {\n callback(null);\n return;\n }\n\n // Combine with pending data\n let input: Buffer;\n if (pending && pending.length > 0) {\n input = Buffer.concat([pending, chunk]);\n pending = null;\n } else {\n input = chunk;\n }\n\n let offset = 0;\n\n try {\n while (offset < input.length && !finished) {\n const result = hasCompleteChunk(input, offset);\n\n if (!result.success) {\n // Need more data\n pending = input.slice(offset);\n break;\n }\n\n const { chunk: chunkInfo, totalSize } = result;\n\n if (chunkInfo.type === 'end') {\n finished = true;\n break;\n }\n\n // Handle dictionary reset\n if (chunkInfo.dictReset) {\n decoder.resetDictionary();\n }\n\n const dataOffset = offset + chunkInfo.headerSize;\n\n if (chunkInfo.type === 'uncompressed') {\n const uncompData = input.slice(dataOffset, dataOffset + chunkInfo.uncompSize);\n this.push(uncompData);\n\n // Feed uncompressed data to dictionary for subsequent LZMA chunks\n decoder.feedUncompressed(uncompData);\n } else {\n // LZMA compressed chunk\n\n // Apply new properties if present\n if (chunkInfo.newProps) {\n const { lc, lp, pb } = chunkInfo.newProps;\n if (!decoder.setLcLpPb(lc, lp, pb)) {\n throw new Error(`Invalid LZMA properties: lc=${lc} lp=${lp} pb=${pb}`);\n }\n propsSet = true;\n }\n\n if (!propsSet) {\n throw new Error('LZMA chunk without properties');\n }\n\n // Reset probabilities if state reset\n if (chunkInfo.stateReset) {\n decoder.resetProbabilities();\n }\n\n // Determine solid mode - preserve dictionary if not resetting state or if only resetting state (not dict)\n const useSolid = !chunkInfo.stateReset || (chunkInfo.stateReset && !chunkInfo.dictReset);\n\n const compData = input.slice(dataOffset, dataOffset + chunkInfo.compSize);\n const decoded = decoder.decode(compData, 0, chunkInfo.uncompSize, useSolid);\n this.push(decoded);\n }\n\n offset += totalSize;\n }\n\n callback(null);\n } catch (err) {\n callback(err as Error);\n }\n },\n\n flush: function (this: InstanceType<typeof Transform>, callback: (err?: Error | null) => void) {\n if (pending && pending.length > 0 && !finished) {\n callback(new Error('Truncated LZMA2 stream'));\n } else {\n callback(null);\n }\n },\n });\n}\n\n/**\n * Create an LZMA1 decoder Transform stream\n *\n * Note: LZMA1 has no chunk boundaries, so this requires knowing the\n * uncompressed size upfront. The stream buffers all input, then\n * decompresses when complete.\n *\n * For true streaming, use LZMA2 which has built-in chunking.\n *\n * @param properties - 5-byte LZMA properties\n * @param unpackSize - Expected uncompressed size\n * @returns Transform stream that decompresses LZMA1 data\n */\nexport function createLzmaDecoder(properties: Buffer | Uint8Array, unpackSize: number): InstanceType<typeof Transform> {\n const decoder = new LzmaDecoder();\n decoder.setDecoderProperties(properties);\n\n const chunks: Buffer[] = [];\n\n return new Transform({\n transform: function (this: InstanceType<typeof Transform>, chunk: Buffer, _encoding: string, callback: (err?: Error | null) => void) {\n chunks.push(chunk);\n callback(null);\n },\n\n flush: function (this: InstanceType<typeof Transform>, callback: (err?: Error | null) => void) {\n try {\n const input = Buffer.concat(chunks);\n const output = decoder.decode(input, 0, unpackSize, false);\n this.push(output);\n callback(null);\n } catch (err) {\n callback(err as Error);\n }\n },\n });\n}\n"],"names":["createLzma2Decoder","createLzmaDecoder","properties","length","Error","dictSize","parseLzma2DictionarySize","decoder","LzmaDecoder","setDictionarySize","propsSet","pending","finished","Transform","transform","chunk","_encoding","callback","input","Buffer","concat","offset","result","hasCompleteChunk","success","slice","chunkInfo","totalSize","type","dictReset","resetDictionary","dataOffset","headerSize","uncompData","uncompSize","push","feedUncompressed","newProps","lc","lp","pb","setLcLpPb","stateReset","resetProbabilities","useSolid","compData","compSize","decoded","decode","err","flush","unpackSize","setDecoderProperties","chunks","output"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Synchronous LZMA2 Decoder
3
+ *
4
+ * LZMA2 is a container format that wraps LZMA chunks with framing.
5
+ * Decodes LZMA2 data from a buffer.
6
+ */
7
+ /**
8
+ * Synchronous LZMA2 decoder
9
+ */
10
+ export declare class Lzma2Decoder {
11
+ private lzmaDecoder;
12
+ private dictionarySize;
13
+ private propsSet;
14
+ constructor(properties: Buffer | Uint8Array);
15
+ /**
16
+ * Decode LZMA2 data
17
+ * @param input - LZMA2 compressed data
18
+ * @param unpackSize - Expected output size (optional, for pre-allocation)
19
+ * @returns Decompressed data
20
+ */
21
+ decode(input: Buffer, unpackSize?: number): Buffer;
22
+ }
23
+ /**
24
+ * Decode LZMA2 data synchronously
25
+ * @param input - LZMA2 compressed data
26
+ * @param properties - 1-byte properties (dictionary size)
27
+ * @param unpackSize - Expected output size (optional)
28
+ * @returns Decompressed data
29
+ */
30
+ export declare function decodeLzma2(input: Buffer, properties: Buffer | Uint8Array, unpackSize?: number): Buffer;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Synchronous LZMA2 Decoder
3
+ *
4
+ * LZMA2 is a container format that wraps LZMA chunks with framing.
5
+ * Decodes LZMA2 data from a buffer.
6
+ */
7
+ /**
8
+ * Synchronous LZMA2 decoder
9
+ */
10
+ export declare class Lzma2Decoder {
11
+ private lzmaDecoder;
12
+ private dictionarySize;
13
+ private propsSet;
14
+ constructor(properties: Buffer | Uint8Array);
15
+ /**
16
+ * Decode LZMA2 data
17
+ * @param input - LZMA2 compressed data
18
+ * @param unpackSize - Expected output size (optional, for pre-allocation)
19
+ * @returns Decompressed data
20
+ */
21
+ decode(input: Buffer, unpackSize?: number): Buffer;
22
+ }
23
+ /**
24
+ * Decode LZMA2 data synchronously
25
+ * @param input - LZMA2 compressed data
26
+ * @param properties - 1-byte properties (dictionary size)
27
+ * @param unpackSize - Expected output size (optional)
28
+ * @returns Decompressed data
29
+ */
30
+ export declare function decodeLzma2(input: Buffer, properties: Buffer | Uint8Array, unpackSize?: number): Buffer;
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Synchronous LZMA2 Decoder
3
+ *
4
+ * LZMA2 is a container format that wraps LZMA chunks with framing.
5
+ * Decodes LZMA2 data from a buffer.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ function _export(target, all) {
11
+ for(var name in all)Object.defineProperty(target, name, {
12
+ enumerable: true,
13
+ get: Object.getOwnPropertyDescriptor(all, name).get
14
+ });
15
+ }
16
+ _export(exports, {
17
+ get Lzma2Decoder () {
18
+ return Lzma2Decoder;
19
+ },
20
+ get decodeLzma2 () {
21
+ return decodeLzma2;
22
+ }
23
+ });
24
+ var _extractbaseiterator = require("extract-base-iterator");
25
+ var _Lzma2ChunkParserts = require("../Lzma2ChunkParser.js");
26
+ var _typests = require("../types.js");
27
+ var _LzmaDecoderts = require("./LzmaDecoder.js");
28
+ function _class_call_check(instance, Constructor) {
29
+ if (!(instance instanceof Constructor)) {
30
+ throw new TypeError("Cannot call a class as a function");
31
+ }
32
+ }
33
+ var Lzma2Decoder = /*#__PURE__*/ function() {
34
+ "use strict";
35
+ function Lzma2Decoder(properties) {
36
+ _class_call_check(this, Lzma2Decoder);
37
+ if (!properties || properties.length < 1) {
38
+ throw new Error('LZMA2 requires properties byte');
39
+ }
40
+ this.dictionarySize = (0, _typests.parseLzma2DictionarySize)(properties[0]);
41
+ this.lzmaDecoder = new _LzmaDecoderts.LzmaDecoder();
42
+ this.lzmaDecoder.setDictionarySize(this.dictionarySize);
43
+ this.propsSet = false;
44
+ }
45
+ var _proto = Lzma2Decoder.prototype;
46
+ /**
47
+ * Decode LZMA2 data
48
+ * @param input - LZMA2 compressed data
49
+ * @param unpackSize - Expected output size (optional, for pre-allocation)
50
+ * @returns Decompressed data
51
+ */ _proto.decode = function decode(input, unpackSize) {
52
+ // Pre-allocate output buffer if size is known
53
+ var outputBuffer = null;
54
+ var outputPos = 0;
55
+ var outputChunks = [];
56
+ if (unpackSize && unpackSize > 0) {
57
+ outputBuffer = (0, _extractbaseiterator.allocBufferUnsafe)(unpackSize);
58
+ }
59
+ var offset = 0;
60
+ while(offset < input.length){
61
+ var result = (0, _Lzma2ChunkParserts.parseLzma2ChunkHeader)(input, offset);
62
+ if (!result.success) {
63
+ throw new Error('Truncated LZMA2 chunk header');
64
+ }
65
+ var chunk = result.chunk;
66
+ if (chunk.type === 'end') {
67
+ break;
68
+ }
69
+ // Validate we have enough data for the chunk
70
+ var dataSize = chunk.type === 'uncompressed' ? chunk.uncompSize : chunk.compSize;
71
+ if (offset + chunk.headerSize + dataSize > input.length) {
72
+ throw new Error("Truncated LZMA2 ".concat(chunk.type, " data"));
73
+ }
74
+ // Handle dictionary reset
75
+ if (chunk.dictReset) {
76
+ this.lzmaDecoder.resetDictionary();
77
+ }
78
+ var dataOffset = offset + chunk.headerSize;
79
+ if (chunk.type === 'uncompressed') {
80
+ var uncompData = input.slice(dataOffset, dataOffset + chunk.uncompSize);
81
+ // Copy to output
82
+ if (outputBuffer) {
83
+ uncompData.copy(outputBuffer, outputPos);
84
+ outputPos += uncompData.length;
85
+ } else {
86
+ outputChunks.push(uncompData);
87
+ }
88
+ // Feed uncompressed data to dictionary so subsequent LZMA chunks can reference it
89
+ this.lzmaDecoder.feedUncompressed(uncompData);
90
+ offset = dataOffset + chunk.uncompSize;
91
+ } else {
92
+ // LZMA compressed chunk
93
+ // Apply new properties if present
94
+ if (chunk.newProps) {
95
+ var _chunk_newProps = chunk.newProps, lc = _chunk_newProps.lc, lp = _chunk_newProps.lp, pb = _chunk_newProps.pb;
96
+ if (!this.lzmaDecoder.setLcLpPb(lc, lp, pb)) {
97
+ throw new Error("Invalid LZMA properties: lc=".concat(lc, " lp=").concat(lp, " pb=").concat(pb));
98
+ }
99
+ this.propsSet = true;
100
+ }
101
+ if (!this.propsSet) {
102
+ throw new Error('LZMA chunk without properties');
103
+ }
104
+ // Reset probabilities if state reset
105
+ if (chunk.stateReset) {
106
+ this.lzmaDecoder.resetProbabilities();
107
+ }
108
+ // Determine solid mode - preserve dictionary if not resetting state or if only resetting state (not dict)
109
+ var useSolid = !chunk.stateReset || chunk.stateReset && !chunk.dictReset;
110
+ // Decode LZMA chunk
111
+ var chunkData = input.slice(dataOffset, dataOffset + chunk.compSize);
112
+ var decoded = this.lzmaDecoder.decode(chunkData, 0, chunk.uncompSize, useSolid);
113
+ // Copy to output
114
+ if (outputBuffer) {
115
+ decoded.copy(outputBuffer, outputPos);
116
+ outputPos += decoded.length;
117
+ } else {
118
+ outputChunks.push(decoded);
119
+ }
120
+ offset = dataOffset + chunk.compSize;
121
+ }
122
+ }
123
+ // Return pre-allocated buffer or concatenated chunks
124
+ if (outputBuffer) {
125
+ return outputPos < outputBuffer.length ? outputBuffer.slice(0, outputPos) : outputBuffer;
126
+ }
127
+ return Buffer.concat(outputChunks);
128
+ };
129
+ return Lzma2Decoder;
130
+ }();
131
+ function decodeLzma2(input, properties, unpackSize) {
132
+ var decoder = new Lzma2Decoder(properties);
133
+ return decoder.decode(input, unpackSize);
134
+ }
135
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/lzma/sync/Lzma2Decoder.ts"],"sourcesContent":["/**\n * Synchronous LZMA2 Decoder\n *\n * LZMA2 is a container format that wraps LZMA chunks with framing.\n * Decodes LZMA2 data from a buffer.\n */\n\nimport { allocBufferUnsafe } from 'extract-base-iterator';\nimport { parseLzma2ChunkHeader } from '../Lzma2ChunkParser.ts';\nimport { parseLzma2DictionarySize } from '../types.ts';\nimport { LzmaDecoder } from './LzmaDecoder.ts';\n\n/**\n * Synchronous LZMA2 decoder\n */\nexport class Lzma2Decoder {\n private lzmaDecoder: LzmaDecoder;\n private dictionarySize: number;\n private propsSet: boolean;\n\n constructor(properties: Buffer | Uint8Array) {\n if (!properties || properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n\n this.dictionarySize = parseLzma2DictionarySize(properties[0]);\n this.lzmaDecoder = new LzmaDecoder();\n this.lzmaDecoder.setDictionarySize(this.dictionarySize);\n this.propsSet = false;\n }\n\n /**\n * Decode LZMA2 data\n * @param input - LZMA2 compressed data\n * @param unpackSize - Expected output size (optional, for pre-allocation)\n * @returns Decompressed data\n */\n decode(input: Buffer, unpackSize?: number): Buffer {\n // Pre-allocate output buffer if size is known\n let outputBuffer: Buffer | null = null;\n let outputPos = 0;\n const outputChunks: Buffer[] = [];\n\n if (unpackSize && unpackSize > 0) {\n outputBuffer = allocBufferUnsafe(unpackSize);\n }\n\n let offset = 0;\n\n while (offset < input.length) {\n const result = parseLzma2ChunkHeader(input, offset);\n\n if (!result.success) {\n throw new Error('Truncated LZMA2 chunk header');\n }\n\n const chunk = result.chunk;\n\n if (chunk.type === 'end') {\n break;\n }\n\n // Validate we have enough data for the chunk\n const dataSize = chunk.type === 'uncompressed' ? chunk.uncompSize : chunk.compSize;\n if (offset + chunk.headerSize + dataSize > input.length) {\n throw new Error(`Truncated LZMA2 ${chunk.type} data`);\n }\n\n // Handle dictionary reset\n if (chunk.dictReset) {\n this.lzmaDecoder.resetDictionary();\n }\n\n const dataOffset = offset + chunk.headerSize;\n\n if (chunk.type === 'uncompressed') {\n const uncompData = input.slice(dataOffset, dataOffset + chunk.uncompSize);\n\n // Copy to output\n if (outputBuffer) {\n uncompData.copy(outputBuffer, outputPos);\n outputPos += uncompData.length;\n } else {\n outputChunks.push(uncompData);\n }\n\n // Feed uncompressed data to dictionary so subsequent LZMA chunks can reference it\n this.lzmaDecoder.feedUncompressed(uncompData);\n\n offset = dataOffset + chunk.uncompSize;\n } else {\n // LZMA compressed chunk\n\n // Apply new properties if present\n if (chunk.newProps) {\n const { lc, lp, pb } = chunk.newProps;\n if (!this.lzmaDecoder.setLcLpPb(lc, lp, pb)) {\n throw new Error(`Invalid LZMA properties: lc=${lc} lp=${lp} pb=${pb}`);\n }\n this.propsSet = true;\n }\n\n if (!this.propsSet) {\n throw new Error('LZMA chunk without properties');\n }\n\n // Reset probabilities if state reset\n if (chunk.stateReset) {\n this.lzmaDecoder.resetProbabilities();\n }\n\n // Determine solid mode - preserve dictionary if not resetting state or if only resetting state (not dict)\n const useSolid = !chunk.stateReset || (chunk.stateReset && !chunk.dictReset);\n\n // Decode LZMA chunk\n const chunkData = input.slice(dataOffset, dataOffset + chunk.compSize);\n const decoded = this.lzmaDecoder.decode(chunkData, 0, chunk.uncompSize, useSolid);\n\n // Copy to output\n if (outputBuffer) {\n decoded.copy(outputBuffer, outputPos);\n outputPos += decoded.length;\n } else {\n outputChunks.push(decoded);\n }\n\n offset = dataOffset + chunk.compSize;\n }\n }\n\n // Return pre-allocated buffer or concatenated chunks\n if (outputBuffer) {\n return outputPos < outputBuffer.length ? outputBuffer.slice(0, outputPos) : outputBuffer;\n }\n return Buffer.concat(outputChunks);\n }\n}\n\n/**\n * Decode LZMA2 data synchronously\n * @param input - LZMA2 compressed data\n * @param properties - 1-byte properties (dictionary size)\n * @param unpackSize - Expected output size (optional)\n * @returns Decompressed data\n */\nexport function decodeLzma2(input: Buffer, properties: Buffer | Uint8Array, unpackSize?: number): Buffer {\n const decoder = new Lzma2Decoder(properties);\n return decoder.decode(input, unpackSize);\n}\n"],"names":["Lzma2Decoder","decodeLzma2","properties","length","Error","dictionarySize","parseLzma2DictionarySize","lzmaDecoder","LzmaDecoder","setDictionarySize","propsSet","decode","input","unpackSize","outputBuffer","outputPos","outputChunks","allocBufferUnsafe","offset","result","parseLzma2ChunkHeader","success","chunk","type","dataSize","uncompSize","compSize","headerSize","dictReset","resetDictionary","dataOffset","uncompData","slice","copy","push","feedUncompressed","newProps","lc","lp","pb","setLcLpPb","stateReset","resetProbabilities","useSolid","chunkData","decoded","Buffer","concat","decoder"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Synchronous LZMA1 Decoder
3
+ *
4
+ * Decodes LZMA1 compressed data from a buffer.
5
+ * All operations are synchronous.
6
+ */
7
+ /**
8
+ * Synchronous LZMA1 decoder
9
+ */
10
+ export declare class LzmaDecoder {
11
+ private outWindow;
12
+ private rangeDecoder;
13
+ private isMatchDecoders;
14
+ private isRepDecoders;
15
+ private isRepG0Decoders;
16
+ private isRepG1Decoders;
17
+ private isRepG2Decoders;
18
+ private isRep0LongDecoders;
19
+ private posSlotDecoder;
20
+ private posDecoders;
21
+ private posAlignDecoder;
22
+ private lenDecoder;
23
+ private repLenDecoder;
24
+ private literalDecoder;
25
+ private dictionarySize;
26
+ private dictionarySizeCheck;
27
+ private posStateMask;
28
+ private state;
29
+ private rep0;
30
+ private rep1;
31
+ private rep2;
32
+ private rep3;
33
+ private prevByte;
34
+ private totalPos;
35
+ constructor();
36
+ /**
37
+ * Set dictionary size
38
+ */
39
+ setDictionarySize(dictionarySize: number): boolean;
40
+ /**
41
+ * Set lc, lp, pb properties
42
+ */
43
+ setLcLpPb(lc: number, lp: number, pb: number): boolean;
44
+ /**
45
+ * Set decoder properties from 5-byte buffer
46
+ */
47
+ setDecoderProperties(properties: Buffer | Uint8Array): boolean;
48
+ /**
49
+ * Initialize probability tables
50
+ */
51
+ private initProbabilities;
52
+ /**
53
+ * Reset probabilities only (for LZMA2 state reset)
54
+ */
55
+ resetProbabilities(): void;
56
+ /**
57
+ * Reset dictionary position (for LZMA2 dictionary reset)
58
+ */
59
+ resetDictionary(): void;
60
+ /**
61
+ * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)
62
+ * This updates the sliding window so subsequent LZMA chunks can reference this data.
63
+ */
64
+ feedUncompressed(data: Buffer): void;
65
+ /**
66
+ * Decode LZMA data
67
+ * @param input - Compressed input buffer
68
+ * @param inputOffset - Offset into input buffer
69
+ * @param outSize - Expected output size
70
+ * @param solid - If true, preserve state from previous decode
71
+ * @returns Decompressed data
72
+ */
73
+ decode(input: Buffer, inputOffset: number, outSize: number, solid?: boolean): Buffer;
74
+ }
75
+ /**
76
+ * Decode LZMA1 data synchronously
77
+ * @param input - Compressed data (without 5-byte properties header)
78
+ * @param properties - 5-byte LZMA properties
79
+ * @param outSize - Expected output size
80
+ * @returns Decompressed data
81
+ */
82
+ export declare function decodeLzma(input: Buffer, properties: Buffer | Uint8Array, outSize: number): Buffer;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Synchronous LZMA1 Decoder
3
+ *
4
+ * Decodes LZMA1 compressed data from a buffer.
5
+ * All operations are synchronous.
6
+ */
7
+ /**
8
+ * Synchronous LZMA1 decoder
9
+ */
10
+ export declare class LzmaDecoder {
11
+ private outWindow;
12
+ private rangeDecoder;
13
+ private isMatchDecoders;
14
+ private isRepDecoders;
15
+ private isRepG0Decoders;
16
+ private isRepG1Decoders;
17
+ private isRepG2Decoders;
18
+ private isRep0LongDecoders;
19
+ private posSlotDecoder;
20
+ private posDecoders;
21
+ private posAlignDecoder;
22
+ private lenDecoder;
23
+ private repLenDecoder;
24
+ private literalDecoder;
25
+ private dictionarySize;
26
+ private dictionarySizeCheck;
27
+ private posStateMask;
28
+ private state;
29
+ private rep0;
30
+ private rep1;
31
+ private rep2;
32
+ private rep3;
33
+ private prevByte;
34
+ private totalPos;
35
+ constructor();
36
+ /**
37
+ * Set dictionary size
38
+ */
39
+ setDictionarySize(dictionarySize: number): boolean;
40
+ /**
41
+ * Set lc, lp, pb properties
42
+ */
43
+ setLcLpPb(lc: number, lp: number, pb: number): boolean;
44
+ /**
45
+ * Set decoder properties from 5-byte buffer
46
+ */
47
+ setDecoderProperties(properties: Buffer | Uint8Array): boolean;
48
+ /**
49
+ * Initialize probability tables
50
+ */
51
+ private initProbabilities;
52
+ /**
53
+ * Reset probabilities only (for LZMA2 state reset)
54
+ */
55
+ resetProbabilities(): void;
56
+ /**
57
+ * Reset dictionary position (for LZMA2 dictionary reset)
58
+ */
59
+ resetDictionary(): void;
60
+ /**
61
+ * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)
62
+ * This updates the sliding window so subsequent LZMA chunks can reference this data.
63
+ */
64
+ feedUncompressed(data: Buffer): void;
65
+ /**
66
+ * Decode LZMA data
67
+ * @param input - Compressed input buffer
68
+ * @param inputOffset - Offset into input buffer
69
+ * @param outSize - Expected output size
70
+ * @param solid - If true, preserve state from previous decode
71
+ * @returns Decompressed data
72
+ */
73
+ decode(input: Buffer, inputOffset: number, outSize: number, solid?: boolean): Buffer;
74
+ }
75
+ /**
76
+ * Decode LZMA1 data synchronously
77
+ * @param input - Compressed data (without 5-byte properties header)
78
+ * @param properties - 5-byte LZMA properties
79
+ * @param outSize - Expected output size
80
+ * @returns Decompressed data
81
+ */
82
+ export declare function decodeLzma(input: Buffer, properties: Buffer | Uint8Array, outSize: number): Buffer;