7z-iterator 0.1.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 (166) hide show
  1. package/LICENSE +42 -0
  2. package/README.md +142 -0
  3. package/dist/cjs/FileEntry.d.cts +12 -0
  4. package/dist/cjs/FileEntry.d.ts +12 -0
  5. package/dist/cjs/FileEntry.js +147 -0
  6. package/dist/cjs/FileEntry.js.map +1 -0
  7. package/dist/cjs/SevenZipIterator.d.cts +8 -0
  8. package/dist/cjs/SevenZipIterator.d.ts +8 -0
  9. package/dist/cjs/SevenZipIterator.js +204 -0
  10. package/dist/cjs/SevenZipIterator.js.map +1 -0
  11. package/dist/cjs/index.d.cts +4 -0
  12. package/dist/cjs/index.d.ts +4 -0
  13. package/dist/cjs/index.js +40 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/cjs/lib/Lock.d.cts +11 -0
  16. package/dist/cjs/lib/Lock.d.ts +11 -0
  17. package/dist/cjs/lib/Lock.js +65 -0
  18. package/dist/cjs/lib/Lock.js.map +1 -0
  19. package/dist/cjs/lib/streamToSource.d.cts +20 -0
  20. package/dist/cjs/lib/streamToSource.d.ts +20 -0
  21. package/dist/cjs/lib/streamToSource.js +116 -0
  22. package/dist/cjs/lib/streamToSource.js.map +1 -0
  23. package/dist/cjs/nextEntry.d.cts +4 -0
  24. package/dist/cjs/nextEntry.d.ts +4 -0
  25. package/dist/cjs/nextEntry.js +102 -0
  26. package/dist/cjs/nextEntry.js.map +1 -0
  27. package/dist/cjs/package.json +1 -0
  28. package/dist/cjs/sevenz/NumberCodec.d.cts +58 -0
  29. package/dist/cjs/sevenz/NumberCodec.d.ts +58 -0
  30. package/dist/cjs/sevenz/NumberCodec.js +133 -0
  31. package/dist/cjs/sevenz/NumberCodec.js.map +1 -0
  32. package/dist/cjs/sevenz/SevenZipParser.d.cts +96 -0
  33. package/dist/cjs/sevenz/SevenZipParser.d.ts +96 -0
  34. package/dist/cjs/sevenz/SevenZipParser.js +457 -0
  35. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -0
  36. package/dist/cjs/sevenz/codecs/Aes.d.cts +22 -0
  37. package/dist/cjs/sevenz/codecs/Aes.d.ts +22 -0
  38. package/dist/cjs/sevenz/codecs/Aes.js +179 -0
  39. package/dist/cjs/sevenz/codecs/Aes.js.map +1 -0
  40. package/dist/cjs/sevenz/codecs/BZip2.d.cts +14 -0
  41. package/dist/cjs/sevenz/codecs/BZip2.d.ts +14 -0
  42. package/dist/cjs/sevenz/codecs/BZip2.js +37 -0
  43. package/dist/cjs/sevenz/codecs/BZip2.js.map +1 -0
  44. package/dist/cjs/sevenz/codecs/Bcj.d.cts +15 -0
  45. package/dist/cjs/sevenz/codecs/Bcj.d.ts +15 -0
  46. package/dist/cjs/sevenz/codecs/Bcj.js +89 -0
  47. package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -0
  48. package/dist/cjs/sevenz/codecs/Copy.d.cts +14 -0
  49. package/dist/cjs/sevenz/codecs/Copy.d.ts +14 -0
  50. package/dist/cjs/sevenz/codecs/Copy.js +28 -0
  51. package/dist/cjs/sevenz/codecs/Copy.js.map +1 -0
  52. package/dist/cjs/sevenz/codecs/Deflate.d.cts +14 -0
  53. package/dist/cjs/sevenz/codecs/Deflate.d.ts +14 -0
  54. package/dist/cjs/sevenz/codecs/Deflate.js +39 -0
  55. package/dist/cjs/sevenz/codecs/Deflate.js.map +1 -0
  56. package/dist/cjs/sevenz/codecs/Delta.d.cts +15 -0
  57. package/dist/cjs/sevenz/codecs/Delta.d.ts +15 -0
  58. package/dist/cjs/sevenz/codecs/Delta.js +55 -0
  59. package/dist/cjs/sevenz/codecs/Delta.js.map +1 -0
  60. package/dist/cjs/sevenz/codecs/Lzma.d.cts +14 -0
  61. package/dist/cjs/sevenz/codecs/Lzma.d.ts +14 -0
  62. package/dist/cjs/sevenz/codecs/Lzma.js +53 -0
  63. package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -0
  64. package/dist/cjs/sevenz/codecs/Lzma2.d.cts +14 -0
  65. package/dist/cjs/sevenz/codecs/Lzma2.d.ts +14 -0
  66. package/dist/cjs/sevenz/codecs/Lzma2.js +160 -0
  67. package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -0
  68. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.cts +7 -0
  69. package/dist/cjs/sevenz/codecs/createBufferingDecoder.d.ts +7 -0
  70. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js +36 -0
  71. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -0
  72. package/dist/cjs/sevenz/codecs/index.d.cts +24 -0
  73. package/dist/cjs/sevenz/codecs/index.d.ts +24 -0
  74. package/dist/cjs/sevenz/codecs/index.js +128 -0
  75. package/dist/cjs/sevenz/codecs/index.js.map +1 -0
  76. package/dist/cjs/sevenz/codecs/streams.d.cts +18 -0
  77. package/dist/cjs/sevenz/codecs/streams.d.ts +18 -0
  78. package/dist/cjs/sevenz/codecs/streams.js +79 -0
  79. package/dist/cjs/sevenz/codecs/streams.js.map +1 -0
  80. package/dist/cjs/sevenz/constants.d.cts +86 -0
  81. package/dist/cjs/sevenz/constants.d.ts +86 -0
  82. package/dist/cjs/sevenz/constants.js +162 -0
  83. package/dist/cjs/sevenz/constants.js.map +1 -0
  84. package/dist/cjs/sevenz/headers.d.cts +70 -0
  85. package/dist/cjs/sevenz/headers.d.ts +70 -0
  86. package/dist/cjs/sevenz/headers.js +661 -0
  87. package/dist/cjs/sevenz/headers.js.map +1 -0
  88. package/dist/cjs/sevenz/index.d.cts +4 -0
  89. package/dist/cjs/sevenz/index.d.ts +4 -0
  90. package/dist/cjs/sevenz/index.js +33 -0
  91. package/dist/cjs/sevenz/index.js.map +1 -0
  92. package/dist/cjs/types.d.cts +37 -0
  93. package/dist/cjs/types.d.ts +37 -0
  94. package/dist/cjs/types.js +32 -0
  95. package/dist/cjs/types.js.map +1 -0
  96. package/dist/esm/FileEntry.d.ts +12 -0
  97. package/dist/esm/FileEntry.js +63 -0
  98. package/dist/esm/FileEntry.js.map +1 -0
  99. package/dist/esm/SevenZipIterator.d.ts +8 -0
  100. package/dist/esm/SevenZipIterator.js +116 -0
  101. package/dist/esm/SevenZipIterator.js.map +1 -0
  102. package/dist/esm/index.d.ts +4 -0
  103. package/dist/esm/index.js +3 -0
  104. package/dist/esm/index.js.map +1 -0
  105. package/dist/esm/lib/Lock.d.ts +11 -0
  106. package/dist/esm/lib/Lock.js +41 -0
  107. package/dist/esm/lib/Lock.js.map +1 -0
  108. package/dist/esm/lib/streamToSource.d.ts +20 -0
  109. package/dist/esm/lib/streamToSource.js +100 -0
  110. package/dist/esm/lib/streamToSource.js.map +1 -0
  111. package/dist/esm/nextEntry.d.ts +4 -0
  112. package/dist/esm/nextEntry.js +86 -0
  113. package/dist/esm/nextEntry.js.map +1 -0
  114. package/dist/esm/package.json +1 -0
  115. package/dist/esm/sevenz/NumberCodec.d.ts +58 -0
  116. package/dist/esm/sevenz/NumberCodec.js +138 -0
  117. package/dist/esm/sevenz/NumberCodec.js.map +1 -0
  118. package/dist/esm/sevenz/SevenZipParser.d.ts +96 -0
  119. package/dist/esm/sevenz/SevenZipParser.js +419 -0
  120. package/dist/esm/sevenz/SevenZipParser.js.map +1 -0
  121. package/dist/esm/sevenz/codecs/Aes.d.ts +22 -0
  122. package/dist/esm/sevenz/codecs/Aes.js +162 -0
  123. package/dist/esm/sevenz/codecs/Aes.js.map +1 -0
  124. package/dist/esm/sevenz/codecs/BZip2.d.ts +14 -0
  125. package/dist/esm/sevenz/codecs/BZip2.js +22 -0
  126. package/dist/esm/sevenz/codecs/BZip2.js.map +1 -0
  127. package/dist/esm/sevenz/codecs/Bcj.d.ts +15 -0
  128. package/dist/esm/sevenz/codecs/Bcj.js +75 -0
  129. package/dist/esm/sevenz/codecs/Bcj.js.map +1 -0
  130. package/dist/esm/sevenz/codecs/Copy.d.ts +14 -0
  131. package/dist/esm/sevenz/codecs/Copy.js +18 -0
  132. package/dist/esm/sevenz/codecs/Copy.js.map +1 -0
  133. package/dist/esm/sevenz/codecs/Deflate.d.ts +14 -0
  134. package/dist/esm/sevenz/codecs/Deflate.js +24 -0
  135. package/dist/esm/sevenz/codecs/Deflate.js.map +1 -0
  136. package/dist/esm/sevenz/codecs/Delta.d.ts +15 -0
  137. package/dist/esm/sevenz/codecs/Delta.js +41 -0
  138. package/dist/esm/sevenz/codecs/Delta.js.map +1 -0
  139. package/dist/esm/sevenz/codecs/Lzma.d.ts +14 -0
  140. package/dist/esm/sevenz/codecs/Lzma.js +38 -0
  141. package/dist/esm/sevenz/codecs/Lzma.js.map +1 -0
  142. package/dist/esm/sevenz/codecs/Lzma2.d.ts +14 -0
  143. package/dist/esm/sevenz/codecs/Lzma2.js +145 -0
  144. package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -0
  145. package/dist/esm/sevenz/codecs/createBufferingDecoder.d.ts +7 -0
  146. package/dist/esm/sevenz/codecs/createBufferingDecoder.js +25 -0
  147. package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -0
  148. package/dist/esm/sevenz/codecs/index.d.ts +24 -0
  149. package/dist/esm/sevenz/codecs/index.js +108 -0
  150. package/dist/esm/sevenz/codecs/index.js.map +1 -0
  151. package/dist/esm/sevenz/codecs/streams.d.ts +18 -0
  152. package/dist/esm/sevenz/codecs/streams.js +66 -0
  153. package/dist/esm/sevenz/codecs/streams.js.map +1 -0
  154. package/dist/esm/sevenz/constants.d.ts +86 -0
  155. package/dist/esm/sevenz/constants.js +131 -0
  156. package/dist/esm/sevenz/constants.js.map +1 -0
  157. package/dist/esm/sevenz/headers.d.ts +70 -0
  158. package/dist/esm/sevenz/headers.js +646 -0
  159. package/dist/esm/sevenz/headers.js.map +1 -0
  160. package/dist/esm/sevenz/index.d.ts +4 -0
  161. package/dist/esm/sevenz/index.js +5 -0
  162. package/dist/esm/sevenz/index.js.map +1 -0
  163. package/dist/esm/types.d.ts +37 -0
  164. package/dist/esm/types.js +2 -0
  165. package/dist/esm/types.js.map +1 -0
  166. package/package.json +77 -0
