plevinjs 0.1.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/README.md +283 -0
- package/dist/address.d.ts +28 -0
- package/dist/address.d.ts.map +1 -0
- package/dist/address.js +242 -0
- package/dist/address.js.map +1 -0
- package/dist/countries.d.ts +3 -0
- package/dist/countries.d.ts.map +1 -0
- package/dist/countries.js +255 -0
- package/dist/countries.js.map +1 -0
- package/dist/derive.d.ts +13 -0
- package/dist/derive.d.ts.map +1 -0
- package/dist/derive.js +124 -0
- package/dist/derive.js.map +1 -0
- package/dist/extra.d.ts +9 -0
- package/dist/extra.d.ts.map +1 -0
- package/dist/extra.js +217 -0
- package/dist/extra.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +282 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +148 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +3 -0
- package/dist/models.js.map +1 -0
- package/dist/node.d.ts +6 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +12 -0
- package/dist/node.js.map +1 -0
- package/dist/reader.d.ts +85 -0
- package/dist/reader.d.ts.map +1 -0
- package/dist/reader.js +461 -0
- package/dist/reader.js.map +1 -0
- package/dist/zones.d.ts +3 -0
- package/dist/zones.d.ts.map +1 -0
- package/dist/zones.js +373 -0
- package/dist/zones.js.map +1 -0
- package/dist/zstd.d.ts +31 -0
- package/dist/zstd.d.ts.map +1 -0
- package/dist/zstd.js +574 -0
- package/dist/zstd.js.map +1 -0
- package/package.json +68 -0
package/dist/zstd.js
ADDED
|
@@ -0,0 +1,574 @@
|
|
|
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
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zstd.js","sourceRoot":"","sources":["../src/zstd.ts"],"names":[],"mappings":"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"}
|