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