@push.rocks/smartarchive 4.0.6 → 4.0.7
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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/bzip2/bititerator.d.ts +2 -0
- package/dist_ts/bzip2/bititerator.js +43 -0
- package/dist_ts/bzip2/bzip2.d.ts +14 -0
- package/dist_ts/bzip2/bzip2.js +353 -0
- package/dist_ts/bzip2/index.d.ts +2 -0
- package/dist_ts/bzip2/index.js +83 -0
- package/dist_ts/classes.archiveanalyzer.js +4 -4
- package/dist_ts/classes.bzip2tools.d.ts +1 -9
- package/dist_ts/classes.bzip2tools.js +3 -28
- package/dist_ts/classes.smartarchive.js +6 -2
- package/dist_ts/plugins.d.ts +1 -2
- package/dist_ts/plugins.js +2 -3
- package/license +5 -1
- package/package.json +2 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/bzip2/bititerator.ts +41 -0
- package/ts/bzip2/bzip2.ts +335 -0
- package/ts/bzip2/index.ts +84 -0
- package/ts/classes.archiveanalyzer.ts +4 -4
- package/ts/classes.bzip2tools.ts +2 -31
- package/ts/classes.smartarchive.ts +5 -1
- package/ts/plugins.ts +1 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartarchive',
|
|
6
|
-
version: '4.0.
|
|
6
|
+
version: '4.0.7',
|
|
7
7
|
description: 'work with archives'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLG9CQUFvQjtDQUNsQyxDQUFBIn0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];
|
|
2
|
+
// returns a function that reads bits.
|
|
3
|
+
// takes a buffer iterator as input
|
|
4
|
+
export function bitIterator(nextBuffer) {
|
|
5
|
+
var bit = 0, byte = 0;
|
|
6
|
+
var bytes = nextBuffer();
|
|
7
|
+
var f = function (n) {
|
|
8
|
+
if (n === null && bit != 0) { // align to byte boundary
|
|
9
|
+
bit = 0;
|
|
10
|
+
byte++;
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
var result = 0;
|
|
14
|
+
while (n > 0) {
|
|
15
|
+
if (byte >= bytes.length) {
|
|
16
|
+
byte = 0;
|
|
17
|
+
bytes = nextBuffer();
|
|
18
|
+
}
|
|
19
|
+
var left = 8 - bit;
|
|
20
|
+
if (bit === 0 && n > 0)
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
f.bytesRead++;
|
|
23
|
+
if (n >= left) {
|
|
24
|
+
result <<= left;
|
|
25
|
+
result |= (BITMASK[left] & bytes[byte++]);
|
|
26
|
+
bit = 0;
|
|
27
|
+
n -= left;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
result <<= n;
|
|
31
|
+
result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit));
|
|
32
|
+
bit += n;
|
|
33
|
+
n = 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
f.bytesRead = 0;
|
|
40
|
+
return f;
|
|
41
|
+
}
|
|
42
|
+
;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0aXRlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iemlwMi9iaXRpdGVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFbEUsc0NBQXNDO0FBQ3RDLG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsV0FBVyxDQUFDLFVBQXdCO0lBQ2hELElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksS0FBSyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxHQUFHLFVBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUcseUJBQXlCO1lBQ3BELEdBQUcsR0FBRyxDQUFDLENBQUE7WUFDUCxJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU87U0FDVjtRQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE9BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1QsS0FBSyxHQUFHLFVBQVUsRUFBRSxDQUFDO2FBQ3hCO1lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNuQixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ2xCLGFBQWE7Z0JBQ2IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDWCxNQUFNLEtBQUssSUFBSSxDQUFDO2dCQUNoQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixDQUFDLElBQUksSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0gsTUFBTSxLQUFLLENBQUMsQ0FBQztnQkFDYixNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNULENBQUMsR0FBRyxDQUFDLENBQUM7YUFDVDtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBQ0YsYUFBYTtJQUNiLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUFBLENBQUMifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class Bzip2Error extends Error {
|
|
2
|
+
name: string;
|
|
3
|
+
message: string;
|
|
4
|
+
stack: string;
|
|
5
|
+
constructor(messageArg: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class Bzip2 {
|
|
8
|
+
Bzip2Error: typeof Bzip2Error;
|
|
9
|
+
crcTable: number[];
|
|
10
|
+
array: (bytes: any) => (n: any) => number;
|
|
11
|
+
simple: (srcbuffer: any, stream: any) => void;
|
|
12
|
+
header: (bits: any) => number;
|
|
13
|
+
decompress: (bits: any, stream: any, buf: any, bufsize: any, streamCRC: any) => any;
|
|
14
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
export class Bzip2Error extends Error {
|
|
2
|
+
constructor(messageArg) {
|
|
3
|
+
super();
|
|
4
|
+
this.name = 'Bzip2Error';
|
|
5
|
+
this.stack = (new Error()).stack;
|
|
6
|
+
this.message = messageArg;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
var messageArg = {
|
|
10
|
+
Error: function (message) { throw new Bzip2Error(message); }
|
|
11
|
+
};
|
|
12
|
+
export class Bzip2 {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.Bzip2Error = Bzip2Error;
|
|
15
|
+
this.crcTable = [
|
|
16
|
+
0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
|
|
17
|
+
0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
|
|
18
|
+
0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
|
|
19
|
+
0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
|
|
20
|
+
0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
|
|
21
|
+
0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
|
|
22
|
+
0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
|
|
23
|
+
0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
|
|
24
|
+
0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
|
|
25
|
+
0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
|
|
26
|
+
0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
|
|
27
|
+
0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
|
|
28
|
+
0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
|
|
29
|
+
0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
|
|
30
|
+
0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
|
|
31
|
+
0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
|
|
32
|
+
0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
|
|
33
|
+
0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
|
|
34
|
+
0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
|
|
35
|
+
0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
|
|
36
|
+
0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
|
|
37
|
+
0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
|
|
38
|
+
0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
|
|
39
|
+
0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
|
|
40
|
+
0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
|
|
41
|
+
0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
|
|
42
|
+
0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
|
|
43
|
+
0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
|
|
44
|
+
0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
|
|
45
|
+
0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
|
|
46
|
+
0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
|
|
47
|
+
0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
|
|
48
|
+
0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
|
|
49
|
+
0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
|
|
50
|
+
0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
|
|
51
|
+
0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
|
|
52
|
+
0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
|
|
53
|
+
0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
|
|
54
|
+
0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
|
|
55
|
+
0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
|
|
56
|
+
0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
|
|
57
|
+
0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
|
|
58
|
+
0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
|
|
59
|
+
0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
|
|
60
|
+
0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
|
|
61
|
+
0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
|
|
62
|
+
0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
|
|
63
|
+
0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
|
|
64
|
+
0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
|
|
65
|
+
0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
|
|
66
|
+
0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
|
|
67
|
+
0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
|
|
68
|
+
0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
|
|
69
|
+
0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
|
|
70
|
+
0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
|
|
71
|
+
0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
|
|
72
|
+
0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
|
|
73
|
+
0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
|
|
74
|
+
0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
|
|
75
|
+
0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
|
|
76
|
+
0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
|
|
77
|
+
0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
|
|
78
|
+
0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
|
|
79
|
+
0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
|
|
80
|
+
];
|
|
81
|
+
this.array = function (bytes) {
|
|
82
|
+
var bit = 0, byte = 0;
|
|
83
|
+
var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];
|
|
84
|
+
return function (n) {
|
|
85
|
+
var result = 0;
|
|
86
|
+
while (n > 0) {
|
|
87
|
+
var left = 8 - bit;
|
|
88
|
+
if (n >= left) {
|
|
89
|
+
result <<= left;
|
|
90
|
+
result |= (BITMASK[left] & bytes[byte++]);
|
|
91
|
+
bit = 0;
|
|
92
|
+
n -= left;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
result <<= n;
|
|
96
|
+
result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit));
|
|
97
|
+
bit += n;
|
|
98
|
+
n = 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
this.simple = function (srcbuffer, stream) {
|
|
105
|
+
var bits = this.array(srcbuffer);
|
|
106
|
+
var size = this.header(bits);
|
|
107
|
+
var ret = false;
|
|
108
|
+
var bufsize = 100000 * size;
|
|
109
|
+
var buf = new Int32Array(bufsize);
|
|
110
|
+
do {
|
|
111
|
+
ret = this.decompress(bits, stream, buf, bufsize);
|
|
112
|
+
} while (!ret);
|
|
113
|
+
};
|
|
114
|
+
this.header = function (bits) {
|
|
115
|
+
this.byteCount = new Int32Array(256);
|
|
116
|
+
this.symToByte = new Uint8Array(256);
|
|
117
|
+
this.mtfSymbol = new Int32Array(256);
|
|
118
|
+
this.selectors = new Uint8Array(0x8000);
|
|
119
|
+
if (bits(8 * 3) != 4348520)
|
|
120
|
+
messageArg.Error("No magic number found");
|
|
121
|
+
var i = bits(8) - 48;
|
|
122
|
+
if (i < 1 || i > 9)
|
|
123
|
+
messageArg.Error("Not a BZIP archive");
|
|
124
|
+
return i;
|
|
125
|
+
};
|
|
126
|
+
this.decompress = function (bits, stream, buf, bufsize, streamCRC) {
|
|
127
|
+
var MAX_HUFCODE_BITS = 20;
|
|
128
|
+
var MAX_SYMBOLS = 258;
|
|
129
|
+
var SYMBOL_RUNA = 0;
|
|
130
|
+
var SYMBOL_RUNB = 1;
|
|
131
|
+
var GROUP_SIZE = 50;
|
|
132
|
+
var crc = 0 ^ (-1);
|
|
133
|
+
for (var h = '', i = 0; i < 6; i++)
|
|
134
|
+
h += bits(8).toString(16);
|
|
135
|
+
if (h == "177245385090") {
|
|
136
|
+
var finalCRC = bits(32) | 0;
|
|
137
|
+
if (finalCRC !== streamCRC)
|
|
138
|
+
messageArg.Error("Error in bzip2: crc32 do not match");
|
|
139
|
+
// align stream to byte
|
|
140
|
+
bits(null);
|
|
141
|
+
return null; // reset streamCRC for next call
|
|
142
|
+
}
|
|
143
|
+
if (h != "314159265359")
|
|
144
|
+
messageArg.Error("eek not valid bzip data");
|
|
145
|
+
var crcblock = bits(32) | 0; // CRC code
|
|
146
|
+
if (bits(1))
|
|
147
|
+
messageArg.Error("unsupported obsolete version");
|
|
148
|
+
var origPtr = bits(24);
|
|
149
|
+
if (origPtr > bufsize)
|
|
150
|
+
messageArg.Error("Initial position larger than buffer size");
|
|
151
|
+
var t = bits(16);
|
|
152
|
+
var symTotal = 0;
|
|
153
|
+
for (i = 0; i < 16; i++) {
|
|
154
|
+
if (t & (1 << (15 - i))) {
|
|
155
|
+
var k = bits(16);
|
|
156
|
+
for (j = 0; j < 16; j++) {
|
|
157
|
+
if (k & (1 << (15 - j))) {
|
|
158
|
+
this.symToByte[symTotal++] = (16 * i) + j;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
var groupCount = bits(3);
|
|
164
|
+
if (groupCount < 2 || groupCount > 6)
|
|
165
|
+
messageArg.Error("another error");
|
|
166
|
+
var nSelectors = bits(15);
|
|
167
|
+
if (nSelectors == 0)
|
|
168
|
+
messageArg.Error("meh");
|
|
169
|
+
for (var i = 0; i < groupCount; i++)
|
|
170
|
+
this.mtfSymbol[i] = i;
|
|
171
|
+
for (var i = 0; i < nSelectors; i++) {
|
|
172
|
+
for (var j = 0; bits(1); j++)
|
|
173
|
+
if (j >= groupCount)
|
|
174
|
+
messageArg.Error("whoops another error");
|
|
175
|
+
var uc = this.mtfSymbol[j];
|
|
176
|
+
for (var k = j - 1; k >= 0; k--) {
|
|
177
|
+
this.mtfSymbol[k + 1] = this.mtfSymbol[k];
|
|
178
|
+
}
|
|
179
|
+
this.mtfSymbol[0] = uc;
|
|
180
|
+
this.selectors[i] = uc;
|
|
181
|
+
}
|
|
182
|
+
var symCount = symTotal + 2;
|
|
183
|
+
var groups = [];
|
|
184
|
+
var length = new Uint8Array(MAX_SYMBOLS), temp = new Uint16Array(MAX_HUFCODE_BITS + 1);
|
|
185
|
+
var hufGroup;
|
|
186
|
+
for (var j = 0; j < groupCount; j++) {
|
|
187
|
+
t = bits(5); //lengths
|
|
188
|
+
for (var i = 0; i < symCount; i++) {
|
|
189
|
+
while (true) {
|
|
190
|
+
if (t < 1 || t > MAX_HUFCODE_BITS)
|
|
191
|
+
messageArg.Error("I gave up a while ago on writing error messages");
|
|
192
|
+
if (!bits(1))
|
|
193
|
+
break;
|
|
194
|
+
if (!bits(1))
|
|
195
|
+
t++;
|
|
196
|
+
else
|
|
197
|
+
t--;
|
|
198
|
+
}
|
|
199
|
+
length[i] = t;
|
|
200
|
+
}
|
|
201
|
+
var minLen, maxLen;
|
|
202
|
+
minLen = maxLen = length[0];
|
|
203
|
+
for (var i = 1; i < symCount; i++) {
|
|
204
|
+
if (length[i] > maxLen)
|
|
205
|
+
maxLen = length[i];
|
|
206
|
+
else if (length[i] < minLen)
|
|
207
|
+
minLen = length[i];
|
|
208
|
+
}
|
|
209
|
+
hufGroup = groups[j] = {};
|
|
210
|
+
hufGroup.permute = new Int32Array(MAX_SYMBOLS);
|
|
211
|
+
hufGroup.limit = new Int32Array(MAX_HUFCODE_BITS + 1);
|
|
212
|
+
hufGroup.base = new Int32Array(MAX_HUFCODE_BITS + 1);
|
|
213
|
+
hufGroup.minLen = minLen;
|
|
214
|
+
hufGroup.maxLen = maxLen;
|
|
215
|
+
var base = hufGroup.base;
|
|
216
|
+
var limit = hufGroup.limit;
|
|
217
|
+
var pp = 0;
|
|
218
|
+
for (var i = minLen; i <= maxLen; i++)
|
|
219
|
+
for (var t = 0; t < symCount; t++)
|
|
220
|
+
if (length[t] == i)
|
|
221
|
+
hufGroup.permute[pp++] = t;
|
|
222
|
+
for (i = minLen; i <= maxLen; i++)
|
|
223
|
+
temp[i] = limit[i] = 0;
|
|
224
|
+
for (i = 0; i < symCount; i++)
|
|
225
|
+
temp[length[i]]++;
|
|
226
|
+
pp = t = 0;
|
|
227
|
+
for (i = minLen; i < maxLen; i++) {
|
|
228
|
+
pp += temp[i];
|
|
229
|
+
limit[i] = pp - 1;
|
|
230
|
+
pp <<= 1;
|
|
231
|
+
base[i + 1] = pp - (t += temp[i]);
|
|
232
|
+
}
|
|
233
|
+
limit[maxLen] = pp + temp[maxLen] - 1;
|
|
234
|
+
base[minLen] = 0;
|
|
235
|
+
}
|
|
236
|
+
for (var i = 0; i < 256; i++) {
|
|
237
|
+
this.mtfSymbol[i] = i;
|
|
238
|
+
this.byteCount[i] = 0;
|
|
239
|
+
}
|
|
240
|
+
var runPos, count, symCount, selector;
|
|
241
|
+
runPos = count = symCount = selector = 0;
|
|
242
|
+
while (true) {
|
|
243
|
+
if (!(symCount--)) {
|
|
244
|
+
symCount = GROUP_SIZE - 1;
|
|
245
|
+
if (selector >= nSelectors)
|
|
246
|
+
messageArg.Error("meow i'm a kitty, that's an error");
|
|
247
|
+
hufGroup = groups[this.selectors[selector++]];
|
|
248
|
+
base = hufGroup.base;
|
|
249
|
+
limit = hufGroup.limit;
|
|
250
|
+
}
|
|
251
|
+
i = hufGroup.minLen;
|
|
252
|
+
j = bits(i);
|
|
253
|
+
while (true) {
|
|
254
|
+
if (i > hufGroup.maxLen)
|
|
255
|
+
messageArg.Error("rawr i'm a dinosaur");
|
|
256
|
+
if (j <= limit[i])
|
|
257
|
+
break;
|
|
258
|
+
i++;
|
|
259
|
+
j = (j << 1) | bits(1);
|
|
260
|
+
}
|
|
261
|
+
j -= base[i];
|
|
262
|
+
if (j < 0 || j >= MAX_SYMBOLS)
|
|
263
|
+
messageArg.Error("moo i'm a cow");
|
|
264
|
+
var nextSym = hufGroup.permute[j];
|
|
265
|
+
if (nextSym == SYMBOL_RUNA || nextSym == SYMBOL_RUNB) {
|
|
266
|
+
if (!runPos) {
|
|
267
|
+
runPos = 1;
|
|
268
|
+
t = 0;
|
|
269
|
+
}
|
|
270
|
+
if (nextSym == SYMBOL_RUNA)
|
|
271
|
+
t += runPos;
|
|
272
|
+
else
|
|
273
|
+
t += 2 * runPos;
|
|
274
|
+
runPos <<= 1;
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
if (runPos) {
|
|
278
|
+
runPos = 0;
|
|
279
|
+
if (count + t > bufsize)
|
|
280
|
+
messageArg.Error("Boom.");
|
|
281
|
+
uc = this.symToByte[this.mtfSymbol[0]];
|
|
282
|
+
this.byteCount[uc] += t;
|
|
283
|
+
while (t--)
|
|
284
|
+
buf[count++] = uc;
|
|
285
|
+
}
|
|
286
|
+
if (nextSym > symTotal)
|
|
287
|
+
break;
|
|
288
|
+
if (count >= bufsize)
|
|
289
|
+
messageArg.Error("I can't think of anything. Error");
|
|
290
|
+
i = nextSym - 1;
|
|
291
|
+
uc = this.mtfSymbol[i];
|
|
292
|
+
for (var k = i - 1; k >= 0; k--) {
|
|
293
|
+
this.mtfSymbol[k + 1] = this.mtfSymbol[k];
|
|
294
|
+
}
|
|
295
|
+
this.mtfSymbol[0] = uc;
|
|
296
|
+
uc = this.symToByte[uc];
|
|
297
|
+
this.byteCount[uc]++;
|
|
298
|
+
buf[count++] = uc;
|
|
299
|
+
}
|
|
300
|
+
if (origPtr < 0 || origPtr >= count)
|
|
301
|
+
messageArg.Error("I'm a monkey and I'm throwing something at someone, namely you");
|
|
302
|
+
var j = 0;
|
|
303
|
+
for (var i = 0; i < 256; i++) {
|
|
304
|
+
k = j + this.byteCount[i];
|
|
305
|
+
this.byteCount[i] = j;
|
|
306
|
+
j = k;
|
|
307
|
+
}
|
|
308
|
+
for (var i = 0; i < count; i++) {
|
|
309
|
+
uc = buf[i] & 0xff;
|
|
310
|
+
buf[this.byteCount[uc]] |= (i << 8);
|
|
311
|
+
this.byteCount[uc]++;
|
|
312
|
+
}
|
|
313
|
+
var pos = 0, current = 0, run = 0;
|
|
314
|
+
if (count) {
|
|
315
|
+
pos = buf[origPtr];
|
|
316
|
+
current = (pos & 0xff);
|
|
317
|
+
pos >>= 8;
|
|
318
|
+
run = -1;
|
|
319
|
+
}
|
|
320
|
+
count = count;
|
|
321
|
+
var copies, previous, outbyte;
|
|
322
|
+
while (count) {
|
|
323
|
+
count--;
|
|
324
|
+
previous = current;
|
|
325
|
+
pos = buf[pos];
|
|
326
|
+
current = pos & 0xff;
|
|
327
|
+
pos >>= 8;
|
|
328
|
+
if (run++ == 3) {
|
|
329
|
+
copies = current;
|
|
330
|
+
outbyte = previous;
|
|
331
|
+
current = -1;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
copies = 1;
|
|
335
|
+
outbyte = current;
|
|
336
|
+
}
|
|
337
|
+
while (copies--) {
|
|
338
|
+
crc = ((crc << 8) ^ this.crcTable[((crc >> 24) ^ outbyte) & 0xFF]) & 0xFFFFFFFF; // crc32
|
|
339
|
+
stream(outbyte);
|
|
340
|
+
}
|
|
341
|
+
if (current != previous)
|
|
342
|
+
run = 0;
|
|
343
|
+
}
|
|
344
|
+
crc = (crc ^ (-1)) >>> 0;
|
|
345
|
+
if ((crc | 0) != (crcblock | 0))
|
|
346
|
+
messageArg.Error("Error in bzip2: crc32 do not match");
|
|
347
|
+
streamCRC = (crc ^ ((streamCRC << 1) | (streamCRC >>> 31))) & 0xFFFFFFFF;
|
|
348
|
+
return streamCRC;
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
;
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnppcDIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iemlwMi9iemlwMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sVUFBVyxTQUFRLEtBQUs7SUFLbkMsWUFBWSxVQUFrQjtRQUM1QixLQUFLLEVBQUUsQ0FBQztRQUxILFNBQUksR0FBVyxZQUFZLENBQUM7UUFFNUIsVUFBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUlqQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxJQUFJLFVBQVUsR0FBRztJQUNmLEtBQUssRUFBRSxVQUFTLE9BQU8sSUFBRyxNQUFNLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUEsQ0FBQztDQUMxRCxDQUFDO0FBRUYsTUFBTSxPQUFPLEtBQUs7SUFBbEI7UUFDUyxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLGFBQVEsR0FDZjtZQUNDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtZQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1lBQzlD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
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { Bzip2 } from './bzip2.js';
|
|
3
|
+
import { bitIterator } from './bititerator.js';
|
|
4
|
+
export function unbzip2Stream() {
|
|
5
|
+
const bzip2Instance = new Bzip2();
|
|
6
|
+
var bufferQueue = [];
|
|
7
|
+
var hasBytes = 0;
|
|
8
|
+
var blockSize = 0;
|
|
9
|
+
var broken = false;
|
|
10
|
+
var done = false;
|
|
11
|
+
var bitReader = null;
|
|
12
|
+
var streamCRC = null;
|
|
13
|
+
function decompressBlock() {
|
|
14
|
+
if (!blockSize) {
|
|
15
|
+
blockSize = bzip2Instance.header(bitReader);
|
|
16
|
+
streamCRC = 0;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
var bufsize = 100000 * blockSize;
|
|
20
|
+
var buf = new Int32Array(bufsize);
|
|
21
|
+
var chunk = [];
|
|
22
|
+
var f = function (b) {
|
|
23
|
+
chunk.push(b);
|
|
24
|
+
};
|
|
25
|
+
streamCRC = bzip2Instance.decompress(bitReader, f, buf, bufsize, streamCRC);
|
|
26
|
+
if (streamCRC === null) {
|
|
27
|
+
// reset for next bzip2 header
|
|
28
|
+
blockSize = 0;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return Buffer.from(chunk);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
var outlength = 0;
|
|
37
|
+
const decompressAndPush = async (smartDuplexStream) => {
|
|
38
|
+
if (broken)
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
const resultChunk = decompressBlock();
|
|
42
|
+
smartDuplexStream.push(resultChunk);
|
|
43
|
+
if (resultChunk) {
|
|
44
|
+
//console.error('write at', outlength.toString(16));
|
|
45
|
+
outlength += resultChunk.length;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.error(e);
|
|
50
|
+
smartDuplexStream.emit('error', e);
|
|
51
|
+
broken = true;
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
return new plugins.smartstream.SmartDuplex({
|
|
56
|
+
writeFunction: async function (data, streamTools) {
|
|
57
|
+
//console.error('received', data.length,'bytes in', typeof data);
|
|
58
|
+
bufferQueue.push(data);
|
|
59
|
+
hasBytes += data.length;
|
|
60
|
+
if (bitReader === null) {
|
|
61
|
+
bitReader = bitIterator(function () {
|
|
62
|
+
return bufferQueue.shift();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
while (!broken && hasBytes - bitReader.bytesRead + 1 >= (25000 + 100000 * blockSize || 4)) {
|
|
66
|
+
//console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer');
|
|
67
|
+
await decompressAndPush(this);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
finalFunction: async function (streamTools) {
|
|
71
|
+
//console.error(x,'last compressing with', hasBytes, 'bytes in buffer');
|
|
72
|
+
while (!broken && bitReader && hasBytes > bitReader.bytesRead) {
|
|
73
|
+
await decompressAndPush(this);
|
|
74
|
+
}
|
|
75
|
+
if (!broken) {
|
|
76
|
+
if (streamCRC !== null)
|
|
77
|
+
this.emit('error', new Error('input stream ended prematurely'));
|
|
78
|
+
this.queue(null);
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9iemlwMi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLFVBQVUsYUFBYTtJQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ2xDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztJQUVyQixTQUFTLGVBQWU7UUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLFNBQVMsR0FBRyxDQUFDLENBQUM7U0FDZjthQUFNO1lBQ0wsSUFBSSxPQUFPLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNqQyxJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVsQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDO1lBRUYsU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtnQkFDdEIsOEJBQThCO2dCQUM5QixTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNkLE9BQU87YUFDUjtpQkFBTTtnQkFDTCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0I7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsaUJBQWtELEVBQUUsRUFBRTtRQUNyRixJQUFJLE1BQU07WUFBRSxPQUFPO1FBQ25CLElBQUk7WUFDRixNQUFNLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQztZQUN0QyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2Ysb0RBQW9EO2dCQUNwRCxTQUFTLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQzthQUNqQztTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDLENBQUM7SUFFRixPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDekMsYUFBYSxFQUFFLEtBQUssV0FBVyxJQUFJLEVBQUUsV0FBVztZQUM5QyxpRUFBaUU7WUFDakUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN4QixJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3RCLFNBQVMsR0FBRyxXQUFXLENBQUM7b0JBQ3RCLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxDQUFDLE1BQU0sSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDekYsNkZBQTZGO2dCQUM3RixNQUFNLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9CO1FBQ0gsQ0FBQztRQUNELGFBQWEsRUFBRSxLQUFLLFdBQVcsV0FBVztZQUN4Qyx3RUFBd0U7WUFDeEUsT0FBTyxDQUFDLE1BQU0sSUFBSSxTQUFTLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUU7Z0JBQzdELE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7WUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksU0FBUyxLQUFLLElBQUk7b0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -15,12 +15,12 @@ export class ArchiveAnalyzer {
|
|
|
15
15
|
]);
|
|
16
16
|
return archiveMimeTypes.has(mimeType);
|
|
17
17
|
}
|
|
18
|
-
getDecompressionStream(mimeTypeArg) {
|
|
18
|
+
async getDecompressionStream(mimeTypeArg) {
|
|
19
19
|
switch (mimeTypeArg) {
|
|
20
20
|
case 'application/gzip':
|
|
21
21
|
return this.smartArchiveRef.gzipTools.getDecompressionStream();
|
|
22
22
|
case 'application/x-bzip2':
|
|
23
|
-
return this.smartArchiveRef.bzip2Tools.getDecompressionStream(); // replace with your own bzip2 decompression stream
|
|
23
|
+
return await this.smartArchiveRef.bzip2Tools.getDecompressionStream(); // replace with your own bzip2 decompression stream
|
|
24
24
|
case 'application/x-tar':
|
|
25
25
|
return this.smartArchiveRef.tarTools.getDecompressionStream(); // replace with your own tar decompression stream
|
|
26
26
|
default:
|
|
@@ -35,7 +35,7 @@ export class ArchiveAnalyzer {
|
|
|
35
35
|
readableObjectMode: true,
|
|
36
36
|
writeFunction: async (chunkArg, streamtools) => {
|
|
37
37
|
const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
|
|
38
|
-
const decompressionStream = this.getDecompressionStream(fileType?.mime);
|
|
38
|
+
const decompressionStream = await this.getDecompressionStream(fileType?.mime);
|
|
39
39
|
resultStream.push(chunkArg);
|
|
40
40
|
if (firstRun) {
|
|
41
41
|
firstRun = false;
|
|
@@ -58,4 +58,4 @@ export class ArchiveAnalyzer {
|
|
|
58
58
|
return analyzerstream;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcmNoaXZlYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmFyY2hpdmVhbmFseXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQVN4QyxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFZLGtCQUFnQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBZ0I7UUFDOUMsTUFBTSxnQkFBZ0IsR0FBZ0IsSUFBSSxHQUFHLENBQUM7WUFDNUMsaUJBQWlCO1lBQ2pCLDhCQUE4QjtZQUM5QixtQkFBbUI7WUFDbkIsa0JBQWtCO1lBQ2xCLDZCQUE2QjtZQUM3QixxQkFBcUI7WUFDckIsb0NBQW9DO1NBQ3JDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFHTyxLQUFLLENBQUMsc0JBQXNCLENBQ2xDLFdBQW9EO1FBRXBELFFBQVEsV0FBVyxFQUFFO1lBQ25CLEtBQUssa0JBQWtCO2dCQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDakUsS0FBSyxxQkFBcUI7Z0JBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsbURBQW1EO1lBQzVILEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxpREFBaUQ7WUFDbEg7Z0JBQ0Usd0RBQXdEO2dCQUN4RCxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRCxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUEwQjtZQUNsRixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDckQsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxJQUFXLENBQUMsQ0FBQztnQkFDckYsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsTUFBTSxNQUFNLEdBQW9CO3dCQUM5QixRQUFRO3dCQUNSLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO3dCQUN2RCxZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEIsQ0FBQztvQkFDRixXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixPQUFPLElBQUksQ0FBQztpQkFDYjtZQUNILENBQUM7WUFDRCxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
1
|
import type { SmartArchive } from './classes.smartarchive.js';
|
|
4
2
|
import * as plugins from './plugins.js';
|
|
5
|
-
export declare class DecompressBzip2Transform extends plugins.stream.Transform {
|
|
6
|
-
private bzip2Decompressor;
|
|
7
|
-
constructor();
|
|
8
|
-
_transform(chunk: Buffer, encoding: BufferEncoding, callback: plugins.stream.TransformCallback): void;
|
|
9
|
-
_flush(callback: plugins.stream.TransformCallback): void;
|
|
10
|
-
}
|
|
11
3
|
export declare class Bzip2Tools {
|
|
12
4
|
smartArchiveRef: SmartArchive;
|
|
13
5
|
constructor(smartArchiveRefArg: SmartArchive);
|
|
14
|
-
getDecompressionStream():
|
|
6
|
+
getDecompressionStream(): plugins.smartstream.SmartDuplex<any, void>;
|
|
15
7
|
}
|
|
@@ -1,36 +1,11 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
|
|
3
|
-
constructor() {
|
|
4
|
-
super();
|
|
5
|
-
// Initialize the bzip2 decompressor once here
|
|
6
|
-
this.bzip2Decompressor = plugins.unbzip2Stream();
|
|
7
|
-
this.bzip2Decompressor.on('data', (data) => {
|
|
8
|
-
// When data is decompressed, push it to the stream
|
|
9
|
-
this.push(data);
|
|
10
|
-
});
|
|
11
|
-
this.bzip2Decompressor.on('error', (err) => {
|
|
12
|
-
// If an error occurs, emit it on this stream
|
|
13
|
-
this.emit('error', err);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
_transform(chunk, encoding, callback) {
|
|
17
|
-
// Pass the chunk directly to the decompressor
|
|
18
|
-
// The decompressor will handle the state across chunks
|
|
19
|
-
this.bzip2Decompressor.write(chunk);
|
|
20
|
-
callback();
|
|
21
|
-
}
|
|
22
|
-
_flush(callback) {
|
|
23
|
-
// When the stream is ending, end the decompressor stream as well
|
|
24
|
-
this.bzip2Decompressor.end();
|
|
25
|
-
callback();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
2
|
+
import { unbzip2Stream } from './bzip2/index.js';
|
|
28
3
|
export class Bzip2Tools {
|
|
29
4
|
constructor(smartArchiveRefArg) {
|
|
30
5
|
this.smartArchiveRef = smartArchiveRefArg;
|
|
31
6
|
}
|
|
32
7
|
getDecompressionStream() {
|
|
33
|
-
return
|
|
8
|
+
return unbzip2Stream();
|
|
34
9
|
}
|
|
35
10
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5iemlwMnRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5iemlwMnRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sVUFBVTtJQUdyQixZQUFZLGtCQUFnQztRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQ0YifQ==
|