plevinjs 0.1.10 → 0.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/zstd.js DELETED
@@ -1,574 +0,0 @@
1
- /**
2
- * Zstandard decompression with dictionaries, condensed from fzstd (MIT, 101arrowz).
3
- */
4
- const FRAME_MAGIC = 0x2fb528;
5
- const DICTIONARY_MAGIC = 0xec30a437;
6
- const bitsToBase = (bits, first) => {
7
- const base = new Int32Array(bits.length);
8
- let next = first;
9
- for (let code = 0; code < bits.length; code += 1) {
10
- base[code] = next;
11
- next += 1 << bits[code];
12
- }
13
- return base;
14
- };
15
- const LITERAL_BITS = new Uint8Array([
16
- ...Array(16).fill(0),
17
- 1,
18
- 1,
19
- 1,
20
- 1,
21
- 2,
22
- 2,
23
- 3,
24
- 3,
25
- 4,
26
- 6,
27
- 7,
28
- 8,
29
- 9,
30
- 10,
31
- 11,
32
- 12,
33
- 13,
34
- 14,
35
- 15,
36
- 16,
37
- ]);
38
- const MATCH_BITS = new Uint8Array([
39
- ...Array(32).fill(0),
40
- 1,
41
- 1,
42
- 1,
43
- 1,
44
- 2,
45
- 2,
46
- 3,
47
- 3,
48
- 4,
49
- 4,
50
- 5,
51
- 7,
52
- 8,
53
- 9,
54
- 10,
55
- 11,
56
- 12,
57
- 13,
58
- 14,
59
- 15,
60
- 16,
61
- ]);
62
- const LITERAL_BASE = bitsToBase(LITERAL_BITS, 0);
63
- const MATCH_BASE = bitsToBase(MATCH_BITS, 3);
64
- const LITERAL_DEFAULT = [
65
- 4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1,
66
- 1, 1, 1, -1, -1, -1, -1,
67
- ];
68
- const MATCH_DEFAULT = [
69
- 1,
70
- 4,
71
- 3,
72
- 2,
73
- 2,
74
- 2,
75
- 2,
76
- 2,
77
- 2,
78
- ...Array(37).fill(1),
79
- ...Array(7).fill(-1),
80
- ];
81
- const OFFSET_DEFAULT = [
82
- 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1,
83
- -1,
84
- ];
85
- const fail = (reason) => {
86
- throw new Error(`zstd: ${reason}`);
87
- };
88
- const highestBit = (value) => {
89
- let bits = 0;
90
- while (1 << bits <= value)
91
- bits += 1;
92
- return bits - 1;
93
- };
94
- const spread = (counts, symbols, log) => {
95
- const size = 1 << log;
96
- const table = {
97
- log,
98
- symbols: new Uint8Array(size),
99
- bits: new Uint8Array(size),
100
- next: new Uint16Array(size),
101
- };
102
- const states = new Uint16Array(256);
103
- let high = size;
104
- for (let symbol = 0; symbol < symbols; symbol += 1) {
105
- if (counts[symbol] < 0) {
106
- states[symbol] = 1;
107
- high -= 1;
108
- table.symbols[high] = symbol;
109
- }
110
- else {
111
- states[symbol] = counts[symbol];
112
- }
113
- }
114
- const step = (size >> 1) + (size >> 3) + 3;
115
- let at = 0;
116
- for (let symbol = 0; symbol < symbols; symbol += 1) {
117
- for (let held = 0; held < counts[symbol]; held += 1) {
118
- table.symbols[at] = symbol;
119
- do
120
- at = (at + step) & (size - 1);
121
- while (at >= high);
122
- }
123
- }
124
- if (at !== 0)
125
- fail("the symbols do not spread over the table");
126
- for (let cell = 0; cell < size; cell += 1) {
127
- const state = states[table.symbols[cell]]++;
128
- const bits = log - highestBit(state);
129
- table.bits[cell] = bits;
130
- table.next[cell] = (state << bits) - size;
131
- }
132
- return table;
133
- };
134
- const readFse = (data, at, maxLog) => {
135
- const log = (data[at] & 15) + 5;
136
- if (log > maxLog)
137
- fail("an entropy table is too accurate");
138
- const counts = new Int16Array(256);
139
- let position = (at << 3) + 4;
140
- let left = 1 << log;
141
- let symbol = -1;
142
- while (symbol < 255 && left > 0) {
143
- const bits = highestBit(left + 1);
144
- const byte = position >> 3;
145
- const mask = (1 << (bits + 1)) - 1;
146
- const wide = (data[byte] | (data[byte + 1] << 8) | (data[byte + 2] << 16)) >> (position & 7);
147
- const narrow = wide & ((1 << bits) - 1);
148
- const largest = mask - left - 1;
149
- let value = wide & mask;
150
- if (narrow < largest) {
151
- position += bits;
152
- value = narrow;
153
- }
154
- else {
155
- position += bits + 1;
156
- if (value > (1 << bits) - 1)
157
- value -= largest;
158
- }
159
- value -= 1;
160
- symbol += 1;
161
- counts[symbol] = value;
162
- left -= value < 0 ? -value : value;
163
- if (value !== 0)
164
- continue;
165
- let repeat = 3;
166
- while (repeat === 3) {
167
- const byteAt = position >> 3;
168
- repeat = ((data[byteAt] | (data[byteAt + 1] << 8)) >> (position & 7)) & 3;
169
- position += 2;
170
- symbol += repeat;
171
- }
172
- }
173
- if (symbol > 255 || left !== 0)
174
- fail("the entropy counts do not add up");
175
- return [spread(counts, symbol + 1, log), (position + 7) >> 3];
176
- };
177
- const buildHuffman = (weights, count) => {
178
- let sum = 0;
179
- for (let symbol = 0; symbol < count; symbol += 1) {
180
- const weight = weights[symbol];
181
- if (weight > 11)
182
- fail("a huffman weight is out of range");
183
- sum += weight ? 1 << (weight - 1) : 0;
184
- }
185
- const maxBits = highestBit(sum) + 1;
186
- const size = 1 << maxBits;
187
- const rest = size - sum;
188
- if (rest & (rest - 1))
189
- fail("the huffman weights do not add up");
190
- weights[count] = highestBit(rest) + 1;
191
- const ranks = new Uint32Array(13);
192
- for (let symbol = 0; symbol <= count; symbol += 1) {
193
- weights[symbol] = weights[symbol] && maxBits + 1 - weights[symbol];
194
- ranks[weights[symbol]] += 1;
195
- }
196
- const table = {
197
- maxBits,
198
- symbols: new Uint8Array(size),
199
- bits: new Uint8Array(size),
200
- };
201
- const starts = new Uint32Array(13);
202
- for (let bits = maxBits; bits > 0; bits -= 1) {
203
- const start = starts[bits];
204
- starts[bits - 1] = start + ranks[bits] * (1 << (maxBits - bits));
205
- table.bits.fill(bits, start, starts[bits - 1]);
206
- }
207
- if (starts[0] !== size)
208
- fail("the huffman codes do not fill the table");
209
- for (let symbol = 0; symbol <= count; symbol += 1) {
210
- const bits = weights[symbol];
211
- if (!bits)
212
- continue;
213
- const start = starts[bits];
214
- starts[bits] = start + (1 << (maxBits - bits));
215
- table.symbols.fill(symbol, start, starts[bits]);
216
- }
217
- return table;
218
- };
219
- const readHuffman = (data, at) => {
220
- const header = data[at];
221
- const weights = new Uint8Array(256);
222
- if (header >= 128) {
223
- const count = header - 127;
224
- for (let symbol = 0; symbol < count; symbol += 2) {
225
- const byte = data[at + 1 + (symbol >> 1)];
226
- weights[symbol] = byte >> 4;
227
- weights[symbol + 1] = byte & 15;
228
- }
229
- return [buildHuffman(weights, count), at + 1 + ((count + 1) >> 1)];
230
- }
231
- const [table, start] = readFse(data, at + 1, 6);
232
- const end = at + 1 + header;
233
- const last = data[end - 1];
234
- if (!last)
235
- fail("a huffman bitstream ends on a zero byte");
236
- const floor = start << 3;
237
- let position = (end << 3) - 8 + highestBit(last);
238
- let count = 0;
239
- let first = 0;
240
- let second = 0;
241
- let firstBits = table.log;
242
- let secondBits = table.log;
243
- for (;;) {
244
- position -= firstBits;
245
- if (position < floor)
246
- break;
247
- let byte = position >> 3;
248
- first +=
249
- ((data[byte] | (data[byte + 1] << 8)) >> (position & 7)) & ((1 << firstBits) - 1);
250
- weights[count] = table.symbols[first];
251
- count += 1;
252
- position -= secondBits;
253
- if (position < floor)
254
- break;
255
- byte = position >> 3;
256
- second +=
257
- ((data[byte] | (data[byte + 1] << 8)) >> (position & 7)) & ((1 << secondBits) - 1);
258
- weights[count] = table.symbols[second];
259
- count += 1;
260
- firstBits = table.bits[first];
261
- first = table.next[first];
262
- secondBits = table.bits[second];
263
- second = table.next[second];
264
- }
265
- return [buildHuffman(weights, count), end];
266
- };
267
- const decodeStream = (data, table, out) => {
268
- const last = data[data.length - 1];
269
- if (!last)
270
- fail("a literal bitstream ends on a zero byte");
271
- const mask = (1 << table.maxBits) - 1;
272
- const floor = -table.maxBits;
273
- let bits = table.maxBits;
274
- let position = (data.length << 3) - 8 + highestBit(last) - bits;
275
- let state = 0;
276
- let written = 0;
277
- while (position > floor && written < out.length) {
278
- const byte = position >> 3;
279
- const wide = (data[byte] | (data[byte + 1] << 8) | (data[byte + 2] << 16)) >> (position & 7);
280
- state = ((state << bits) | wide) & mask;
281
- out[written] = table.symbols[state];
282
- written += 1;
283
- bits = table.bits[state];
284
- position -= bits;
285
- }
286
- if (position !== floor || written !== out.length) {
287
- fail("a literal bitstream is the wrong length");
288
- }
289
- };
290
- const decodeLiterals = (data, table, out, streams) => {
291
- if (!streams) {
292
- decodeStream(data, table, out);
293
- return;
294
- }
295
- const quarter = (out.length + 3) >> 2;
296
- let at = 6;
297
- for (let stream = 0; stream < 4; stream += 1) {
298
- const size = data[stream << 1] | (data[(stream << 1) + 1] << 8);
299
- const end = stream === 3 ? data.length : at + size;
300
- const from = quarter * stream;
301
- decodeStream(data.subarray(at, end), table, out.subarray(from, from + quarter));
302
- at = end;
303
- }
304
- };
305
- const DEFAULT_TABLES = () => {
306
- const build = (counts, log) => {
307
- const held = new Int16Array(256);
308
- held.set(counts);
309
- return spread(held, counts.length, log);
310
- };
311
- return {
312
- literal: build(LITERAL_DEFAULT, 6),
313
- match: build(MATCH_DEFAULT, 6),
314
- offset: build(OFFSET_DEFAULT, 5),
315
- };
316
- };
317
- const PREDEFINED = DEFAULT_TABLES();
318
- const rleTable = (symbol) => {
319
- const table = spread(Int16Array.of(...Array(symbol).fill(0), 1), symbol + 1, 0);
320
- return table;
321
- };
322
- const readLiterals = (data, at, entropy) => {
323
- const header = data[at];
324
- const kind = header & 3;
325
- const format = (header >> 2) & 3;
326
- let size = header >> 4;
327
- let packed = 0;
328
- let byte = at;
329
- if (kind < 2) {
330
- if (format & 1) {
331
- size |= data[byte + 1] << 4;
332
- byte += 1;
333
- if (format & 2) {
334
- size |= data[byte + 1] << 12;
335
- byte += 1;
336
- }
337
- }
338
- else {
339
- size = header >> 3;
340
- }
341
- byte += 1;
342
- if (kind === 0) {
343
- return [{ data: data.subarray(byte, byte + size), size }, byte + size];
344
- }
345
- return [{ data: new Uint8Array(size).fill(data[byte]), size }, byte + 1];
346
- }
347
- if (format < 2) {
348
- size |= (data[at + 1] & 63) << 4;
349
- packed = (data[at + 1] >> 6) | (data[at + 2] << 2);
350
- byte = at + 3;
351
- }
352
- else if (format === 2) {
353
- size |= (data[at + 1] << 4) | ((data[at + 2] & 3) << 12);
354
- packed = (data[at + 2] >> 2) | (data[at + 3] << 6);
355
- byte = at + 4;
356
- }
357
- else {
358
- size |= (data[at + 1] << 4) | ((data[at + 2] & 63) << 12);
359
- packed = (data[at + 2] >> 6) | (data[at + 3] << 2) | (data[at + 4] << 10);
360
- byte = at + 5;
361
- }
362
- if (kind === 2) {
363
- const [table, after] = readHuffman(data, byte);
364
- entropy.huffman = table;
365
- packed -= after - byte;
366
- byte = after;
367
- }
368
- const table = entropy.huffman ?? fail("literals without a huffman table");
369
- const out = new Uint8Array(size);
370
- decodeLiterals(data.subarray(byte, byte + packed), table, out, format !== 0);
371
- return [{ data: out, size }, byte + packed];
372
- };
373
- const readTables = (data, at, entropy) => {
374
- const modes = data[at];
375
- if (modes & 3)
376
- fail("a sequence header reserves bits that are set");
377
- const held = entropy.tables;
378
- const held3 = [
379
- held?.match ?? null,
380
- held?.offset ?? null,
381
- held?.literal ?? null,
382
- ];
383
- const fallbacks = [PREDEFINED.match, PREDEFINED.offset, PREDEFINED.literal];
384
- const tables = [...fallbacks];
385
- let byte = at + 1;
386
- for (let which = 2; which > -1; which -= 1) {
387
- const mode = (modes >> ((which << 1) + 2)) & 3;
388
- if (mode === 1) {
389
- tables[which] = rleTable(data[byte]);
390
- byte += 1;
391
- }
392
- else if (mode === 2) {
393
- const [table, after] = readFse(data, byte, 9 - (which & 1));
394
- tables[which] = table;
395
- byte = after;
396
- }
397
- else if (mode === 3) {
398
- tables[which] = held3[which] ?? fail("a repeated table was never sent");
399
- }
400
- }
401
- const built = { match: tables[0], offset: tables[1], literal: tables[2] };
402
- entropy.tables = built;
403
- return [built, byte];
404
- };
405
- const readCount = (data, at) => {
406
- const first = data[at];
407
- if (first < 128)
408
- return [first, at + 1];
409
- if (first < 255)
410
- return [((first - 128) << 8) | data[at + 1], at + 2];
411
- return [(data[at + 1] | (data[at + 2] << 8)) + 0x7f00, at + 3];
412
- };
413
- const nextOffset = (raw, literals, recent) => {
414
- if (raw > 3) {
415
- recent[2] = recent[1];
416
- recent[1] = recent[0];
417
- recent[0] = raw - 3;
418
- return recent[0];
419
- }
420
- const index = raw - (literals !== 0 ? 1 : 0);
421
- if (index === 0)
422
- return recent[0];
423
- const offset = index === 3 ? recent[0] - 1 : recent[index];
424
- if (index > 1)
425
- recent[2] = recent[1];
426
- recent[1] = recent[0];
427
- recent[0] = offset;
428
- return offset;
429
- };
430
- const runSequences = (data, at, end, count, literals, entropy, out, written) => {
431
- const [tables] = readTables(data, at, entropy);
432
- const last = data[end - 1];
433
- if (!last)
434
- fail("a sequence bitstream ends on a zero byte");
435
- const grab = (position, bits) => {
436
- const byte = position >> 3;
437
- const wide = (data[byte] |
438
- (data[byte + 1] << 8) |
439
- (data[byte + 2] << 16) |
440
- (data[byte + 3] << 24)) >>>
441
- (position & 7);
442
- return bits === 32 ? wide : wide & ((1 << bits) - 1);
443
- };
444
- let position = (end << 3) - 8 + highestBit(last) - tables.literal.log;
445
- let literal = grab(position, tables.literal.log);
446
- position -= tables.offset.log;
447
- let offset = grab(position, tables.offset.log);
448
- position -= tables.match.log;
449
- let match = grab(position, tables.match.log);
450
- let read = 0;
451
- let cursor = written;
452
- for (let done = 0; done < count; done += 1) {
453
- const literalCode = tables.literal.symbols[literal];
454
- const literalBits = tables.literal.bits[literal];
455
- const matchCode = tables.match.symbols[match];
456
- const matchBits = tables.match.bits[match];
457
- const offsetCode = tables.offset.symbols[offset];
458
- const offsetBits = tables.offset.bits[offset];
459
- position -= offsetCode;
460
- const raw = (1 << offsetCode) + grab(position, offsetCode);
461
- position -= MATCH_BITS[matchCode];
462
- const matchLength = MATCH_BASE[matchCode] + grab(position, MATCH_BITS[matchCode]);
463
- position -= LITERAL_BITS[literalCode];
464
- const literalLength = LITERAL_BASE[literalCode] + grab(position, LITERAL_BITS[literalCode]);
465
- position -= literalBits;
466
- literal = tables.literal.next[literal] + grab(position, literalBits);
467
- position -= matchBits;
468
- match = tables.match.next[match] + grab(position, matchBits);
469
- position -= offsetBits;
470
- offset = tables.offset.next[offset] + grab(position, offsetBits);
471
- const distance = nextOffset(raw, literalLength, entropy.offsets);
472
- out.set(literals.data.subarray(read, read + literalLength), cursor);
473
- read += literalLength;
474
- cursor += literalLength;
475
- if (distance > cursor)
476
- fail("a match reaches before the window");
477
- for (let step = 0; step < matchLength; step += 1) {
478
- out[cursor + step] = out[cursor + step - distance];
479
- }
480
- cursor += matchLength;
481
- }
482
- out.set(literals.data.subarray(read, literals.size), cursor);
483
- return cursor + literals.size - read;
484
- };
485
- const decodeBlock = (data, at, end, entropy, out, written) => {
486
- const [literals, next] = readLiterals(data, at, entropy);
487
- const [count, start] = readCount(data, next);
488
- if (count === 0) {
489
- out.set(literals.data.subarray(0, literals.size), written);
490
- return written + literals.size;
491
- }
492
- return runSequences(data, start, end, count, literals, entropy, out, written);
493
- };
494
- const readFrame = (data) => {
495
- const magic = data[0] | (data[1] << 8) | (data[2] << 16);
496
- if (magic !== FRAME_MAGIC || data[3] !== 253)
497
- fail("not a zstd frame");
498
- const flags = data[4];
499
- const single = (flags >> 5) & 1;
500
- const sizeFlag = flags >> 6;
501
- const at = 6 - single + (flags & 3 ? ((flags & 3) === 3 ? 4 : flags & 3) : 0);
502
- const sizeBytes = sizeFlag ? 1 << sizeFlag : single;
503
- let size = 0;
504
- for (let step = 0; step < sizeBytes; step += 1)
505
- size += data[at + step] * 256 ** step;
506
- return [at + sizeBytes, sizeBytes ? size + (sizeFlag === 1 ? 256 : 0) : 0];
507
- };
508
- const grow = (out, needed) => {
509
- if (needed <= out.length)
510
- return out;
511
- const wider = new Uint8Array(Math.max(needed, out.length * 2));
512
- wider.set(out);
513
- return wider;
514
- };
515
- /** One frame, with any dictionary laid in front of it as the window it reaches. */
516
- export const decompress = (data, dictionary) => {
517
- const [start, size] = readFrame(data);
518
- const prefix = dictionary ? dictionary.content : new Uint8Array(0);
519
- const entropy = {
520
- huffman: dictionary?.huffman ?? null,
521
- tables: dictionary?.tables ?? null,
522
- offsets: Int32Array.from(dictionary ? dictionary.offsets : [1, 4, 8]),
523
- };
524
- let out = new Uint8Array(prefix.length + (size || 1 << 16));
525
- out.set(prefix);
526
- let written = prefix.length;
527
- let at = start;
528
- for (;;) {
529
- const header = data[at] | (data[at + 1] << 8) | (data[at + 2] << 16);
530
- const kind = (header >> 1) & 3;
531
- const held = header >> 3;
532
- at += 3;
533
- out = grow(out, written + held + (1 << 17));
534
- if (kind === 0) {
535
- out.set(data.subarray(at, at + held), written);
536
- written += held;
537
- at += held;
538
- }
539
- else if (kind === 1) {
540
- out.fill(data[at], written, written + held);
541
- written += held;
542
- at += 1;
543
- }
544
- else if (kind === 2) {
545
- written = decodeBlock(data, at, at + held, entropy, out, written);
546
- at += held;
547
- }
548
- else {
549
- fail("a block has no known type");
550
- }
551
- if (header & 1)
552
- break;
553
- }
554
- return out.subarray(prefix.length, written);
555
- };
556
- /** A trained dictionary: its entropy tables, its repeat offsets and its content. */
557
- export const loadDictionary = (data) => {
558
- const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
559
- if (view.getUint32(0, true) !== DICTIONARY_MAGIC) {
560
- return { id: 0, content: data, huffman: null, tables: null, offsets: [1, 4, 8] };
561
- }
562
- const [huffman, afterHuffman] = readHuffman(data, 8);
563
- const [offset, afterOffset] = readFse(data, afterHuffman, 8);
564
- const [match, afterMatch] = readFse(data, afterOffset, 9);
565
- const [literal, afterLiteral] = readFse(data, afterMatch, 9);
566
- return {
567
- id: view.getUint32(4, true),
568
- content: data.subarray(afterLiteral + 12),
569
- huffman,
570
- tables: { literal, match, offset },
571
- offsets: [0, 1, 2].map((step) => view.getUint32(afterLiteral + step * 4, true)),
572
- };
573
- };
574
- //# sourceMappingURL=zstd.js.map
package/dist/zstd.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"zstd.js","sourceRoot":"","sources":["../src/zstd.ts"],"names":[],"mappings":"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"}