node-pkware 4.0.0 → 5.0.0-alpha.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.
@@ -0,0 +1,350 @@
1
+ import { ChBitsAsc, ChCodeAsc, DistBits, DistCode, ExLenBits, LenBase, LenBits, LenCode, LITERAL_END_STREAM, } from '../constants.js';
2
+ import { AbortedError, InvalidCompressionTypeError, InvalidDictionarySizeError } from '../errors.js';
3
+ import { quotientAndRemainder, getLowestNBitsOf, mergeSparseArrays, nBitsOfOnes, repeat, unfold, concatArrayBuffers, } from '../functions.js';
4
+ /**
5
+ * This function assumes there are at least 2 bytes of data in the buffer
6
+ */
7
+ function readHeader(buffer) {
8
+ let compressionType;
9
+ const view = new Uint8Array(buffer);
10
+ switch (view[0]) {
11
+ case 0: {
12
+ compressionType = 'binary';
13
+ break;
14
+ }
15
+ case 1: {
16
+ compressionType = 'ascii';
17
+ break;
18
+ }
19
+ default: {
20
+ throw new InvalidCompressionTypeError();
21
+ }
22
+ }
23
+ let dictionarySize;
24
+ switch (view[1]) {
25
+ case 4: {
26
+ dictionarySize = 'small';
27
+ break;
28
+ }
29
+ case 5: {
30
+ dictionarySize = 'medium';
31
+ break;
32
+ }
33
+ case 6: {
34
+ dictionarySize = 'large';
35
+ break;
36
+ }
37
+ default: {
38
+ throw new InvalidDictionarySizeError();
39
+ }
40
+ }
41
+ return {
42
+ compressionType,
43
+ dictionarySize,
44
+ };
45
+ }
46
+ function generateDecodeTables(startIndexes, lengthBits) {
47
+ const codes = repeat(0, 0x1_00);
48
+ lengthBits.forEach((lengthBit, i) => {
49
+ for (let index = startIndexes[i]; index < 0x1_00; index = index + (1 << lengthBit)) {
50
+ codes[index] = i;
51
+ }
52
+ });
53
+ return codes;
54
+ }
55
+ /**
56
+ * PAT = populate ascii table
57
+ */
58
+ function createPATIterator(limit, stepper) {
59
+ return function (n) {
60
+ if (n >= limit) {
61
+ return false;
62
+ }
63
+ return [n, n + (1 << stepper)];
64
+ };
65
+ }
66
+ function populateAsciiTable(value, index, bits, limit) {
67
+ const iterator = createPATIterator(limit, value - bits);
68
+ const seed = ChCodeAsc[index] >> bits;
69
+ const indices = unfold(iterator, seed);
70
+ const table = [];
71
+ indices.forEach((idx) => {
72
+ table[idx] = index;
73
+ });
74
+ return table;
75
+ }
76
+ export class Explode {
77
+ needMoreInput;
78
+ extraBits;
79
+ bitBuffer;
80
+ backupData;
81
+ lengthCodes;
82
+ distPosCodes;
83
+ inputBuffer;
84
+ outputBuffer;
85
+ compressionType;
86
+ dictionarySize;
87
+ dictionarySizeMask;
88
+ chBitsAsc;
89
+ asciiTable2C34;
90
+ asciiTable2D34;
91
+ asciiTable2E34;
92
+ asciiTable2EB4;
93
+ constructor() {
94
+ this.needMoreInput = true;
95
+ this.extraBits = 0;
96
+ this.bitBuffer = 0;
97
+ this.backupData = {
98
+ extraBits: -1,
99
+ bitBuffer: -1,
100
+ inputBuffer: new ArrayBuffer(0),
101
+ };
102
+ this.lengthCodes = generateDecodeTables(LenCode, LenBits);
103
+ this.distPosCodes = generateDecodeTables(DistCode, DistBits);
104
+ this.inputBuffer = new ArrayBuffer(0);
105
+ this.outputBuffer = new ArrayBuffer(0);
106
+ this.compressionType = 'unknown';
107
+ this.dictionarySize = 'unknown';
108
+ this.dictionarySizeMask = 0;
109
+ this.chBitsAsc = repeat(0, 0x1_00);
110
+ this.asciiTable2C34 = repeat(0, 0x1_00);
111
+ this.asciiTable2D34 = repeat(0, 0x1_00);
112
+ this.asciiTable2E34 = repeat(0, 0x80);
113
+ this.asciiTable2EB4 = repeat(0, 0x1_00);
114
+ }
115
+ /**
116
+ * @throws {InvalidCompressionTypeError}
117
+ * @throws {InvalidDictionarySizeError}
118
+ * @throws {AbortedError}
119
+ */
120
+ handleData(input) {
121
+ this.needMoreInput = true;
122
+ this.inputBuffer = input;
123
+ this.processChunkData();
124
+ const blockSize = 0x10_00;
125
+ let output;
126
+ if (this.outputBuffer.byteLength > blockSize) {
127
+ let [numberOfBlocks] = quotientAndRemainder(this.outputBuffer.byteLength, blockSize);
128
+ // making sure to leave one block worth of data for lookback when processing chunk data
129
+ numberOfBlocks = numberOfBlocks - 1;
130
+ const numberOfBytes = numberOfBlocks * blockSize;
131
+ // TODO: do we need this slicing here...
132
+ output = this.outputBuffer.slice(0, numberOfBytes);
133
+ this.outputBuffer = this.outputBuffer.slice(numberOfBytes);
134
+ }
135
+ else {
136
+ output = new ArrayBuffer(0);
137
+ }
138
+ // -----------------
139
+ if (this.needMoreInput) {
140
+ throw new AbortedError();
141
+ }
142
+ return concatArrayBuffers([output, this.outputBuffer]);
143
+ }
144
+ generateAsciiTables() {
145
+ this.chBitsAsc = ChBitsAsc.map((value, index) => {
146
+ if (value <= 8) {
147
+ this.asciiTable2C34 = mergeSparseArrays(populateAsciiTable(value, index, 0, 0x1_00), this.asciiTable2C34);
148
+ return value - 0;
149
+ }
150
+ const acc = getLowestNBitsOf(ChCodeAsc[index], 8);
151
+ if (acc === 0) {
152
+ this.asciiTable2EB4 = mergeSparseArrays(populateAsciiTable(value, index, 8, 0x1_00), this.asciiTable2EB4);
153
+ return value - 8;
154
+ }
155
+ this.asciiTable2C34[acc] = 0xff;
156
+ if (getLowestNBitsOf(acc, 6) === 0) {
157
+ this.asciiTable2E34 = mergeSparseArrays(populateAsciiTable(value, index, 6, 0x80), this.asciiTable2E34);
158
+ return value - 6;
159
+ }
160
+ this.asciiTable2D34 = mergeSparseArrays(populateAsciiTable(value, index, 4, 0x1_00), this.asciiTable2D34);
161
+ return value - 4;
162
+ });
163
+ }
164
+ /**
165
+ * @throws {@link AbortedError} when there isn't enough data to be wasted
166
+ */
167
+ wasteBits(numberOfBits) {
168
+ if (numberOfBits > this.extraBits && this.inputBuffer.byteLength === 0) {
169
+ throw new AbortedError();
170
+ }
171
+ if (numberOfBits <= this.extraBits) {
172
+ this.bitBuffer = this.bitBuffer >> numberOfBits;
173
+ this.extraBits = this.extraBits - numberOfBits;
174
+ return;
175
+ }
176
+ const nextByte = new Uint8Array(this.inputBuffer)[0];
177
+ this.inputBuffer = this.inputBuffer.slice(1);
178
+ this.bitBuffer = ((this.bitBuffer >> this.extraBits) | (nextByte << 8)) >> (numberOfBits - this.extraBits);
179
+ this.extraBits = this.extraBits + 8 - numberOfBits;
180
+ }
181
+ /**
182
+ * @throws {@link AbortedError}
183
+ */
184
+ decodeNextLiteral() {
185
+ const lastBit = getLowestNBitsOf(this.bitBuffer, 1);
186
+ this.wasteBits(1);
187
+ if (lastBit) {
188
+ let lengthCode = this.lengthCodes[getLowestNBitsOf(this.bitBuffer, 8)];
189
+ this.wasteBits(LenBits[lengthCode]);
190
+ const extraLenghtBits = ExLenBits[lengthCode];
191
+ if (extraLenghtBits !== 0) {
192
+ const extraLength = getLowestNBitsOf(this.bitBuffer, extraLenghtBits);
193
+ try {
194
+ this.wasteBits(extraLenghtBits);
195
+ }
196
+ catch {
197
+ if (lengthCode + extraLength !== 0x1_0e) {
198
+ throw new AbortedError();
199
+ }
200
+ }
201
+ lengthCode = LenBase[lengthCode] + extraLength;
202
+ }
203
+ return lengthCode + 0x1_00;
204
+ }
205
+ const lastByte = getLowestNBitsOf(this.bitBuffer, 8);
206
+ if (this.compressionType === 'binary') {
207
+ this.wasteBits(8);
208
+ return lastByte;
209
+ }
210
+ let value;
211
+ if (lastByte > 0) {
212
+ value = this.asciiTable2C34[lastByte];
213
+ if (value === 0xff) {
214
+ if (getLowestNBitsOf(this.bitBuffer, 6)) {
215
+ this.wasteBits(4);
216
+ value = this.asciiTable2D34[getLowestNBitsOf(this.bitBuffer, 8)];
217
+ }
218
+ else {
219
+ this.wasteBits(6);
220
+ value = this.asciiTable2E34[getLowestNBitsOf(this.bitBuffer, 7)];
221
+ }
222
+ }
223
+ }
224
+ else {
225
+ this.wasteBits(8);
226
+ value = this.asciiTable2EB4[getLowestNBitsOf(this.bitBuffer, 8)];
227
+ }
228
+ this.wasteBits(this.chBitsAsc[value]);
229
+ return value;
230
+ }
231
+ /**
232
+ * @throws {@link AbortedError}
233
+ */
234
+ decodeDistance(repeatLength) {
235
+ const distPosCode = this.distPosCodes[getLowestNBitsOf(this.bitBuffer, 8)];
236
+ const distPosBits = DistBits[distPosCode];
237
+ this.wasteBits(distPosBits);
238
+ let distance;
239
+ let bitsToWaste;
240
+ if (repeatLength === 2) {
241
+ distance = (distPosCode << 2) | getLowestNBitsOf(this.bitBuffer, 2);
242
+ bitsToWaste = 2;
243
+ }
244
+ else {
245
+ switch (this.dictionarySize) {
246
+ case 'small': {
247
+ distance = (distPosCode << 4) | (this.bitBuffer & this.dictionarySizeMask);
248
+ bitsToWaste = 4;
249
+ break;
250
+ }
251
+ case 'medium': {
252
+ distance = (distPosCode << 5) | (this.bitBuffer & this.dictionarySizeMask);
253
+ bitsToWaste = 5;
254
+ break;
255
+ }
256
+ case 'large': {
257
+ distance = (distPosCode << 6) | (this.bitBuffer & this.dictionarySizeMask);
258
+ bitsToWaste = 6;
259
+ break;
260
+ }
261
+ }
262
+ }
263
+ this.wasteBits(bitsToWaste);
264
+ return distance + 1;
265
+ }
266
+ processChunkData() {
267
+ if (this.inputBuffer.byteLength === 0) {
268
+ return;
269
+ }
270
+ if (this.compressionType === 'unknown') {
271
+ const headerParsedSuccessfully = this.parseInitialData();
272
+ if (!headerParsedSuccessfully || this.inputBuffer.byteLength === 0) {
273
+ return;
274
+ }
275
+ }
276
+ this.needMoreInput = false;
277
+ this.backup();
278
+ try {
279
+ let nextLiteral = this.decodeNextLiteral();
280
+ while (nextLiteral !== LITERAL_END_STREAM) {
281
+ let addition;
282
+ if (nextLiteral >= 0x1_00) {
283
+ const repeatLength = nextLiteral - 0xfe;
284
+ const minusDistance = this.decodeDistance(repeatLength);
285
+ const availableData = this.outputBuffer.slice(this.outputBuffer.byteLength - minusDistance, repeatLength);
286
+ if (repeatLength > minusDistance) {
287
+ const multipliedData = repeat(availableData, Math.ceil(repeatLength / availableData.byteLength));
288
+ addition = concatArrayBuffers(multipliedData).slice(0, repeatLength);
289
+ }
290
+ else {
291
+ addition = availableData;
292
+ }
293
+ }
294
+ else {
295
+ addition = new ArrayBuffer(1);
296
+ const additionView = new Uint8Array(addition);
297
+ additionView[0] = nextLiteral;
298
+ }
299
+ this.outputBuffer = concatArrayBuffers([this.outputBuffer, addition]);
300
+ this.backup();
301
+ nextLiteral = this.decodeNextLiteral();
302
+ }
303
+ }
304
+ catch {
305
+ this.needMoreInput = true;
306
+ }
307
+ if (this.needMoreInput) {
308
+ this.restore();
309
+ }
310
+ }
311
+ parseInitialData() {
312
+ if (this.inputBuffer.byteLength < 4) {
313
+ return false;
314
+ }
315
+ const { compressionType, dictionarySize } = readHeader(this.inputBuffer.slice(0, 2));
316
+ this.compressionType = compressionType;
317
+ this.dictionarySize = dictionarySize;
318
+ this.bitBuffer = new Uint8Array(this.inputBuffer)[2];
319
+ this.inputBuffer = this.inputBuffer.slice(3);
320
+ switch (dictionarySize) {
321
+ case 'small': {
322
+ this.dictionarySizeMask = nBitsOfOnes(4);
323
+ break;
324
+ }
325
+ case 'medium': {
326
+ this.dictionarySizeMask = nBitsOfOnes(5);
327
+ break;
328
+ }
329
+ case 'large': {
330
+ this.dictionarySizeMask = nBitsOfOnes(6);
331
+ break;
332
+ }
333
+ }
334
+ if (this.compressionType === 'ascii') {
335
+ this.generateAsciiTables();
336
+ }
337
+ return true;
338
+ }
339
+ backup() {
340
+ this.backupData.extraBits = this.extraBits;
341
+ this.backupData.bitBuffer = this.bitBuffer;
342
+ this.backupData.inputBuffer = this.inputBuffer;
343
+ }
344
+ restore() {
345
+ this.extraBits = this.backupData.extraBits;
346
+ this.bitBuffer = this.backupData.bitBuffer;
347
+ this.inputBuffer = this.backupData.inputBuffer;
348
+ }
349
+ }
350
+ //# sourceMappingURL=Explode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Explode.js","sourceRoot":"","sources":["../../src/simple/Explode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare class Implode {
2
+ private inputBuffer;
3
+ private outputBuffer;
4
+ private readonly compressionType;
5
+ private readonly dictionarySize;
6
+ private dictionarySizeMask;
7
+ private streamEnded;
8
+ private readonly distCodes;
9
+ private readonly distBits;
10
+ private startIndex;
11
+ private handledFirstTwoBytes;
12
+ private outBits;
13
+ private nChBits;
14
+ private nChCodes;
15
+ constructor(compressionType: 'ascii' | 'binary', dictionarySize: 'small' | 'medium' | 'large');
16
+ handleData(input: ArrayBuffer): ArrayBuffer;
17
+ private processChunkData;
18
+ /**
19
+ * @returns false - non flushable
20
+ * @returns true - flushable
21
+ * @returns null - flushable, but there might be a better repetition
22
+ */
23
+ private isRepetitionFlushable;
24
+ /**
25
+ * repetitions are at least 2 bytes long,
26
+ * so the initial 2 bytes can be moved to the output as is
27
+ */
28
+ private handleFirstTwoBytes;
29
+ private setup;
30
+ private outputBits;
31
+ }