@@ -0,0 +1,39 @@
1
+ // Deflate codec - standard zlib/zip compression
2
+ // 7z uses raw deflate without zlib or gzip headers
3
+ //
4
+ // Uses pako for pure JavaScript decompression (works on all Node versions)
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ function _export(target, all) {
10
+ for(var name in all)Object.defineProperty(target, name, {
11
+ enumerable: true,
12
+ get: Object.getOwnPropertyDescriptor(all, name).get
13
+ });
14
+ }
15
+ _export(exports, {
16
+ get createDeflateDecoder () {
17
+ return createDeflateDecoder;
18
+ },
19
+ get decodeDeflate () {
20
+ return decodeDeflate;
21
+ }
22
+ });
23
+ var _extractbaseiterator = require("extract-base-iterator");
24
+ var _pako = /*#__PURE__*/ _interop_require_default(require("pako"));
25
+ var _createBufferingDecoderts = /*#__PURE__*/ _interop_require_default(require("./createBufferingDecoder.js"));
26
+ function _interop_require_default(obj) {
27
+ return obj && obj.__esModule ? obj : {
28
+ default: obj
29
+ };
30
+ }
31
+ function decodeDeflate(input, _properties, _unpackSize) {
32
+ // pako.inflateRaw returns Uint8Array, convert to Buffer
33
+ var result = _pako.default.inflateRaw(input);
34
+ return (0, _extractbaseiterator.bufferFrom)(result);
35
+ }
36
+ function createDeflateDecoder(properties, unpackSize) {
37
+ return (0, _createBufferingDecoderts.default)(decodeDeflate, properties, unpackSize);
38
+ }
39
+ /* 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/sevenz/codecs/Deflate.ts"],"sourcesContent":["// Deflate codec - standard zlib/zip compression\n// 7z uses raw deflate without zlib or gzip headers\n//\n// Uses pako for pure JavaScript decompression (works on all Node versions)\n\nimport { bufferFrom } from 'extract-base-iterator';\nimport pako from 'pako';\nimport type { Transform } from 'readable-stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\n\n/**\n * Decode Deflate compressed data\n *\n * @param input - Deflate compressed data\n * @param _properties - Unused for Deflate\n * @param _unpackSize - Unused for Deflate\n * @returns Decompressed data\n */\nexport function decodeDeflate(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n // pako.inflateRaw returns Uint8Array, convert to Buffer\n var result = pako.inflateRaw(input);\n return bufferFrom(result);\n}\n\n/**\n * Create a Deflate decoder Transform stream\n */\nexport function createDeflateDecoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeDeflate, properties, unpackSize);\n}\n"],"names":["createDeflateDecoder","decodeDeflate","input","_properties","_unpackSize","result","pako","inflateRaw","bufferFrom","properties","unpackSize","createBufferingDecoder"],"mappings":"AAAA,gDAAgD;AAChD,mDAAmD;AACnD,EAAE;AACF,2EAA2E;;;;;;;;;;;;QAwB3DA;eAAAA;;QATAC;eAAAA;;;mCAbW;2DACV;+EAEkB;;;;;;AAU5B,SAASA,cAAcC,KAAa,EAAEC,WAAoB,EAAEC,WAAoB;IACrF,wDAAwD;IACxD,IAAIC,SAASC,aAAI,CAACC,UAAU,CAACL;IAC7B,OAAOM,IAAAA,+BAAU,EAACH;AACpB;AAKO,SAASL,qBAAqBS,UAAmB,EAAEC,UAAmB;IAC3E,OAAOC,IAAAA,iCAAsB,EAACV,eAAeQ,YAAYC;AAC3D"}
@@ -0,0 +1,15 @@
1
+ import type { Transform } from 'readable-stream';
2
+ /**
3
+ * Decode Delta filtered data
4
+ * Reverses the delta transformation by adding previous values
5
+ *
6
+ * @param input - Delta filtered data
7
+ * @param properties - Optional 1-byte properties (distance - 1)
8
+ * @param _unpackSize - Unused for Delta
9
+ * @returns Unfiltered data
10
+ */
11
+ export declare function decodeDelta(input: Buffer, properties?: Buffer, _unpackSize?: number): Buffer;
12
+ /**
13
+ * Create a Delta decoder Transform stream
14
+ */
15
+ export declare function createDeltaDecoder(properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,15 @@
1
+ import type { Transform } from 'readable-stream';
2
+ /**
3
+ * Decode Delta filtered data
4
+ * Reverses the delta transformation by adding previous values
5
+ *
6
+ * @param input - Delta filtered data
7
+ * @param properties - Optional 1-byte properties (distance - 1)
8
+ * @param _unpackSize - Unused for Delta
9
+ * @returns Unfiltered data
10
+ */
11
+ export declare function decodeDelta(input: Buffer, properties?: Buffer, _unpackSize?: number): Buffer;
12
+ /**
13
+ * Create a Delta decoder Transform stream
14
+ */
15
+ export declare function createDeltaDecoder(properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,55 @@
1
+ // Delta filter codec - stores differences between consecutive bytes
2
+ // Useful for data with gradual changes (images, audio, sensor data)
3
+ //
4
+ // The Delta filter stores the difference between each byte and the byte
5
+ // N positions before it, where N is the "distance" parameter (default 1).
6
+ // This makes data with regular patterns more compressible.
7
+ "use strict";
8
+ Object.defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ function _export(target, all) {
12
+ for(var name in all)Object.defineProperty(target, name, {
13
+ enumerable: true,
14
+ get: Object.getOwnPropertyDescriptor(all, name).get
15
+ });
16
+ }
17
+ _export(exports, {
18
+ get createDeltaDecoder () {
19
+ return createDeltaDecoder;
20
+ },
21
+ get decodeDelta () {
22
+ return decodeDelta;
23
+ }
24
+ });
25
+ var _extractbaseiterator = require("extract-base-iterator");
26
+ var _createBufferingDecoderts = /*#__PURE__*/ _interop_require_default(require("./createBufferingDecoder.js"));
27
+ function _interop_require_default(obj) {
28
+ return obj && obj.__esModule ? obj : {
29
+ default: obj
30
+ };
31
+ }
32
+ function decodeDelta(input, properties, _unpackSize) {
33
+ // Distance parameter: default is 1
34
+ var distance = 1;
35
+ if (properties && properties.length >= 1) {
36
+ // Properties byte contains (distance - 1)
37
+ distance = properties[0] + 1;
38
+ }
39
+ var output = (0, _extractbaseiterator.bufferFrom)(input); // Copy since we modify in place
40
+ // State buffer for multi-byte distance
41
+ var state = new Array(distance);
42
+ for(var i = 0; i < distance; i++){
43
+ state[i] = 0;
44
+ }
45
+ for(var j = 0; j < output.length; j++){
46
+ var idx = j % distance;
47
+ state[idx] = state[idx] + output[j] & 0xff;
48
+ output[j] = state[idx];
49
+ }
50
+ return output;
51
+ }
52
+ function createDeltaDecoder(properties, unpackSize) {
53
+ return (0, _createBufferingDecoderts.default)(decodeDelta, properties, unpackSize);
54
+ }
55
+ /* 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/sevenz/codecs/Delta.ts"],"sourcesContent":["// Delta filter codec - stores differences between consecutive bytes\n// Useful for data with gradual changes (images, audio, sensor data)\n//\n// The Delta filter stores the difference between each byte and the byte\n// N positions before it, where N is the \"distance\" parameter (default 1).\n// This makes data with regular patterns more compressible.\n\nimport { bufferFrom } from 'extract-base-iterator';\nimport type { Transform } from 'readable-stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\n\n/**\n * Decode Delta filtered data\n * Reverses the delta transformation by adding previous values\n *\n * @param input - Delta filtered data\n * @param properties - Optional 1-byte properties (distance - 1)\n * @param _unpackSize - Unused for Delta\n * @returns Unfiltered data\n */\nexport function decodeDelta(input: Buffer, properties?: Buffer, _unpackSize?: number): Buffer {\n // Distance parameter: default is 1\n var distance = 1;\n if (properties && properties.length >= 1) {\n // Properties byte contains (distance - 1)\n distance = properties[0] + 1;\n }\n\n var output = bufferFrom(input); // Copy since we modify in place\n\n // State buffer for multi-byte distance\n var state = new Array(distance);\n for (var i = 0; i < distance; i++) {\n state[i] = 0;\n }\n\n for (var j = 0; j < output.length; j++) {\n var idx = j % distance;\n state[idx] = (state[idx] + output[j]) & 0xff;\n output[j] = state[idx];\n }\n\n return output;\n}\n\n/**\n * Create a Delta decoder Transform stream\n */\nexport function createDeltaDecoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeDelta, properties, unpackSize);\n}\n"],"names":["createDeltaDecoder","decodeDelta","input","properties","_unpackSize","distance","length","output","bufferFrom","state","Array","i","j","idx","unpackSize","createBufferingDecoder"],"mappings":"AAAA,oEAAoE;AACpE,oEAAoE;AACpE,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,2DAA2D;;;;;;;;;;;;QA2C3CA;eAAAA;;QA5BAC;eAAAA;;;mCAbW;+EAEQ;;;;;;AAW5B,SAASA,YAAYC,KAAa,EAAEC,UAAmB,EAAEC,WAAoB;IAClF,mCAAmC;IACnC,IAAIC,WAAW;IACf,IAAIF,cAAcA,WAAWG,MAAM,IAAI,GAAG;QACxC,0CAA0C;QAC1CD,WAAWF,UAAU,CAAC,EAAE,GAAG;IAC7B;IAEA,IAAII,SAASC,IAAAA,+BAAU,EAACN,QAAQ,gCAAgC;IAEhE,uCAAuC;IACvC,IAAIO,QAAQ,IAAIC,MAAML;IACtB,IAAK,IAAIM,IAAI,GAAGA,IAAIN,UAAUM,IAAK;QACjCF,KAAK,CAACE,EAAE,GAAG;IACb;IAEA,IAAK,IAAIC,IAAI,GAAGA,IAAIL,OAAOD,MAAM,EAAEM,IAAK;QACtC,IAAIC,MAAMD,IAAIP;QACdI,KAAK,CAACI,IAAI,GAAG,AAACJ,KAAK,CAACI,IAAI,GAAGN,MAAM,CAACK,EAAE,GAAI;QACxCL,MAAM,CAACK,EAAE,GAAGH,KAAK,CAACI,IAAI;IACxB;IAEA,OAAON;AACT;AAKO,SAASP,mBAAmBG,UAAmB,EAAEW,UAAmB;IACzE,OAAOC,IAAAA,iCAAsB,EAACd,aAAaE,YAAYW;AACzD"}
@@ -0,0 +1,14 @@
1
+ import type { Transform } from 'readable-stream';
2
+ /**
3
+ * Decode LZMA compressed data to buffer
4
+ *
5
+ * @param input - LZMA compressed data
6
+ * @param properties - Properties buffer (5 bytes: lc/lp/pb + dict size)
7
+ * @param unpackSize - Expected output size (optional, -1 for unknown)
8
+ * @returns Decompressed data
9
+ */
10
+ export declare function decodeLzma(input: Buffer, properties?: Buffer, unpackSize?: number): Buffer;
11
+ /**
12
+ * Create an LZMA decoder Transform stream
13
+ */
14
+ export declare function createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,14 @@
1
+ import type { Transform } from 'readable-stream';
2
+ /**
3
+ * Decode LZMA compressed data to buffer
4
+ *
5
+ * @param input - LZMA compressed data
6
+ * @param properties - Properties buffer (5 bytes: lc/lp/pb + dict size)
7
+ * @param unpackSize - Expected output size (optional, -1 for unknown)
8
+ * @returns Decompressed data
9
+ */
10
+ export declare function decodeLzma(input: Buffer, properties?: Buffer, unpackSize?: number): Buffer;
11
+ /**
12
+ * Create an LZMA decoder Transform stream
13
+ */
14
+ export declare function createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,53 @@
1
+ // LZMA codec - uses lzma-purejs for raw LZMA decompression
2
+ // LZMA properties in 7z are 5 bytes: 1 byte lc/lp/pb + 4 bytes dictionary size (little-endian)
3
+ // Import lzma-purejs - provides raw LZMA decoder
4
+ "use strict";
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ function _export(target, all) {
9
+ for(var name in all)Object.defineProperty(target, name, {
10
+ enumerable: true,
11
+ get: Object.getOwnPropertyDescriptor(all, name).get
12
+ });
13
+ }
14
+ _export(exports, {
15
+ get createLzmaDecoder () {
16
+ return createLzmaDecoder;
17
+ },
18
+ get decodeLzma () {
19
+ return decodeLzma;
20
+ }
21
+ });
22
+ var _lzmapurejs = /*#__PURE__*/ _interop_require_default(require("lzma-purejs"));
23
+ var _createBufferingDecoderts = /*#__PURE__*/ _interop_require_default(require("./createBufferingDecoder.js"));
24
+ var _streamsts = require("./streams.js");
25
+ function _interop_require_default(obj) {
26
+ return obj && obj.__esModule ? obj : {
27
+ default: obj
28
+ };
29
+ }
30
+ var LzmaDecoder = _lzmapurejs.default.LZMA.Decoder;
31
+ function decodeLzma(input, properties, unpackSize) {
32
+ if (!properties || properties.length < 5) {
33
+ throw new Error('LZMA requires 5-byte properties');
34
+ }
35
+ var decoder = new LzmaDecoder();
36
+ // setDecoderProperties expects array-like with 5 bytes
37
+ if (!decoder.setDecoderProperties(properties)) {
38
+ throw new Error('Invalid LZMA properties');
39
+ }
40
+ var inStream = (0, _streamsts.createInputStream)(input, 0, input.length);
41
+ var outStream = (0, _streamsts.createOutputStream)();
42
+ // Use -1 for unknown size (decoder will use end marker)
43
+ var size = typeof unpackSize === 'number' ? unpackSize : -1;
44
+ var success = decoder.code(inStream, outStream, size);
45
+ if (!success) {
46
+ throw new Error('LZMA decompression failed');
47
+ }
48
+ return outStream.toBuffer();
49
+ }
50
+ function createLzmaDecoder(properties, unpackSize) {
51
+ return (0, _createBufferingDecoderts.default)(decodeLzma, properties, unpackSize);
52
+ }
53
+ /* 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/sevenz/codecs/Lzma.ts"],"sourcesContent":["// LZMA codec - uses lzma-purejs for raw LZMA decompression\n// LZMA properties in 7z are 5 bytes: 1 byte lc/lp/pb + 4 bytes dictionary size (little-endian)\n\n// Import lzma-purejs - provides raw LZMA decoder\nimport lzmajs from 'lzma-purejs';\nimport type { Transform } from 'readable-stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\nimport { createInputStream, createOutputStream } from './streams.ts';\n\nvar LzmaDecoder = lzmajs.LZMA.Decoder;\n\n/**\n * Decode LZMA compressed data to buffer\n *\n * @param input - LZMA compressed data\n * @param properties - Properties buffer (5 bytes: lc/lp/pb + dict size)\n * @param unpackSize - Expected output size (optional, -1 for unknown)\n * @returns Decompressed data\n */\nexport function decodeLzma(input: Buffer, properties?: Buffer, unpackSize?: number): Buffer {\n if (!properties || properties.length < 5) {\n throw new Error('LZMA requires 5-byte properties');\n }\n\n var decoder = new LzmaDecoder();\n\n // setDecoderProperties expects array-like with 5 bytes\n if (!decoder.setDecoderProperties(properties)) {\n throw new Error('Invalid LZMA properties');\n }\n\n var inStream = createInputStream(input, 0, input.length);\n var outStream = createOutputStream();\n\n // Use -1 for unknown size (decoder will use end marker)\n var size = typeof unpackSize === 'number' ? unpackSize : -1;\n\n var success = decoder.code(inStream, outStream, size);\n if (!success) {\n throw new Error('LZMA decompression failed');\n }\n\n return outStream.toBuffer();\n}\n\n/**\n * Create an LZMA decoder Transform stream\n */\nexport function createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeLzma, properties, unpackSize);\n}\n"],"names":["createLzmaDecoder","decodeLzma","LzmaDecoder","lzmajs","LZMA","Decoder","input","properties","unpackSize","length","Error","decoder","setDecoderProperties","inStream","createInputStream","outStream","createOutputStream","size","success","code","toBuffer","createBufferingDecoder"],"mappings":"AAAA,2DAA2D;AAC3D,+FAA+F;AAE/F,iDAAiD;;;;;;;;;;;;QA6CjCA;eAAAA;;QA7BAC;eAAAA;;;iEAfG;+EAEgB;yBACmB;;;;;;AAEtD,IAAIC,cAAcC,mBAAM,CAACC,IAAI,CAACC,OAAO;AAU9B,SAASJ,WAAWK,KAAa,EAAEC,UAAmB,EAAEC,UAAmB;IAChF,IAAI,CAACD,cAAcA,WAAWE,MAAM,GAAG,GAAG;QACxC,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAIC,UAAU,IAAIT;IAElB,uDAAuD;IACvD,IAAI,CAACS,QAAQC,oBAAoB,CAACL,aAAa;QAC7C,MAAM,IAAIG,MAAM;IAClB;IAEA,IAAIG,WAAWC,IAAAA,4BAAiB,EAACR,OAAO,GAAGA,MAAMG,MAAM;IACvD,IAAIM,YAAYC,IAAAA,6BAAkB;IAElC,wDAAwD;IACxD,IAAIC,OAAO,OAAOT,eAAe,WAAWA,aAAa,CAAC;IAE1D,IAAIU,UAAUP,QAAQQ,IAAI,CAACN,UAAUE,WAAWE;IAChD,IAAI,CAACC,SAAS;QACZ,MAAM,IAAIR,MAAM;IAClB;IAEA,OAAOK,UAAUK,QAAQ;AAC3B;AAKO,SAASpB,kBAAkBO,UAAmB,EAAEC,UAAmB;IACxE,OAAOa,IAAAA,iCAAsB,EAACpB,YAAYM,YAAYC;AACxD"}
@@ -0,0 +1,14 @@
1
+ import type { Transform } from 'readable-stream';
2
+ /**
3
+ * Decode LZMA2 compressed data to buffer
4
+ *
5
+ * @param input - LZMA2 compressed data
6
+ * @param properties - Properties buffer (1 byte: dictionary size)
7
+ * @param _unpackSize - Unused (LZMA2 has internal size markers)
8
+ * @returns Decompressed data
9
+ */
10
+ export declare function decodeLzma2(input: Buffer, properties?: Buffer, _unpackSize?: number): Buffer;
11
+ /**
12
+ * Create an LZMA2 decoder Transform stream
13
+ */
14
+ export declare function createLzma2Decoder(properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,14 @@
1
+ import type { Transform } from 'readable-stream';
2
+ /**
3
+ * Decode LZMA2 compressed data to buffer
4
+ *
5
+ * @param input - LZMA2 compressed data
6
+ * @param properties - Properties buffer (1 byte: dictionary size)
7
+ * @param _unpackSize - Unused (LZMA2 has internal size markers)
8
+ * @returns Decompressed data
9
+ */
10
+ export declare function decodeLzma2(input: Buffer, properties?: Buffer, _unpackSize?: number): Buffer;
11
+ /**
12
+ * Create an LZMA2 decoder Transform stream
13
+ */
14
+ export declare function createLzma2Decoder(properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,160 @@
1
+ // LZMA2 codec - wrapper around lzma-purejs for LZMA2 decompression
2
+ // LZMA2 is a container format that wraps LZMA chunks with framing
3
+ //
4
+ // LZMA2 format specification:
5
+ // https://github.com/ulikunitz/xz/blob/master/doc/LZMA2.md
6
+ //
7
+ // Control byte values:
8
+ // 0x00 = End of stream
9
+ // 0x01 = Uncompressed chunk, dictionary reset
10
+ // 0x02 = Uncompressed chunk, no dictionary reset
11
+ // 0x80-0xFF = LZMA compressed chunk (bits encode reset flags and size)
12
+ // Import lzma-purejs - provides raw LZMA decoder
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 decodeLzma2 () {
28
+ return decodeLzma2;
29
+ }
30
+ });
31
+ var _lzmapurejs = /*#__PURE__*/ _interop_require_default(require("lzma-purejs"));
32
+ var _createBufferingDecoderts = /*#__PURE__*/ _interop_require_default(require("./createBufferingDecoder.js"));
33
+ var _streamsts = require("./streams.js");
34
+ function _interop_require_default(obj) {
35
+ return obj && obj.__esModule ? obj : {
36
+ default: obj
37
+ };
38
+ }
39
+ var LzmaDecoder = _lzmapurejs.default.LZMA.Decoder;
40
+ /**
41
+ * Decode LZMA2 dictionary size from properties byte
42
+ * Properties byte encodes dictionary size as: 2^(dictByte/2 + 12) or similar
43
+ *
44
+ * Per XZ spec, dictionary sizes are:
45
+ * 0x00 = 4 KiB (2^12)
46
+ * 0x01 = 6 KiB
47
+ * 0x02 = 8 KiB (2^13)
48
+ * ...
49
+ * 0x28 = 1.5 GiB
50
+ */ function decodeDictionarySize(propByte) {
51
+ if (propByte > 40) {
52
+ throw new Error("Invalid LZMA2 dictionary size property: ".concat(propByte));
53
+ }
54
+ if (propByte === 40) {
55
+ // Max dictionary size: 4 GiB - 1
56
+ return 0xffffffff;
57
+ }
58
+ // Dictionary size = 2 | (propByte & 1) << (propByte / 2 + 11)
59
+ var base = 2 | propByte & 1;
60
+ var shift = Math.floor(propByte / 2) + 11;
61
+ return base << shift;
62
+ }
63
+ function decodeLzma2(input, properties, _unpackSize) {
64
+ if (!properties || properties.length < 1) {
65
+ throw new Error('LZMA2 requires properties byte');
66
+ }
67
+ var dictSize = decodeDictionarySize(properties[0]);
68
+ var output = [];
69
+ var offset = 0;
70
+ // LZMA decoder instance - reused across chunks
71
+ var decoder = new LzmaDecoder();
72
+ decoder.setDictionarySize(dictSize);
73
+ // Track current LZMA properties (lc, lp, pb)
74
+ var propsSet = false;
75
+ while(offset < input.length){
76
+ var control = input[offset++];
77
+ if (control === 0x00) {
78
+ break;
79
+ }
80
+ if (control === 0x01 || control === 0x02) {
81
+ // Uncompressed chunk
82
+ // 0x01 = dictionary reset + uncompressed
83
+ // 0x02 = uncompressed (no reset)
84
+ // Note: Dictionary reset (0x01) is handled implicitly since we don't
85
+ // maintain dictionary state across uncompressed chunks in this implementation
86
+ if (offset + 2 > input.length) {
87
+ throw new Error('Truncated LZMA2 uncompressed chunk header');
88
+ }
89
+ // Size is big-endian, 16-bit, value + 1
90
+ var uncompSize = (input[offset] << 8 | input[offset + 1]) + 1;
91
+ offset += 2;
92
+ if (offset + uncompSize > input.length) {
93
+ throw new Error('Truncated LZMA2 uncompressed data');
94
+ }
95
+ // Copy uncompressed data
96
+ output.push(input.slice(offset, offset + uncompSize));
97
+ offset += uncompSize;
98
+ } else if (control >= 0x80) {
99
+ // LZMA compressed chunk
100
+ // Control byte format (bits 7-0):
101
+ // Bit 7: always 1 for LZMA chunk
102
+ // Bit 6: reset state
103
+ // Bit 5: new properties (implies state reset)
104
+ // Bits 4-0: high 5 bits of uncompressed size - 1
105
+ var newProps = (control & 0x20) !== 0;
106
+ if (offset + 4 > input.length) {
107
+ throw new Error('Truncated LZMA2 LZMA chunk header');
108
+ }
109
+ // Uncompressed size: 5 bits from control + 16 bits from next 2 bytes + 1
110
+ var uncompHigh = control & 0x1f;
111
+ var uncompSize2 = (uncompHigh << 16 | input[offset] << 8 | input[offset + 1]) + 1;
112
+ offset += 2;
113
+ // Compressed size: 16 bits + 1
114
+ var compSize = (input[offset] << 8 | input[offset + 1]) + 1;
115
+ offset += 2;
116
+ // If new properties, read 1-byte LZMA properties
117
+ if (newProps) {
118
+ if (offset >= input.length) {
119
+ throw new Error('Truncated LZMA2 properties byte');
120
+ }
121
+ var propsByte = input[offset++];
122
+ // Properties byte: pb * 45 + lp * 9 + lc
123
+ // where pb, lp, lc are LZMA parameters
124
+ var lc = propsByte % 9;
125
+ var remainder = Math.floor(propsByte / 9);
126
+ var lp = remainder % 5;
127
+ var pb = Math.floor(remainder / 5);
128
+ if (!decoder.setLcLpPb(lc, lp, pb)) {
129
+ throw new Error("Invalid LZMA properties: lc=".concat(lc, " lp=").concat(lp, " pb=").concat(pb));
130
+ }
131
+ propsSet = true;
132
+ }
133
+ if (!propsSet) {
134
+ throw new Error('LZMA chunk without properties');
135
+ }
136
+ if (offset + compSize > input.length) {
137
+ throw new Error('Truncated LZMA2 compressed data');
138
+ }
139
+ // Decode LZMA chunk
140
+ var inStream = (0, _streamsts.createInputStream)(input, offset, compSize);
141
+ var outStream = (0, _streamsts.createOutputStream)();
142
+ // Note: decoder.code() internally calls init() after setting streams
143
+ // For LZMA2, the decoder state is managed per-chunk through props resets
144
+ // Decode the chunk
145
+ var success = decoder.code(inStream, outStream, uncompSize2);
146
+ if (!success) {
147
+ throw new Error('LZMA decompression failed');
148
+ }
149
+ output.push(outStream.toBuffer());
150
+ offset += compSize;
151
+ } else {
152
+ throw new Error("Invalid LZMA2 control byte: 0x".concat(control.toString(16)));
153
+ }
154
+ }
155
+ return Buffer.concat(output);
156
+ }
157
+ function createLzma2Decoder(properties, unpackSize) {
158
+ return (0, _createBufferingDecoderts.default)(decodeLzma2, properties, unpackSize);
159
+ }
160
+ /* 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/sevenz/codecs/Lzma2.ts"],"sourcesContent":["// LZMA2 codec - wrapper around lzma-purejs for LZMA2 decompression\n// LZMA2 is a container format that wraps LZMA chunks with framing\n//\n// LZMA2 format specification:\n// https://github.com/ulikunitz/xz/blob/master/doc/LZMA2.md\n//\n// Control byte values:\n// 0x00 = End of stream\n// 0x01 = Uncompressed chunk, dictionary reset\n// 0x02 = Uncompressed chunk, no dictionary reset\n// 0x80-0xFF = LZMA compressed chunk (bits encode reset flags and size)\n\n// Import lzma-purejs - provides raw LZMA decoder\nimport lzmajs from 'lzma-purejs';\nimport type { Transform } from 'readable-stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\nimport { createInputStream, createOutputStream } from './streams.ts';\n\nvar LzmaDecoder = lzmajs.LZMA.Decoder;\n\n/**\n * Decode LZMA2 dictionary size from properties byte\n * Properties byte encodes dictionary size as: 2^(dictByte/2 + 12) or similar\n *\n * Per XZ spec, dictionary sizes are:\n * 0x00 = 4 KiB (2^12)\n * 0x01 = 6 KiB\n * 0x02 = 8 KiB (2^13)\n * ...\n * 0x28 = 1.5 GiB\n */\nfunction decodeDictionarySize(propByte: number): number {\n if (propByte > 40) {\n throw new Error(`Invalid LZMA2 dictionary size property: ${propByte}`);\n }\n if (propByte === 40) {\n // Max dictionary size: 4 GiB - 1\n return 0xffffffff;\n }\n // Dictionary size = 2 | (propByte & 1) << (propByte / 2 + 11)\n var base = 2 | (propByte & 1);\n var shift = Math.floor(propByte / 2) + 11;\n return base << shift;\n}\n\n/**\n * Decode LZMA2 compressed data to buffer\n *\n * @param input - LZMA2 compressed data\n * @param properties - Properties buffer (1 byte: dictionary size)\n * @param _unpackSize - Unused (LZMA2 has internal size markers)\n * @returns Decompressed data\n */\nexport function decodeLzma2(input: Buffer, properties?: Buffer, _unpackSize?: number): Buffer {\n if (!properties || properties.length < 1) {\n throw new Error('LZMA2 requires properties byte');\n }\n\n var dictSize = decodeDictionarySize(properties[0]);\n var output: Buffer[] = [];\n var offset = 0;\n\n // LZMA decoder instance - reused across chunks\n var decoder = new LzmaDecoder();\n decoder.setDictionarySize(dictSize);\n\n // Track current LZMA properties (lc, lp, pb)\n var propsSet = false;\n\n while (offset < input.length) {\n var control = input[offset++];\n\n if (control === 0x00) {\n // End of LZMA2 stream\n break;\n }\n\n if (control === 0x01 || control === 0x02) {\n // Uncompressed chunk\n // 0x01 = dictionary reset + uncompressed\n // 0x02 = uncompressed (no reset)\n // Note: Dictionary reset (0x01) is handled implicitly since we don't\n // maintain dictionary state across uncompressed chunks in this implementation\n\n if (offset + 2 > input.length) {\n throw new Error('Truncated LZMA2 uncompressed chunk header');\n }\n\n // Size is big-endian, 16-bit, value + 1\n var uncompSize = ((input[offset] << 8) | input[offset + 1]) + 1;\n offset += 2;\n\n if (offset + uncompSize > input.length) {\n throw new Error('Truncated LZMA2 uncompressed data');\n }\n\n // Copy uncompressed data\n output.push(input.slice(offset, offset + uncompSize));\n offset += uncompSize;\n } else if (control >= 0x80) {\n // LZMA compressed chunk\n // Control byte format (bits 7-0):\n // Bit 7: always 1 for LZMA chunk\n // Bit 6: reset state\n // Bit 5: new properties (implies state reset)\n // Bits 4-0: high 5 bits of uncompressed size - 1\n\n var newProps = (control & 0x20) !== 0;\n\n if (offset + 4 > input.length) {\n throw new Error('Truncated LZMA2 LZMA chunk header');\n }\n\n // Uncompressed size: 5 bits from control + 16 bits from next 2 bytes + 1\n var uncompHigh = control & 0x1f;\n var uncompSize2 = ((uncompHigh << 16) | (input[offset] << 8) | input[offset + 1]) + 1;\n offset += 2;\n\n // Compressed size: 16 bits + 1\n var compSize = ((input[offset] << 8) | input[offset + 1]) + 1;\n offset += 2;\n\n // If new properties, read 1-byte LZMA properties\n if (newProps) {\n if (offset >= input.length) {\n throw new Error('Truncated LZMA2 properties byte');\n }\n var propsByte = input[offset++];\n\n // Properties byte: pb * 45 + lp * 9 + lc\n // where pb, lp, lc are LZMA parameters\n var lc = propsByte % 9;\n var remainder = Math.floor(propsByte / 9);\n var lp = remainder % 5;\n var pb = Math.floor(remainder / 5);\n\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 if (offset + compSize > input.length) {\n throw new Error('Truncated LZMA2 compressed data');\n }\n\n // Decode LZMA chunk\n var inStream = createInputStream(input, offset, compSize);\n var outStream = createOutputStream();\n\n // Note: decoder.code() internally calls init() after setting streams\n // For LZMA2, the decoder state is managed per-chunk through props resets\n\n // Decode the chunk\n var success = decoder.code(inStream, outStream, uncompSize2);\n if (!success) {\n throw new Error('LZMA decompression failed');\n }\n\n output.push(outStream.toBuffer());\n offset += compSize;\n } else {\n throw new Error(`Invalid LZMA2 control byte: 0x${control.toString(16)}`);\n }\n }\n\n return Buffer.concat(output);\n}\n\n/**\n * Create an LZMA2 decoder Transform stream\n */\nexport function createLzma2Decoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeLzma2, properties, unpackSize);\n}\n"],"names":["createLzma2Decoder","decodeLzma2","LzmaDecoder","lzmajs","LZMA","Decoder","decodeDictionarySize","propByte","Error","base","shift","Math","floor","input","properties","_unpackSize","length","dictSize","output","offset","decoder","setDictionarySize","propsSet","control","uncompSize","push","slice","newProps","uncompHigh","uncompSize2","compSize","propsByte","lc","remainder","lp","pb","setLcLpPb","inStream","createInputStream","outStream","createOutputStream","success","code","toBuffer","toString","Buffer","concat","unpackSize","createBufferingDecoder"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Transform } from 'readable-stream';
2
+ export type DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;
3
+ /**
4
+ * Create a Transform stream that buffers all input, then decodes in flush
5
+ * This is the common pattern for codecs that can't stream (need full input)
6
+ */
7
+ export default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,7 @@
1
+ import { Transform } from 'readable-stream';
2
+ export type DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;
3
+ /**
4
+ * Create a Transform stream that buffers all input, then decodes in flush
5
+ * This is the common pattern for codecs that can't stream (need full input)
6
+ */
7
+ export default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): Transform;
@@ -0,0 +1,36 @@
1
+ // Helper to create a Transform stream that buffers all input before decoding
2
+ // Used by codecs that need the full input before decompression (LZMA, LZMA2, BZip2, etc.)
3
+ "use strict";
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, /**
8
+ * Create a Transform stream that buffers all input, then decodes in flush
9
+ * This is the common pattern for codecs that can't stream (need full input)
10
+ */ "default", {
11
+ enumerable: true,
12
+ get: function() {
13
+ return createBufferingDecoder;
14
+ }
15
+ });
16
+ var _readablestream = require("readable-stream");
17
+ function createBufferingDecoder(decodeFn, properties, unpackSize) {
18
+ var chunks = [];
19
+ return new _readablestream.Transform({
20
+ transform: function(chunk, _encoding, callback) {
21
+ chunks.push(chunk);
22
+ callback();
23
+ },
24
+ flush: function flush(callback) {
25
+ try {
26
+ var input = Buffer.concat(chunks);
27
+ var output = decodeFn(input, properties, unpackSize);
28
+ this.push(output);
29
+ callback();
30
+ } catch (err) {
31
+ callback(err);
32
+ }
33
+ }
34
+ });
35
+ }
36
+ /* 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/sevenz/codecs/createBufferingDecoder.ts"],"sourcesContent":["// Helper to create a Transform stream that buffers all input before decoding\n// Used by codecs that need the full input before decompression (LZMA, LZMA2, BZip2, etc.)\n\nimport { Transform, type TransformCallback } from 'readable-stream';\n\nexport type DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;\n\n/**\n * Create a Transform stream that buffers all input, then decodes in flush\n * This is the common pattern for codecs that can't stream (need full input)\n */\nexport default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): Transform {\n var chunks: Buffer[] = [];\n\n return new Transform({\n transform: (chunk: Buffer, _encoding: string, callback: TransformCallback) => {\n chunks.push(chunk);\n callback();\n },\n flush: function (callback: TransformCallback) {\n try {\n var input = Buffer.concat(chunks);\n var output = decodeFn(input, properties, unpackSize);\n this.push(output);\n callback();\n } catch (err) {\n callback(err as Error);\n }\n },\n });\n}\n"],"names":["createBufferingDecoder","decodeFn","properties","unpackSize","chunks","Transform","transform","chunk","_encoding","callback","push","flush","input","Buffer","concat","output","err"],"mappings":"AAAA,6EAA6E;AAC7E,0FAA0F;;;;;+BAM1F;;;CAGC,GACD;;;eAAwBA;;;8BAR0B;AAQnC,SAASA,uBAAuBC,QAAkB,EAAEC,UAAmB,EAAEC,UAAmB;IACzG,IAAIC,SAAmB,EAAE;IAEzB,OAAO,IAAIC,yBAAS,CAAC;QACnBC,WAAW,SAACC,OAAeC,WAAmBC;YAC5CL,OAAOM,IAAI,CAACH;YACZE;QACF;QACAE,OAAO,SAAPA,MAAiBF,QAA2B;YAC1C,IAAI;gBACF,IAAIG,QAAQC,OAAOC,MAAM,CAACV;gBAC1B,IAAIW,SAASd,SAASW,OAAOV,YAAYC;gBACzC,IAAI,CAACO,IAAI,CAACK;gBACVN;YACF,EAAE,OAAOO,KAAK;gBACZP,SAASO;YACX;QACF;IACF;AACF"}
@@ -0,0 +1,24 @@
1
+ import type { Transform } from 'readable-stream';
2
+ import { getPassword, setPassword } from './Aes.js';
3
+ export { getPassword, setPassword };
4
+ export interface Codec {
5
+ decode: (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;
6
+ createDecoder: (properties?: Buffer, unpackSize?: number) => Transform;
7
+ }
8
+ /**
9
+ * Register a codec
10
+ */
11
+ export declare function registerCodec(id: number[], codec: Codec): void;
12
+ /**
13
+ * Get a codec by ID
14
+ * @throws Error if codec is not supported
15
+ */
16
+ export declare function getCodec(id: number[]): Codec;
17
+ /**
18
+ * Check if a codec is supported
19
+ */
20
+ export declare function isCodecSupported(id: number[]): boolean;
21
+ /**
22
+ * Get human-readable codec name
23
+ */
24
+ export declare function getCodecName(id: number[]): string;
@@ -0,0 +1,24 @@
1
+ import type { Transform } from 'readable-stream';
2
+ import { getPassword, setPassword } from './Aes.js';
3
+ export { getPassword, setPassword };
4
+ export interface Codec {
5
+ decode: (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;
6
+ createDecoder: (properties?: Buffer, unpackSize?: number) => Transform;
7
+ }
8
+ /**
9
+ * Register a codec
10
+ */
11
+ export declare function registerCodec(id: number[], codec: Codec): void;
12
+ /**
13
+ * Get a codec by ID
14
+ * @throws Error if codec is not supported
15
+ */
16
+ export declare function getCodec(id: number[]): Codec;
17
+ /**
18
+ * Check if a codec is supported
19
+ */
20
+ export declare function isCodecSupported(id: number[]): boolean;
21
+ /**
22
+ * Get human-readable codec name
23
+ */
24
+ export declare function getCodecName(id: number[]): string;