7z-iterator 1.3.1 → 2.0.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.
- package/dist/cjs/index.d.cts +3 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +7 -28
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/nextEntry.js +1 -2
- package/dist/cjs/nextEntry.js.map +1 -1
- package/dist/cjs/sevenz/codecs/index.js +52 -30
- package/dist/cjs/sevenz/codecs/index.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/nextEntry.js +1 -2
- package/dist/esm/nextEntry.js.map +1 -1
- package/dist/esm/sevenz/codecs/index.js +32 -10
- package/dist/esm/sevenz/codecs/index.js.map +1 -1
- package/package.json +10 -4
- package/dist/cjs/lzma/Lzma2ChunkParser.d.cts +0 -73
- package/dist/cjs/lzma/Lzma2ChunkParser.d.ts +0 -73
- package/dist/cjs/lzma/Lzma2ChunkParser.js +0 -148
- package/dist/cjs/lzma/Lzma2ChunkParser.js.map +0 -1
- package/dist/cjs/lzma/index.d.cts +0 -13
- package/dist/cjs/lzma/index.d.ts +0 -13
- package/dist/cjs/lzma/index.js +0 -63
- package/dist/cjs/lzma/index.js.map +0 -1
- package/dist/cjs/lzma/stream/transforms.d.cts +0 -38
- package/dist/cjs/lzma/stream/transforms.d.ts +0 -38
- package/dist/cjs/lzma/stream/transforms.js +0 -149
- package/dist/cjs/lzma/stream/transforms.js.map +0 -1
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.cts +0 -30
- package/dist/cjs/lzma/sync/Lzma2Decoder.d.ts +0 -30
- package/dist/cjs/lzma/sync/Lzma2Decoder.js +0 -135
- package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +0 -1
- package/dist/cjs/lzma/sync/LzmaDecoder.d.cts +0 -82
- package/dist/cjs/lzma/sync/LzmaDecoder.d.ts +0 -82
- package/dist/cjs/lzma/sync/LzmaDecoder.js +0 -440
- package/dist/cjs/lzma/sync/LzmaDecoder.js.map +0 -1
- package/dist/cjs/lzma/sync/RangeDecoder.d.cts +0 -69
- package/dist/cjs/lzma/sync/RangeDecoder.d.ts +0 -69
- package/dist/cjs/lzma/sync/RangeDecoder.js +0 -162
- package/dist/cjs/lzma/sync/RangeDecoder.js.map +0 -1
- package/dist/cjs/lzma/types.d.cts +0 -110
- package/dist/cjs/lzma/types.d.ts +0 -110
- package/dist/cjs/lzma/types.js +0 -264
- package/dist/cjs/lzma/types.js.map +0 -1
- package/dist/cjs/sevenz/codecs/Bcj.d.cts +0 -16
- package/dist/cjs/sevenz/codecs/Bcj.d.ts +0 -16
- package/dist/cjs/sevenz/codecs/Bcj.js +0 -183
- package/dist/cjs/sevenz/codecs/Bcj.js.map +0 -1
- package/dist/cjs/sevenz/codecs/BcjArm.d.cts +0 -21
- package/dist/cjs/sevenz/codecs/BcjArm.d.ts +0 -21
- package/dist/cjs/sevenz/codecs/BcjArm.js +0 -104
- package/dist/cjs/sevenz/codecs/BcjArm.js.map +0 -1
- package/dist/cjs/sevenz/codecs/BcjArm64.d.cts +0 -21
- package/dist/cjs/sevenz/codecs/BcjArm64.d.ts +0 -21
- package/dist/cjs/sevenz/codecs/BcjArm64.js +0 -65
- package/dist/cjs/sevenz/codecs/BcjArm64.js.map +0 -1
- package/dist/cjs/sevenz/codecs/BcjArmt.d.cts +0 -19
- package/dist/cjs/sevenz/codecs/BcjArmt.d.ts +0 -19
- package/dist/cjs/sevenz/codecs/BcjArmt.js +0 -76
- package/dist/cjs/sevenz/codecs/BcjArmt.js.map +0 -1
- package/dist/cjs/sevenz/codecs/BcjIa64.d.cts +0 -15
- package/dist/cjs/sevenz/codecs/BcjIa64.d.ts +0 -15
- package/dist/cjs/sevenz/codecs/BcjIa64.js +0 -141
- package/dist/cjs/sevenz/codecs/BcjIa64.js.map +0 -1
- package/dist/cjs/sevenz/codecs/BcjPpc.d.cts +0 -20
- package/dist/cjs/sevenz/codecs/BcjPpc.d.ts +0 -20
- package/dist/cjs/sevenz/codecs/BcjPpc.js +0 -64
- package/dist/cjs/sevenz/codecs/BcjPpc.js.map +0 -1
- package/dist/cjs/sevenz/codecs/BcjSparc.d.cts +0 -19
- package/dist/cjs/sevenz/codecs/BcjSparc.d.ts +0 -19
- package/dist/cjs/sevenz/codecs/BcjSparc.js +0 -69
- package/dist/cjs/sevenz/codecs/BcjSparc.js.map +0 -1
- package/dist/cjs/sevenz/codecs/Delta.d.cts +0 -16
- package/dist/cjs/sevenz/codecs/Delta.d.ts +0 -16
- package/dist/cjs/sevenz/codecs/Delta.js +0 -74
- package/dist/cjs/sevenz/codecs/Delta.js.map +0 -1
- package/dist/cjs/sevenz/codecs/Lzma.d.cts +0 -17
- package/dist/cjs/sevenz/codecs/Lzma.d.ts +0 -17
- package/dist/cjs/sevenz/codecs/Lzma.js +0 -40
- package/dist/cjs/sevenz/codecs/Lzma.js.map +0 -1
- package/dist/cjs/sevenz/codecs/Lzma2.d.cts +0 -20
- package/dist/cjs/sevenz/codecs/Lzma2.d.ts +0 -20
- package/dist/cjs/sevenz/codecs/Lzma2.js +0 -42
- package/dist/cjs/sevenz/codecs/Lzma2.js.map +0 -1
- package/dist/esm/lzma/Lzma2ChunkParser.d.ts +0 -73
- package/dist/esm/lzma/Lzma2ChunkParser.js +0 -137
- package/dist/esm/lzma/Lzma2ChunkParser.js.map +0 -1
- package/dist/esm/lzma/index.d.ts +0 -13
- package/dist/esm/lzma/index.js +0 -15
- package/dist/esm/lzma/index.js.map +0 -1
- package/dist/esm/lzma/stream/transforms.d.ts +0 -38
- package/dist/esm/lzma/stream/transforms.js +0 -150
- package/dist/esm/lzma/stream/transforms.js.map +0 -1
- package/dist/esm/lzma/sync/Lzma2Decoder.d.ts +0 -30
- package/dist/esm/lzma/sync/Lzma2Decoder.js +0 -115
- package/dist/esm/lzma/sync/Lzma2Decoder.js.map +0 -1
- package/dist/esm/lzma/sync/LzmaDecoder.d.ts +0 -82
- package/dist/esm/lzma/sync/LzmaDecoder.js +0 -403
- package/dist/esm/lzma/sync/LzmaDecoder.js.map +0 -1
- package/dist/esm/lzma/sync/RangeDecoder.d.ts +0 -69
- package/dist/esm/lzma/sync/RangeDecoder.js +0 -132
- package/dist/esm/lzma/sync/RangeDecoder.js.map +0 -1
- package/dist/esm/lzma/types.d.ts +0 -110
- package/dist/esm/lzma/types.js +0 -154
- package/dist/esm/lzma/types.js.map +0 -1
- package/dist/esm/sevenz/codecs/Bcj.d.ts +0 -16
- package/dist/esm/sevenz/codecs/Bcj.js +0 -175
- package/dist/esm/sevenz/codecs/Bcj.js.map +0 -1
- package/dist/esm/sevenz/codecs/BcjArm.d.ts +0 -21
- package/dist/esm/sevenz/codecs/BcjArm.js +0 -101
- package/dist/esm/sevenz/codecs/BcjArm.js.map +0 -1
- package/dist/esm/sevenz/codecs/BcjArm64.d.ts +0 -21
- package/dist/esm/sevenz/codecs/BcjArm64.js +0 -57
- package/dist/esm/sevenz/codecs/BcjArm64.js.map +0 -1
- package/dist/esm/sevenz/codecs/BcjArmt.d.ts +0 -19
- package/dist/esm/sevenz/codecs/BcjArmt.js +0 -66
- package/dist/esm/sevenz/codecs/BcjArmt.js.map +0 -1
- package/dist/esm/sevenz/codecs/BcjIa64.d.ts +0 -15
- package/dist/esm/sevenz/codecs/BcjIa64.js +0 -127
- package/dist/esm/sevenz/codecs/BcjIa64.js.map +0 -1
- package/dist/esm/sevenz/codecs/BcjPpc.d.ts +0 -20
- package/dist/esm/sevenz/codecs/BcjPpc.js +0 -55
- package/dist/esm/sevenz/codecs/BcjPpc.js.map +0 -1
- package/dist/esm/sevenz/codecs/BcjSparc.d.ts +0 -19
- package/dist/esm/sevenz/codecs/BcjSparc.js +0 -59
- package/dist/esm/sevenz/codecs/BcjSparc.js.map +0 -1
- package/dist/esm/sevenz/codecs/Delta.d.ts +0 -16
- package/dist/esm/sevenz/codecs/Delta.js +0 -66
- package/dist/esm/sevenz/codecs/Delta.js.map +0 -1
- package/dist/esm/sevenz/codecs/Lzma.d.ts +0 -17
- package/dist/esm/sevenz/codecs/Lzma.js +0 -33
- package/dist/esm/sevenz/codecs/Lzma.js.map +0 -1
- package/dist/esm/sevenz/codecs/Lzma2.d.ts +0 -20
- package/dist/esm/sevenz/codecs/Lzma2.js +0 -38
- package/dist/esm/sevenz/codecs/Lzma2.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/BcjArmt.ts"],"sourcesContent":["// BCJ (ARM Thumb) filter codec - converts ARM Thumb branch instruction addresses\n// This filter makes ARM Thumb executables more compressible by LZMA\n//\n// ARM Thumb uses 16-bit instructions, but BL (branch with link) spans two 16-bit words.\n// The filter converts relative addresses to absolute during compression.\n//\n// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c\n\nimport { bufferFrom } from 'extract-base-iterator';\nimport type { Transform } from 'stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\n\n/**\n * Decode ARM Thumb BCJ filtered data\n * Reverses the BCJ transformation by converting absolute addresses back to relative\n *\n * ARM Thumb BL instruction format (2 x 16-bit):\n * - First half-word: 1111 0xxx xxxx xxxx (high bits of offset)\n * - Second half-word: 1111 1xxx xxxx xxxx (low bits of offset)\n *\n * @param input - ARM Thumb BCJ filtered data\n * @param _properties - Unused for ARM Thumb BCJ\n * @param _unpackSize - Unused for ARM Thumb BCJ\n * @returns Unfiltered data\n */\nexport function decodeBcjArmt(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n const output = bufferFrom(input); // Copy since we modify in place\n let pos = 0;\n\n // Process 2-byte aligned positions\n while (pos + 4 <= output.length) {\n // Read two 16-bit values (little-endian)\n const w0 = output[pos] | (output[pos + 1] << 8);\n const w1 = output[pos + 2] | (output[pos + 3] << 8);\n\n // Check for BL instruction pair:\n // First word: 0xF000-0xF7FF (1111 0xxx xxxx xxxx)\n // Second word: 0xF800-0xFFFF (1111 1xxx xxxx xxxx)\n if ((w0 & 0xf800) === 0xf000 && (w1 & 0xf800) === 0xf800) {\n // Extract and combine the offset parts\n // High 11 bits from w0, low 11 bits from w1\n const hi = w0 & 0x7ff;\n const lo = w1 & 0x7ff;\n\n // Combine into 22-bit offset (in half-words)\n let addr = (hi << 11) | lo;\n\n // Sign-extend 22-bit to 32-bit\n if (addr & 0x200000) {\n addr |= 0xffc00000;\n }\n\n // Convert absolute to relative:\n // Subtract current position (in half-words, so divide by 2)\n // Thumb PC is 2 half-words (4 bytes) ahead\n const relAddr = addr - (pos >>> 1);\n\n // Write back\n const newHi = (relAddr >>> 11) & 0x7ff;\n const newLo = relAddr & 0x7ff;\n\n output[pos] = newHi & 0xff;\n output[pos + 1] = 0xf0 | ((newHi >>> 8) & 0x07);\n output[pos + 2] = newLo & 0xff;\n output[pos + 3] = 0xf8 | ((newLo >>> 8) & 0x07);\n\n pos += 4;\n } else {\n pos += 2;\n }\n }\n\n return output;\n}\n\n/**\n * Create an ARM Thumb BCJ decoder Transform stream\n */\nexport function createBcjArmtDecoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeBcjArmt, properties, unpackSize);\n}\n"],"names":["createBcjArmtDecoder","decodeBcjArmt","input","_properties","_unpackSize","output","bufferFrom","pos","length","w0","w1","hi","lo","addr","relAddr","newHi","newLo","properties","unpackSize","createBufferingDecoder"],"mappings":"AAAA,iFAAiF;AACjF,oEAAoE;AACpE,EAAE;AACF,wFAAwF;AACxF,yEAAyE;AACzE,EAAE;AACF,+DAA+D;;;;;;;;;;;;QAwE/CA;eAAAA;;QArDAC;eAAAA;;;mCAjBW;+EAEQ;;;;;;AAe5B,SAASA,cAAcC,KAAa,EAAEC,WAAoB,EAAEC,WAAoB;IACrF,IAAMC,SAASC,IAAAA,+BAAU,EAACJ,QAAQ,gCAAgC;IAClE,IAAIK,MAAM;IAEV,mCAAmC;IACnC,MAAOA,MAAM,KAAKF,OAAOG,MAAM,CAAE;QAC/B,yCAAyC;QACzC,IAAMC,KAAKJ,MAAM,CAACE,IAAI,GAAIF,MAAM,CAACE,MAAM,EAAE,IAAI;QAC7C,IAAMG,KAAKL,MAAM,CAACE,MAAM,EAAE,GAAIF,MAAM,CAACE,MAAM,EAAE,IAAI;QAEjD,iCAAiC;QACjC,kDAAkD;QAClD,mDAAmD;QACnD,IAAI,AAACE,CAAAA,KAAK,MAAK,MAAO,UAAU,AAACC,CAAAA,KAAK,MAAK,MAAO,QAAQ;YACxD,uCAAuC;YACvC,4CAA4C;YAC5C,IAAMC,KAAKF,KAAK;YAChB,IAAMG,KAAKF,KAAK;YAEhB,6CAA6C;YAC7C,IAAIG,OAAO,AAACF,MAAM,KAAMC;YAExB,+BAA+B;YAC/B,IAAIC,OAAO,UAAU;gBACnBA,QAAQ;YACV;YAEA,gCAAgC;YAChC,4DAA4D;YAC5D,2CAA2C;YAC3C,IAAMC,UAAUD,OAAQN,CAAAA,QAAQ,CAAA;YAEhC,aAAa;YACb,IAAMQ,QAAQ,AAACD,YAAY,KAAM;YACjC,IAAME,QAAQF,UAAU;YAExBT,MAAM,CAACE,IAAI,GAAGQ,QAAQ;YACtBV,MAAM,CAACE,MAAM,EAAE,GAAG,OAAQ,AAACQ,UAAU,IAAK;YAC1CV,MAAM,CAACE,MAAM,EAAE,GAAGS,QAAQ;YAC1BX,MAAM,CAACE,MAAM,EAAE,GAAG,OAAQ,AAACS,UAAU,IAAK;YAE1CT,OAAO;QACT,OAAO;YACLA,OAAO;QACT;IACF;IAEA,OAAOF;AACT;AAKO,SAASL,qBAAqBiB,UAAmB,EAAEC,UAAmB;IAC3E,OAAOC,IAAAA,iCAAsB,EAAClB,eAAegB,YAAYC;AAC3D"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Transform } from 'stream';
|
|
2
|
-
/**
|
|
3
|
-
* Decode IA64 BCJ filtered data
|
|
4
|
-
* Reverses the BCJ transformation by converting absolute addresses back to relative
|
|
5
|
-
*
|
|
6
|
-
* @param input - IA64 BCJ filtered data
|
|
7
|
-
* @param _properties - Unused for IA64 BCJ
|
|
8
|
-
* @param _unpackSize - Unused for IA64 BCJ
|
|
9
|
-
* @returns Unfiltered data
|
|
10
|
-
*/
|
|
11
|
-
export declare function decodeBcjIa64(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
|
|
12
|
-
/**
|
|
13
|
-
* Create an IA64 BCJ decoder Transform stream
|
|
14
|
-
*/
|
|
15
|
-
export declare function createBcjIa64Decoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Transform } from 'stream';
|
|
2
|
-
/**
|
|
3
|
-
* Decode IA64 BCJ filtered data
|
|
4
|
-
* Reverses the BCJ transformation by converting absolute addresses back to relative
|
|
5
|
-
*
|
|
6
|
-
* @param input - IA64 BCJ filtered data
|
|
7
|
-
* @param _properties - Unused for IA64 BCJ
|
|
8
|
-
* @param _unpackSize - Unused for IA64 BCJ
|
|
9
|
-
* @returns Unfiltered data
|
|
10
|
-
*/
|
|
11
|
-
export declare function decodeBcjIa64(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
|
|
12
|
-
/**
|
|
13
|
-
* Create an IA64 BCJ decoder Transform stream
|
|
14
|
-
*/
|
|
15
|
-
export declare function createBcjIa64Decoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
// BCJ (IA64/Itanium) filter codec - converts IA64 branch instruction addresses
|
|
2
|
-
// This filter makes IA64 executables more compressible by LZMA
|
|
3
|
-
//
|
|
4
|
-
// IA64 uses 128-bit instruction bundles with 3 instructions per bundle.
|
|
5
|
-
// Branch instructions use 21-bit signed offsets (in bundles).
|
|
6
|
-
//
|
|
7
|
-
// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c
|
|
8
|
-
"use strict";
|
|
9
|
-
Object.defineProperty(exports, "__esModule", {
|
|
10
|
-
value: true
|
|
11
|
-
});
|
|
12
|
-
function _export(target, all) {
|
|
13
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
_export(exports, {
|
|
19
|
-
get createBcjIa64Decoder () {
|
|
20
|
-
return createBcjIa64Decoder;
|
|
21
|
-
},
|
|
22
|
-
get decodeBcjIa64 () {
|
|
23
|
-
return decodeBcjIa64;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
var _extractbaseiterator = require("extract-base-iterator");
|
|
27
|
-
var _createBufferingDecoderts = /*#__PURE__*/ _interop_require_default(require("./createBufferingDecoder.js"));
|
|
28
|
-
function _interop_require_default(obj) {
|
|
29
|
-
return obj && obj.__esModule ? obj : {
|
|
30
|
-
default: obj
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
// IA64 branch instruction slot mask
|
|
34
|
-
// Each bundle has a 5-bit template and 3 x 41-bit instruction slots
|
|
35
|
-
var kBranchTable = [
|
|
36
|
-
0,
|
|
37
|
-
0,
|
|
38
|
-
0,
|
|
39
|
-
0,
|
|
40
|
-
0,
|
|
41
|
-
0,
|
|
42
|
-
0,
|
|
43
|
-
0,
|
|
44
|
-
0,
|
|
45
|
-
0,
|
|
46
|
-
0,
|
|
47
|
-
0,
|
|
48
|
-
0,
|
|
49
|
-
0,
|
|
50
|
-
0,
|
|
51
|
-
0,
|
|
52
|
-
4,
|
|
53
|
-
4,
|
|
54
|
-
6,
|
|
55
|
-
6,
|
|
56
|
-
0,
|
|
57
|
-
0,
|
|
58
|
-
7,
|
|
59
|
-
7,
|
|
60
|
-
4,
|
|
61
|
-
4,
|
|
62
|
-
0,
|
|
63
|
-
0,
|
|
64
|
-
4,
|
|
65
|
-
4,
|
|
66
|
-
0,
|
|
67
|
-
0
|
|
68
|
-
];
|
|
69
|
-
function decodeBcjIa64(input, _properties, _unpackSize) {
|
|
70
|
-
var output = (0, _extractbaseiterator.bufferFrom)(input); // Copy since we modify in place
|
|
71
|
-
var pos = 0;
|
|
72
|
-
// Process 16-byte aligned bundles
|
|
73
|
-
while(pos + 16 <= output.length){
|
|
74
|
-
// Get template (low 5 bits of first byte)
|
|
75
|
-
var template = output[pos] & 0x1f;
|
|
76
|
-
var mask = kBranchTable[template];
|
|
77
|
-
// Check each instruction slot (3 slots per bundle)
|
|
78
|
-
for(var slot = 0; slot < 3; slot++){
|
|
79
|
-
if ((mask & 1 << slot) === 0) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
// Calculate bit position for this slot
|
|
83
|
-
// Slot 0: bits 5-45, Slot 1: bits 46-86, Slot 2: bits 87-127
|
|
84
|
-
var bitPos = 5 + slot * 41;
|
|
85
|
-
var bytePos = bitPos >>> 3;
|
|
86
|
-
var bitOffset = bitPos & 7;
|
|
87
|
-
// Read 8 bytes to get the instruction (may span bytes)
|
|
88
|
-
// We need at least 6 bytes for a 41-bit instruction
|
|
89
|
-
if (pos + bytePos + 6 > output.length) {
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
// Extract instruction bytes
|
|
93
|
-
var instr0 = output[pos + bytePos];
|
|
94
|
-
var instr1 = output[pos + bytePos + 1];
|
|
95
|
-
var instr2 = output[pos + bytePos + 2];
|
|
96
|
-
var instr3 = output[pos + bytePos + 3];
|
|
97
|
-
var instr4 = output[pos + bytePos + 4];
|
|
98
|
-
var instr5 = output[pos + bytePos + 5];
|
|
99
|
-
// Build instruction value (we only need the immediate field)
|
|
100
|
-
// The immediate is in bits 13-32 of the instruction (20 bits)
|
|
101
|
-
// Plus bit 36 as the sign bit
|
|
102
|
-
// For decoding, we extract the address that was encoded and convert back
|
|
103
|
-
var instrLo = instr0 >>> bitOffset | instr1 << 8 - bitOffset | instr2 << 16 - bitOffset | instr3 << 24 - bitOffset;
|
|
104
|
-
var instrHi = instr4 >>> bitOffset | instr5 << 8 - bitOffset;
|
|
105
|
-
// Check opcode for branch (opcode 4 or 5 in bits 37-40)
|
|
106
|
-
var opcode = instrHi >>> 37 - 32 - bitOffset & 0xf;
|
|
107
|
-
if (opcode !== 4 && opcode !== 5) {
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
// Extract 21-bit immediate (bits 13-32 + sign bit 36)
|
|
111
|
-
var imm20 = instrLo >>> 13 & 0xfffff;
|
|
112
|
-
var sign = instrHi >>> 36 - 32 & 1;
|
|
113
|
-
// Combine into 21-bit signed value
|
|
114
|
-
var addr = imm20 | sign << 20;
|
|
115
|
-
if (sign) {
|
|
116
|
-
addr |= 0xffe00000; // Sign-extend
|
|
117
|
-
}
|
|
118
|
-
// Convert absolute to relative: subtract current position (in bundles)
|
|
119
|
-
var relAddr = addr - (pos >>> 4);
|
|
120
|
-
// Write back
|
|
121
|
-
var newImm20 = relAddr & 0xfffff;
|
|
122
|
-
var newSign = relAddr >>> 20 & 1;
|
|
123
|
-
// Clear old immediate and write new one
|
|
124
|
-
instrLo = instrLo & ~(0xfffff << 13) | newImm20 << 13;
|
|
125
|
-
instrHi = instrHi & ~(1 << 36 - 32) | newSign << 36 - 32;
|
|
126
|
-
// Write back bytes
|
|
127
|
-
output[pos + bytePos] = output[pos + bytePos] & (1 << bitOffset) - 1 | (instrLo & 0xff) << bitOffset;
|
|
128
|
-
output[pos + bytePos + 1] = instrLo >>> 8 - bitOffset & 0xff;
|
|
129
|
-
output[pos + bytePos + 2] = instrLo >>> 16 - bitOffset & 0xff;
|
|
130
|
-
output[pos + bytePos + 3] = instrLo >>> 24 - bitOffset & 0xff;
|
|
131
|
-
output[pos + bytePos + 4] = instrLo >>> 32 - bitOffset & (1 << bitOffset) - 1 | (instrHi & 0xff) << bitOffset;
|
|
132
|
-
output[pos + bytePos + 5] = output[pos + bytePos + 5] & ~((1 << bitOffset) - 1) | instrHi >>> 8 - bitOffset & (1 << bitOffset) - 1;
|
|
133
|
-
}
|
|
134
|
-
pos += 16;
|
|
135
|
-
}
|
|
136
|
-
return output;
|
|
137
|
-
}
|
|
138
|
-
function createBcjIa64Decoder(properties, unpackSize) {
|
|
139
|
-
return (0, _createBufferingDecoderts.default)(decodeBcjIa64, properties, unpackSize);
|
|
140
|
-
}
|
|
141
|
-
/* 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; }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/BcjIa64.ts"],"sourcesContent":["// BCJ (IA64/Itanium) filter codec - converts IA64 branch instruction addresses\n// This filter makes IA64 executables more compressible by LZMA\n//\n// IA64 uses 128-bit instruction bundles with 3 instructions per bundle.\n// Branch instructions use 21-bit signed offsets (in bundles).\n//\n// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c\n\nimport { bufferFrom } from 'extract-base-iterator';\nimport type { Transform } from 'stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\n\n// IA64 branch instruction slot mask\n// Each bundle has a 5-bit template and 3 x 41-bit instruction slots\nconst kBranchTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0, 7, 7, 4, 4, 0, 0, 4, 4, 0, 0];\n\n/**\n * Decode IA64 BCJ filtered data\n * Reverses the BCJ transformation by converting absolute addresses back to relative\n *\n * @param input - IA64 BCJ filtered data\n * @param _properties - Unused for IA64 BCJ\n * @param _unpackSize - Unused for IA64 BCJ\n * @returns Unfiltered data\n */\nexport function decodeBcjIa64(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n const output = bufferFrom(input); // Copy since we modify in place\n let pos = 0;\n\n // Process 16-byte aligned bundles\n while (pos + 16 <= output.length) {\n // Get template (low 5 bits of first byte)\n const template = output[pos] & 0x1f;\n const mask = kBranchTable[template];\n\n // Check each instruction slot (3 slots per bundle)\n for (let slot = 0; slot < 3; slot++) {\n if ((mask & (1 << slot)) === 0) {\n continue;\n }\n\n // Calculate bit position for this slot\n // Slot 0: bits 5-45, Slot 1: bits 46-86, Slot 2: bits 87-127\n const bitPos = 5 + slot * 41;\n const bytePos = bitPos >>> 3;\n const bitOffset = bitPos & 7;\n\n // Read 8 bytes to get the instruction (may span bytes)\n // We need at least 6 bytes for a 41-bit instruction\n if (pos + bytePos + 6 > output.length) {\n break;\n }\n\n // Extract instruction bytes\n const instr0 = output[pos + bytePos];\n const instr1 = output[pos + bytePos + 1];\n const instr2 = output[pos + bytePos + 2];\n const instr3 = output[pos + bytePos + 3];\n const instr4 = output[pos + bytePos + 4];\n const instr5 = output[pos + bytePos + 5];\n\n // Build instruction value (we only need the immediate field)\n // The immediate is in bits 13-32 of the instruction (20 bits)\n // Plus bit 36 as the sign bit\n\n // For decoding, we extract the address that was encoded and convert back\n let instrLo = (instr0 >>> bitOffset) | (instr1 << (8 - bitOffset)) | (instr2 << (16 - bitOffset)) | (instr3 << (24 - bitOffset));\n\n let instrHi = (instr4 >>> bitOffset) | (instr5 << (8 - bitOffset));\n\n // Check opcode for branch (opcode 4 or 5 in bits 37-40)\n const opcode = (instrHi >>> (37 - 32 - bitOffset)) & 0xf;\n if (opcode !== 4 && opcode !== 5) {\n continue;\n }\n\n // Extract 21-bit immediate (bits 13-32 + sign bit 36)\n const imm20 = (instrLo >>> 13) & 0xfffff;\n const sign = (instrHi >>> (36 - 32)) & 1;\n\n // Combine into 21-bit signed value\n let addr = imm20 | (sign << 20);\n if (sign) {\n addr |= 0xffe00000; // Sign-extend\n }\n\n // Convert absolute to relative: subtract current position (in bundles)\n const relAddr = addr - (pos >>> 4);\n\n // Write back\n const newImm20 = relAddr & 0xfffff;\n const newSign = (relAddr >>> 20) & 1;\n\n // Clear old immediate and write new one\n instrLo = (instrLo & ~(0xfffff << 13)) | (newImm20 << 13);\n instrHi = (instrHi & ~(1 << (36 - 32))) | (newSign << (36 - 32));\n\n // Write back bytes\n output[pos + bytePos] = (output[pos + bytePos] & ((1 << bitOffset) - 1)) | ((instrLo & 0xff) << bitOffset);\n output[pos + bytePos + 1] = (instrLo >>> (8 - bitOffset)) & 0xff;\n output[pos + bytePos + 2] = (instrLo >>> (16 - bitOffset)) & 0xff;\n output[pos + bytePos + 3] = (instrLo >>> (24 - bitOffset)) & 0xff;\n output[pos + bytePos + 4] = ((instrLo >>> (32 - bitOffset)) & ((1 << bitOffset) - 1)) | ((instrHi & 0xff) << bitOffset);\n output[pos + bytePos + 5] = (output[pos + bytePos + 5] & ~((1 << bitOffset) - 1)) | ((instrHi >>> (8 - bitOffset)) & ((1 << bitOffset) - 1));\n }\n\n pos += 16;\n }\n\n return output;\n}\n\n/**\n * Create an IA64 BCJ decoder Transform stream\n */\nexport function createBcjIa64Decoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeBcjIa64, properties, unpackSize);\n}\n"],"names":["createBcjIa64Decoder","decodeBcjIa64","kBranchTable","input","_properties","_unpackSize","output","bufferFrom","pos","length","template","mask","slot","bitPos","bytePos","bitOffset","instr0","instr1","instr2","instr3","instr4","instr5","instrLo","instrHi","opcode","imm20","sign","addr","relAddr","newImm20","newSign","properties","unpackSize","createBufferingDecoder"],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Transform } from 'stream';
|
|
2
|
-
/**
|
|
3
|
-
* Decode PowerPC BCJ filtered data
|
|
4
|
-
* Reverses the BCJ transformation by converting absolute addresses back to relative
|
|
5
|
-
*
|
|
6
|
-
* PowerPC B/BL instruction format (big-endian):
|
|
7
|
-
* - 4 bytes aligned
|
|
8
|
-
* - Opcode 0x48 in high byte with AA=0, LK=1 (0x48000001 mask 0xFC000003)
|
|
9
|
-
* - Bits 6-29 are 24-bit signed offset (in words)
|
|
10
|
-
*
|
|
11
|
-
* @param input - PowerPC BCJ filtered data
|
|
12
|
-
* @param _properties - Unused for PowerPC BCJ
|
|
13
|
-
* @param _unpackSize - Unused for PowerPC BCJ
|
|
14
|
-
* @returns Unfiltered data
|
|
15
|
-
*/
|
|
16
|
-
export declare function decodeBcjPpc(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
|
|
17
|
-
/**
|
|
18
|
-
* Create a PowerPC BCJ decoder Transform stream
|
|
19
|
-
*/
|
|
20
|
-
export declare function createBcjPpcDecoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Transform } from 'stream';
|
|
2
|
-
/**
|
|
3
|
-
* Decode PowerPC BCJ filtered data
|
|
4
|
-
* Reverses the BCJ transformation by converting absolute addresses back to relative
|
|
5
|
-
*
|
|
6
|
-
* PowerPC B/BL instruction format (big-endian):
|
|
7
|
-
* - 4 bytes aligned
|
|
8
|
-
* - Opcode 0x48 in high byte with AA=0, LK=1 (0x48000001 mask 0xFC000003)
|
|
9
|
-
* - Bits 6-29 are 24-bit signed offset (in words)
|
|
10
|
-
*
|
|
11
|
-
* @param input - PowerPC BCJ filtered data
|
|
12
|
-
* @param _properties - Unused for PowerPC BCJ
|
|
13
|
-
* @param _unpackSize - Unused for PowerPC BCJ
|
|
14
|
-
* @returns Unfiltered data
|
|
15
|
-
*/
|
|
16
|
-
export declare function decodeBcjPpc(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
|
|
17
|
-
/**
|
|
18
|
-
* Create a PowerPC BCJ decoder Transform stream
|
|
19
|
-
*/
|
|
20
|
-
export declare function createBcjPpcDecoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
// BCJ (PowerPC) filter codec - converts PowerPC branch instruction addresses
|
|
2
|
-
// This filter makes PowerPC executables more compressible by LZMA
|
|
3
|
-
//
|
|
4
|
-
// PowerPC is big-endian. Branch instructions use 26-bit signed offsets.
|
|
5
|
-
//
|
|
6
|
-
// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c
|
|
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 createBcjPpcDecoder () {
|
|
19
|
-
return createBcjPpcDecoder;
|
|
20
|
-
},
|
|
21
|
-
get decodeBcjPpc () {
|
|
22
|
-
return decodeBcjPpc;
|
|
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 decodeBcjPpc(input, _properties, _unpackSize) {
|
|
33
|
-
var output = (0, _extractbaseiterator.bufferFrom)(input); // Copy since we modify in place
|
|
34
|
-
var pos = 0;
|
|
35
|
-
// Process 4-byte aligned positions
|
|
36
|
-
while(pos + 4 <= output.length){
|
|
37
|
-
// Read 32-bit value (big-endian)
|
|
38
|
-
var instr = output[pos] << 24 | output[pos + 1] << 16 | output[pos + 2] << 8 | output[pos + 3];
|
|
39
|
-
// Check for B/BL instruction: (instr & 0xFC000003) === 0x48000001
|
|
40
|
-
if ((instr & 0xfc000003) === 0x48000001) {
|
|
41
|
-
// Extract 26-bit offset (bits 2-27, the LI field)
|
|
42
|
-
var addr = instr & 0x03fffffc;
|
|
43
|
-
// Sign-extend 26-bit to 32-bit
|
|
44
|
-
if (addr & 0x02000000) {
|
|
45
|
-
addr |= 0xfc000000;
|
|
46
|
-
}
|
|
47
|
-
// Convert absolute to relative: subtract current position
|
|
48
|
-
var relAddr = addr - pos;
|
|
49
|
-
// Clear old offset and write new one
|
|
50
|
-
instr = instr & 0xfc000003 | relAddr & 0x03fffffc;
|
|
51
|
-
// Write back (big-endian)
|
|
52
|
-
output[pos] = instr >>> 24 & 0xff;
|
|
53
|
-
output[pos + 1] = instr >>> 16 & 0xff;
|
|
54
|
-
output[pos + 2] = instr >>> 8 & 0xff;
|
|
55
|
-
output[pos + 3] = instr & 0xff;
|
|
56
|
-
}
|
|
57
|
-
pos += 4;
|
|
58
|
-
}
|
|
59
|
-
return output;
|
|
60
|
-
}
|
|
61
|
-
function createBcjPpcDecoder(properties, unpackSize) {
|
|
62
|
-
return (0, _createBufferingDecoderts.default)(decodeBcjPpc, properties, unpackSize);
|
|
63
|
-
}
|
|
64
|
-
/* 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; }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/BcjPpc.ts"],"sourcesContent":["// BCJ (PowerPC) filter codec - converts PowerPC branch instruction addresses\n// This filter makes PowerPC executables more compressible by LZMA\n//\n// PowerPC is big-endian. Branch instructions use 26-bit signed offsets.\n//\n// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c\n\nimport { bufferFrom } from 'extract-base-iterator';\nimport type { Transform } from 'stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\n\n/**\n * Decode PowerPC BCJ filtered data\n * Reverses the BCJ transformation by converting absolute addresses back to relative\n *\n * PowerPC B/BL instruction format (big-endian):\n * - 4 bytes aligned\n * - Opcode 0x48 in high byte with AA=0, LK=1 (0x48000001 mask 0xFC000003)\n * - Bits 6-29 are 24-bit signed offset (in words)\n *\n * @param input - PowerPC BCJ filtered data\n * @param _properties - Unused for PowerPC BCJ\n * @param _unpackSize - Unused for PowerPC BCJ\n * @returns Unfiltered data\n */\nexport function decodeBcjPpc(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n const output = bufferFrom(input); // Copy since we modify in place\n let pos = 0;\n\n // Process 4-byte aligned positions\n while (pos + 4 <= output.length) {\n // Read 32-bit value (big-endian)\n let instr = (output[pos] << 24) | (output[pos + 1] << 16) | (output[pos + 2] << 8) | output[pos + 3];\n\n // Check for B/BL instruction: (instr & 0xFC000003) === 0x48000001\n if ((instr & 0xfc000003) === 0x48000001) {\n // Extract 26-bit offset (bits 2-27, the LI field)\n let addr = instr & 0x03fffffc;\n\n // Sign-extend 26-bit to 32-bit\n if (addr & 0x02000000) {\n addr |= 0xfc000000;\n }\n\n // Convert absolute to relative: subtract current position\n const relAddr = addr - pos;\n\n // Clear old offset and write new one\n instr = (instr & 0xfc000003) | (relAddr & 0x03fffffc);\n\n // Write back (big-endian)\n output[pos] = (instr >>> 24) & 0xff;\n output[pos + 1] = (instr >>> 16) & 0xff;\n output[pos + 2] = (instr >>> 8) & 0xff;\n output[pos + 3] = instr & 0xff;\n }\n pos += 4;\n }\n\n return output;\n}\n\n/**\n * Create a PowerPC BCJ decoder Transform stream\n */\nexport function createBcjPpcDecoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeBcjPpc, properties, unpackSize);\n}\n"],"names":["createBcjPpcDecoder","decodeBcjPpc","input","_properties","_unpackSize","output","bufferFrom","pos","length","instr","addr","relAddr","properties","unpackSize","createBufferingDecoder"],"mappings":"AAAA,6EAA6E;AAC7E,kEAAkE;AAClE,EAAE;AACF,wEAAwE;AACxE,EAAE;AACF,+DAA+D;;;;;;;;;;;;QA4D/CA;eAAAA;;QAxCAC;eAAAA;;;mCAlBW;+EAEQ;;;;;;AAgB5B,SAASA,aAAaC,KAAa,EAAEC,WAAoB,EAAEC,WAAoB;IACpF,IAAMC,SAASC,IAAAA,+BAAU,EAACJ,QAAQ,gCAAgC;IAClE,IAAIK,MAAM;IAEV,mCAAmC;IACnC,MAAOA,MAAM,KAAKF,OAAOG,MAAM,CAAE;QAC/B,iCAAiC;QACjC,IAAIC,QAAQ,AAACJ,MAAM,CAACE,IAAI,IAAI,KAAOF,MAAM,CAACE,MAAM,EAAE,IAAI,KAAOF,MAAM,CAACE,MAAM,EAAE,IAAI,IAAKF,MAAM,CAACE,MAAM,EAAE;QAEpG,kEAAkE;QAClE,IAAI,AAACE,CAAAA,QAAQ,UAAS,MAAO,YAAY;YACvC,kDAAkD;YAClD,IAAIC,OAAOD,QAAQ;YAEnB,+BAA+B;YAC/B,IAAIC,OAAO,YAAY;gBACrBA,QAAQ;YACV;YAEA,0DAA0D;YAC1D,IAAMC,UAAUD,OAAOH;YAEvB,qCAAqC;YACrCE,QAAQ,AAACA,QAAQ,aAAeE,UAAU;YAE1C,0BAA0B;YAC1BN,MAAM,CAACE,IAAI,GAAG,AAACE,UAAU,KAAM;YAC/BJ,MAAM,CAACE,MAAM,EAAE,GAAG,AAACE,UAAU,KAAM;YACnCJ,MAAM,CAACE,MAAM,EAAE,GAAG,AAACE,UAAU,IAAK;YAClCJ,MAAM,CAACE,MAAM,EAAE,GAAGE,QAAQ;QAC5B;QACAF,OAAO;IACT;IAEA,OAAOF;AACT;AAKO,SAASL,oBAAoBY,UAAmB,EAAEC,UAAmB;IAC1E,OAAOC,IAAAA,iCAAsB,EAACb,cAAcW,YAAYC;AAC1D"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Transform } from 'stream';
|
|
2
|
-
/**
|
|
3
|
-
* Decode SPARC BCJ filtered data
|
|
4
|
-
* Reverses the BCJ transformation by converting absolute addresses back to relative
|
|
5
|
-
*
|
|
6
|
-
* SPARC CALL instruction matching (big-endian):
|
|
7
|
-
* - First byte 0x40 and (second byte & 0xC0) == 0x00, OR
|
|
8
|
-
* - First byte 0x7F and (second byte & 0xC0) == 0xC0
|
|
9
|
-
*
|
|
10
|
-
* @param input - SPARC BCJ filtered data
|
|
11
|
-
* @param _properties - Unused for SPARC BCJ
|
|
12
|
-
* @param _unpackSize - Unused for SPARC BCJ
|
|
13
|
-
* @returns Unfiltered data
|
|
14
|
-
*/
|
|
15
|
-
export declare function decodeBcjSparc(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
|
|
16
|
-
/**
|
|
17
|
-
* Create a SPARC BCJ decoder Transform stream
|
|
18
|
-
*/
|
|
19
|
-
export declare function createBcjSparcDecoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Transform } from 'stream';
|
|
2
|
-
/**
|
|
3
|
-
* Decode SPARC BCJ filtered data
|
|
4
|
-
* Reverses the BCJ transformation by converting absolute addresses back to relative
|
|
5
|
-
*
|
|
6
|
-
* SPARC CALL instruction matching (big-endian):
|
|
7
|
-
* - First byte 0x40 and (second byte & 0xC0) == 0x00, OR
|
|
8
|
-
* - First byte 0x7F and (second byte & 0xC0) == 0xC0
|
|
9
|
-
*
|
|
10
|
-
* @param input - SPARC BCJ filtered data
|
|
11
|
-
* @param _properties - Unused for SPARC BCJ
|
|
12
|
-
* @param _unpackSize - Unused for SPARC BCJ
|
|
13
|
-
* @returns Unfiltered data
|
|
14
|
-
*/
|
|
15
|
-
export declare function decodeBcjSparc(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer;
|
|
16
|
-
/**
|
|
17
|
-
* Create a SPARC BCJ decoder Transform stream
|
|
18
|
-
*/
|
|
19
|
-
export declare function createBcjSparcDecoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
// BCJ (SPARC) filter codec - converts SPARC branch instruction addresses
|
|
2
|
-
// This filter makes SPARC executables more compressible by LZMA
|
|
3
|
-
//
|
|
4
|
-
// SPARC is big-endian. CALL instructions use 30-bit signed offsets.
|
|
5
|
-
// The filter only transforms CALL instructions with specific byte patterns.
|
|
6
|
-
//
|
|
7
|
-
// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c
|
|
8
|
-
"use strict";
|
|
9
|
-
Object.defineProperty(exports, "__esModule", {
|
|
10
|
-
value: true
|
|
11
|
-
});
|
|
12
|
-
function _export(target, all) {
|
|
13
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
_export(exports, {
|
|
19
|
-
get createBcjSparcDecoder () {
|
|
20
|
-
return createBcjSparcDecoder;
|
|
21
|
-
},
|
|
22
|
-
get decodeBcjSparc () {
|
|
23
|
-
return decodeBcjSparc;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
var _extractbaseiterator = require("extract-base-iterator");
|
|
27
|
-
var _createBufferingDecoderts = /*#__PURE__*/ _interop_require_default(require("./createBufferingDecoder.js"));
|
|
28
|
-
function _interop_require_default(obj) {
|
|
29
|
-
return obj && obj.__esModule ? obj : {
|
|
30
|
-
default: obj
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function decodeBcjSparc(input, _properties, _unpackSize) {
|
|
34
|
-
var output = (0, _extractbaseiterator.bufferFrom)(input); // Copy since we modify in place
|
|
35
|
-
var pos = 0;
|
|
36
|
-
// Process 4-byte aligned positions
|
|
37
|
-
while(pos + 4 <= output.length){
|
|
38
|
-
var b0 = output[pos];
|
|
39
|
-
var b1 = output[pos + 1];
|
|
40
|
-
// Check for CALL instruction with specific byte patterns:
|
|
41
|
-
// (b0 == 0x40 && (b1 & 0xC0) == 0x00) || (b0 == 0x7F && (b1 & 0xC0) == 0xC0)
|
|
42
|
-
if (b0 === 0x40 && (b1 & 0xc0) === 0x00 || b0 === 0x7f && (b1 & 0xc0) === 0xc0) {
|
|
43
|
-
// Read 32-bit value (big-endian)
|
|
44
|
-
var src = b0 << 24 | b1 << 16 | output[pos + 2] << 8 | output[pos + 3];
|
|
45
|
-
// Shift left by 2 (multiply by 4 for word addressing)
|
|
46
|
-
src <<= 2;
|
|
47
|
-
// Decoding: subtract position
|
|
48
|
-
var dest = src - pos;
|
|
49
|
-
// Shift right by 2
|
|
50
|
-
dest >>>= 2;
|
|
51
|
-
// Reconstruct with sign extension and opcode
|
|
52
|
-
// (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) | (dest & 0x3FFFFF) | 0x40000000
|
|
53
|
-
var signBit = dest >>> 22 & 1;
|
|
54
|
-
var signExtend = signBit ? 0x3fc00000 : 0;
|
|
55
|
-
dest = signExtend | dest & 0x3fffff | 0x40000000;
|
|
56
|
-
// Write back (big-endian)
|
|
57
|
-
output[pos] = dest >>> 24 & 0xff;
|
|
58
|
-
output[pos + 1] = dest >>> 16 & 0xff;
|
|
59
|
-
output[pos + 2] = dest >>> 8 & 0xff;
|
|
60
|
-
output[pos + 3] = dest & 0xff;
|
|
61
|
-
}
|
|
62
|
-
pos += 4;
|
|
63
|
-
}
|
|
64
|
-
return output;
|
|
65
|
-
}
|
|
66
|
-
function createBcjSparcDecoder(properties, unpackSize) {
|
|
67
|
-
return (0, _createBufferingDecoderts.default)(decodeBcjSparc, properties, unpackSize);
|
|
68
|
-
}
|
|
69
|
-
/* 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; }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/7z-iterator/src/sevenz/codecs/BcjSparc.ts"],"sourcesContent":["// BCJ (SPARC) filter codec - converts SPARC branch instruction addresses\n// This filter makes SPARC executables more compressible by LZMA\n//\n// SPARC is big-endian. CALL instructions use 30-bit signed offsets.\n// The filter only transforms CALL instructions with specific byte patterns.\n//\n// Reference: https://github.com/kornelski/7z/blob/main/C/Bra.c\n\nimport { bufferFrom } from 'extract-base-iterator';\nimport type { Transform } from 'stream';\nimport createBufferingDecoder from './createBufferingDecoder.ts';\n\n/**\n * Decode SPARC BCJ filtered data\n * Reverses the BCJ transformation by converting absolute addresses back to relative\n *\n * SPARC CALL instruction matching (big-endian):\n * - First byte 0x40 and (second byte & 0xC0) == 0x00, OR\n * - First byte 0x7F and (second byte & 0xC0) == 0xC0\n *\n * @param input - SPARC BCJ filtered data\n * @param _properties - Unused for SPARC BCJ\n * @param _unpackSize - Unused for SPARC BCJ\n * @returns Unfiltered data\n */\nexport function decodeBcjSparc(input: Buffer, _properties?: Buffer, _unpackSize?: number): Buffer {\n const output = bufferFrom(input); // Copy since we modify in place\n let pos = 0;\n\n // Process 4-byte aligned positions\n while (pos + 4 <= output.length) {\n const b0 = output[pos];\n const b1 = output[pos + 1];\n\n // Check for CALL instruction with specific byte patterns:\n // (b0 == 0x40 && (b1 & 0xC0) == 0x00) || (b0 == 0x7F && (b1 & 0xC0) == 0xC0)\n if ((b0 === 0x40 && (b1 & 0xc0) === 0x00) || (b0 === 0x7f && (b1 & 0xc0) === 0xc0)) {\n // Read 32-bit value (big-endian)\n let src = (b0 << 24) | (b1 << 16) | (output[pos + 2] << 8) | output[pos + 3];\n\n // Shift left by 2 (multiply by 4 for word addressing)\n src <<= 2;\n\n // Decoding: subtract position\n let dest = src - pos;\n\n // Shift right by 2\n dest >>>= 2;\n\n // Reconstruct with sign extension and opcode\n // (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) | (dest & 0x3FFFFF) | 0x40000000\n const signBit = (dest >>> 22) & 1;\n const signExtend = signBit ? 0x3fc00000 : 0;\n dest = signExtend | (dest & 0x3fffff) | 0x40000000;\n\n // Write back (big-endian)\n output[pos] = (dest >>> 24) & 0xff;\n output[pos + 1] = (dest >>> 16) & 0xff;\n output[pos + 2] = (dest >>> 8) & 0xff;\n output[pos + 3] = dest & 0xff;\n }\n\n pos += 4;\n }\n\n return output;\n}\n\n/**\n * Create a SPARC BCJ decoder Transform stream\n */\nexport function createBcjSparcDecoder(properties?: Buffer, unpackSize?: number): Transform {\n return createBufferingDecoder(decodeBcjSparc, properties, unpackSize);\n}\n"],"names":["createBcjSparcDecoder","decodeBcjSparc","input","_properties","_unpackSize","output","bufferFrom","pos","length","b0","b1","src","dest","signBit","signExtend","properties","unpackSize","createBufferingDecoder"],"mappings":"AAAA,yEAAyE;AACzE,gEAAgE;AAChE,EAAE;AACF,oEAAoE;AACpE,4EAA4E;AAC5E,EAAE;AACF,+DAA+D;;;;;;;;;;;;QAiE/CA;eAAAA;;QA9CAC;eAAAA;;;mCAjBW;+EAEQ;;;;;;AAe5B,SAASA,eAAeC,KAAa,EAAEC,WAAoB,EAAEC,WAAoB;IACtF,IAAMC,SAASC,IAAAA,+BAAU,EAACJ,QAAQ,gCAAgC;IAClE,IAAIK,MAAM;IAEV,mCAAmC;IACnC,MAAOA,MAAM,KAAKF,OAAOG,MAAM,CAAE;QAC/B,IAAMC,KAAKJ,MAAM,CAACE,IAAI;QACtB,IAAMG,KAAKL,MAAM,CAACE,MAAM,EAAE;QAE1B,0DAA0D;QAC1D,6EAA6E;QAC7E,IAAI,AAACE,OAAO,QAAQ,AAACC,CAAAA,KAAK,IAAG,MAAO,QAAUD,OAAO,QAAQ,AAACC,CAAAA,KAAK,IAAG,MAAO,MAAO;YAClF,iCAAiC;YACjC,IAAIC,MAAM,AAACF,MAAM,KAAOC,MAAM,KAAOL,MAAM,CAACE,MAAM,EAAE,IAAI,IAAKF,MAAM,CAACE,MAAM,EAAE;YAE5E,sDAAsD;YACtDI,QAAQ;YAER,8BAA8B;YAC9B,IAAIC,OAAOD,MAAMJ;YAEjB,mBAAmB;YACnBK,UAAU;YAEV,6CAA6C;YAC7C,mFAAmF;YACnF,IAAMC,UAAU,AAACD,SAAS,KAAM;YAChC,IAAME,aAAaD,UAAU,aAAa;YAC1CD,OAAOE,aAAcF,OAAO,WAAY;YAExC,0BAA0B;YAC1BP,MAAM,CAACE,IAAI,GAAG,AAACK,SAAS,KAAM;YAC9BP,MAAM,CAACE,MAAM,EAAE,GAAG,AAACK,SAAS,KAAM;YAClCP,MAAM,CAACE,MAAM,EAAE,GAAG,AAACK,SAAS,IAAK;YACjCP,MAAM,CAACE,MAAM,EAAE,GAAGK,OAAO;QAC3B;QAEAL,OAAO;IACT;IAEA,OAAOF;AACT;AAKO,SAASL,sBAAsBe,UAAmB,EAAEC,UAAmB;IAC5E,OAAOC,IAAAA,iCAAsB,EAAChB,gBAAgBc,YAAYC;AAC5D"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Transform } from 'extract-base-iterator';
|
|
2
|
-
/**
|
|
3
|
-
* Decode Delta filtered data (synchronous, for buffered use)
|
|
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 streaming Delta decoder Transform.
|
|
14
|
-
* Processes data chunk by chunk, maintaining state between chunks.
|
|
15
|
-
*/
|
|
16
|
-
export declare function createDeltaDecoder(properties?: Buffer, _unpackSize?: number): InstanceType<typeof Transform>;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Transform } from 'extract-base-iterator';
|
|
2
|
-
/**
|
|
3
|
-
* Decode Delta filtered data (synchronous, for buffered use)
|
|
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 streaming Delta decoder Transform.
|
|
14
|
-
* Processes data chunk by chunk, maintaining state between chunks.
|
|
15
|
-
*/
|
|
16
|
-
export declare function createDeltaDecoder(properties?: Buffer, _unpackSize?: number): InstanceType<typeof Transform>;
|
|
@@ -1,74 +0,0 @@
|
|
|
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
|
-
//
|
|
8
|
-
// This implementation uses true streaming - processes data chunk by chunk
|
|
9
|
-
// while maintaining state between chunks.
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", {
|
|
12
|
-
value: true
|
|
13
|
-
});
|
|
14
|
-
function _export(target, all) {
|
|
15
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
_export(exports, {
|
|
21
|
-
get createDeltaDecoder () {
|
|
22
|
-
return createDeltaDecoder;
|
|
23
|
-
},
|
|
24
|
-
get decodeDelta () {
|
|
25
|
-
return decodeDelta;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
var _extractbaseiterator = require("extract-base-iterator");
|
|
29
|
-
function decodeDelta(input, properties, _unpackSize) {
|
|
30
|
-
// Distance parameter: default is 1
|
|
31
|
-
var distance = 1;
|
|
32
|
-
if (properties && properties.length >= 1) {
|
|
33
|
-
// Properties byte contains (distance - 1)
|
|
34
|
-
distance = properties[0] + 1;
|
|
35
|
-
}
|
|
36
|
-
var output = (0, _extractbaseiterator.bufferFrom)(input); // Copy since we modify in place
|
|
37
|
-
// State buffer for multi-byte distance
|
|
38
|
-
var state = [];
|
|
39
|
-
for(var i = 0; i < distance; i++){
|
|
40
|
-
state.push(0);
|
|
41
|
-
}
|
|
42
|
-
for(var j = 0; j < output.length; j++){
|
|
43
|
-
var idx = j % distance;
|
|
44
|
-
state[idx] = state[idx] + output[j] & 0xff;
|
|
45
|
-
output[j] = state[idx];
|
|
46
|
-
}
|
|
47
|
-
return output;
|
|
48
|
-
}
|
|
49
|
-
function createDeltaDecoder(properties, _unpackSize) {
|
|
50
|
-
// Distance parameter: default is 1
|
|
51
|
-
var distance = 1;
|
|
52
|
-
if (properties && properties.length >= 1) {
|
|
53
|
-
distance = properties[0] + 1;
|
|
54
|
-
}
|
|
55
|
-
// State buffer for multi-byte distance
|
|
56
|
-
var state = [];
|
|
57
|
-
for(var i = 0; i < distance; i++){
|
|
58
|
-
state.push(0);
|
|
59
|
-
}
|
|
60
|
-
var byteIndex = 0;
|
|
61
|
-
return new _extractbaseiterator.Transform({
|
|
62
|
-
transform: function(chunk, _encoding, callback) {
|
|
63
|
-
var output = (0, _extractbaseiterator.allocBuffer)(chunk.length);
|
|
64
|
-
for(var j = 0; j < chunk.length; j++){
|
|
65
|
-
var idx = byteIndex % distance;
|
|
66
|
-
state[idx] = state[idx] + chunk[j] & 0xff;
|
|
67
|
-
output[j] = state[idx];
|
|
68
|
-
byteIndex++;
|
|
69
|
-
}
|
|
70
|
-
callback(null, output);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
/* 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; }
|
|
@@ -1 +0,0 @@
|
|
|
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//\n// This implementation uses true streaming - processes data chunk by chunk\n// while maintaining state between chunks.\n\nimport { allocBuffer, bufferFrom, Transform } from 'extract-base-iterator';\n\n/**\n * Decode Delta filtered data (synchronous, for buffered use)\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 let distance = 1;\n if (properties && properties.length >= 1) {\n // Properties byte contains (distance - 1)\n distance = properties[0] + 1;\n }\n\n const output = bufferFrom(input); // Copy since we modify in place\n\n // State buffer for multi-byte distance\n const state: number[] = [];\n for (let i = 0; i < distance; i++) {\n state.push(0);\n }\n\n for (let j = 0; j < output.length; j++) {\n const 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 streaming Delta decoder Transform.\n * Processes data chunk by chunk, maintaining state between chunks.\n */\nexport function createDeltaDecoder(properties?: Buffer, _unpackSize?: number): InstanceType<typeof Transform> {\n // Distance parameter: default is 1\n let distance = 1;\n if (properties && properties.length >= 1) {\n distance = properties[0] + 1;\n }\n\n // State buffer for multi-byte distance\n const state: number[] = [];\n for (let i = 0; i < distance; i++) {\n state.push(0);\n }\n\n let byteIndex = 0;\n\n return new Transform({\n transform: (chunk: Buffer, _encoding: string, callback: (err?: Error | null, data?: Buffer) => void) => {\n const output = allocBuffer(chunk.length);\n\n for (let j = 0; j < chunk.length; j++) {\n const idx = byteIndex % distance;\n state[idx] = (state[idx] + chunk[j]) & 0xff;\n output[j] = state[idx];\n byteIndex++;\n }\n\n callback(null, output);\n },\n });\n}\n"],"names":["createDeltaDecoder","decodeDelta","input","properties","_unpackSize","distance","length","output","bufferFrom","state","i","push","j","idx","byteIndex","Transform","transform","chunk","_encoding","callback","allocBuffer"],"mappings":"AAAA,oEAAoE;AACpE,oEAAoE;AACpE,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,2DAA2D;AAC3D,EAAE;AACF,0EAA0E;AAC1E,0CAA0C;;;;;;;;;;;;QA0C1BA;eAAAA;;QA7BAC;eAAAA;;;mCAXmC;AAW5C,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,IAAMI,SAASC,IAAAA,+BAAU,EAACN,QAAQ,gCAAgC;IAElE,uCAAuC;IACvC,IAAMO,QAAkB,EAAE;IAC1B,IAAK,IAAIC,IAAI,GAAGA,IAAIL,UAAUK,IAAK;QACjCD,MAAME,IAAI,CAAC;IACb;IAEA,IAAK,IAAIC,IAAI,GAAGA,IAAIL,OAAOD,MAAM,EAAEM,IAAK;QACtC,IAAMC,MAAMD,IAAIP;QAChBI,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;AAMO,SAASP,mBAAmBG,UAAmB,EAAEC,WAAoB;IAC1E,mCAAmC;IACnC,IAAIC,WAAW;IACf,IAAIF,cAAcA,WAAWG,MAAM,IAAI,GAAG;QACxCD,WAAWF,UAAU,CAAC,EAAE,GAAG;IAC7B;IAEA,uCAAuC;IACvC,IAAMM,QAAkB,EAAE;IAC1B,IAAK,IAAIC,IAAI,GAAGA,IAAIL,UAAUK,IAAK;QACjCD,MAAME,IAAI,CAAC;IACb;IAEA,IAAIG,YAAY;IAEhB,OAAO,IAAIC,8BAAS,CAAC;QACnBC,WAAW,SAACC,OAAeC,WAAmBC;YAC5C,IAAMZ,SAASa,IAAAA,gCAAW,EAACH,MAAMX,MAAM;YAEvC,IAAK,IAAIM,IAAI,GAAGA,IAAIK,MAAMX,MAAM,EAAEM,IAAK;gBACrC,IAAMC,MAAMC,YAAYT;gBACxBI,KAAK,CAACI,IAAI,GAAG,AAACJ,KAAK,CAACI,IAAI,GAAGI,KAAK,CAACL,EAAE,GAAI;gBACvCL,MAAM,CAACK,EAAE,GAAGH,KAAK,CAACI,IAAI;gBACtBC;YACF;YAEAK,SAAS,MAAMZ;QACjB;IACF;AACF"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Transform } from '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
|
|
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
|
-
* Note: LZMA1 has no chunk boundaries, so this buffers all input
|
|
15
|
-
* and decompresses when the stream ends.
|
|
16
|
-
*/
|
|
17
|
-
export declare function createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Transform } from '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
|
|
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
|
-
* Note: LZMA1 has no chunk boundaries, so this buffers all input
|
|
15
|
-
* and decompresses when the stream ends.
|
|
16
|
-
*/
|
|
17
|
-
export declare function createLzmaDecoder(properties?: Buffer, unpackSize?: number): Transform;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// LZMA codec using TypeScript LZMA decoder
|
|
2
|
-
// LZMA properties in 7z are 5 bytes: 1 byte lc/lp/pb + 4 bytes dictionary size (little-endian)
|
|
3
|
-
"use strict";
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
function _export(target, all) {
|
|
8
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
_export(exports, {
|
|
14
|
-
get createLzmaDecoder () {
|
|
15
|
-
return createLzmaDecoder;
|
|
16
|
-
},
|
|
17
|
-
get decodeLzma () {
|
|
18
|
-
return decodeLzma;
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
var _indexts = require("../../lzma/index.js");
|
|
22
|
-
function decodeLzma(input, properties, unpackSize) {
|
|
23
|
-
if (!properties || properties.length < 5) {
|
|
24
|
-
throw new Error('LZMA requires 5-byte properties');
|
|
25
|
-
}
|
|
26
|
-
if (typeof unpackSize !== 'number' || unpackSize < 0) {
|
|
27
|
-
throw new Error('LZMA requires known unpack size');
|
|
28
|
-
}
|
|
29
|
-
return (0, _indexts.decodeLzma)(input, properties, unpackSize);
|
|
30
|
-
}
|
|
31
|
-
function createLzmaDecoder(properties, unpackSize) {
|
|
32
|
-
if (!properties || properties.length < 5) {
|
|
33
|
-
throw new Error('LZMA requires 5-byte properties');
|
|
34
|
-
}
|
|
35
|
-
if (typeof unpackSize !== 'number' || unpackSize < 0) {
|
|
36
|
-
throw new Error('LZMA requires known unpack size');
|
|
37
|
-
}
|
|
38
|
-
return (0, _indexts.createLzmaDecoder)(properties, unpackSize);
|
|
39
|
-
}
|
|
40
|
-
/* 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; }
|