@pezkuwi/wasm-util 7.5.9 → 7.5.10

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/fflate.js ADDED
@@ -0,0 +1,304 @@
1
+ const u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;
2
+ const clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
3
+ const fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
4
+ const fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
5
+ const freb = (eb, start) => {
6
+ const b = new u16(31);
7
+ for (let i = 0; i < 31; ++i) {
8
+ b[i] = start += 1 << eb[i - 1];
9
+ }
10
+ // numbers here are at max 18 bits
11
+ const r = new u32(b[30]);
12
+ for (let i = 1; i < 30; ++i) {
13
+ for (let j = b[i]; j < b[i + 1]; ++j) {
14
+ r[j] = ((j - b[i]) << 5) | i;
15
+ }
16
+ }
17
+ return [b, r];
18
+ };
19
+ const [fl, revfl] = freb(fleb, 2);
20
+ fl[28] = 258, revfl[258] = 28;
21
+ const [fd] = freb(fdeb, 0);
22
+ const rev = new u16(32768);
23
+ for (let i = 0; i < 32768; ++i) {
24
+ // reverse table algorithm from SO
25
+ let x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);
26
+ x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);
27
+ x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);
28
+ rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;
29
+ }
30
+ const hMap = ((cd, mb, r) => {
31
+ const s = cd.length;
32
+ // index
33
+ let i = 0;
34
+ // u16 "map": index -> # of codes with bit length = index
35
+ const l = new u16(mb);
36
+ // length of cd must be 288 (total # of codes)
37
+ for (; i < s; ++i) {
38
+ if (cd[i])
39
+ ++l[cd[i] - 1];
40
+ }
41
+ // u16 "map": index -> minimum code for bit length = index
42
+ const le = new u16(mb);
43
+ for (i = 1; i < mb; ++i) {
44
+ le[i] = (le[i - 1] + l[i - 1]) << 1;
45
+ }
46
+ let co;
47
+ if (r) {
48
+ // u16 "map": index -> number of actual bits, symbol for code
49
+ co = new u16(1 << mb);
50
+ // bits to remove for reverser
51
+ const rvb = 15 - mb;
52
+ for (i = 0; i < s; ++i) {
53
+ // ignore 0 lengths
54
+ if (cd[i]) {
55
+ // num encoding both symbol and bits read
56
+ const sv = (i << 4) | cd[i];
57
+ // free bits
58
+ const r = mb - cd[i];
59
+ // start value
60
+ let v = le[cd[i] - 1]++ << r;
61
+ // m is end value
62
+ for (const m = v | ((1 << r) - 1); v <= m; ++v) {
63
+ // every 16 bit value starting with the code yields the same result
64
+ co[rev[v] >> rvb] = sv;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ else {
70
+ co = new u16(s);
71
+ for (i = 0; i < s; ++i) {
72
+ if (cd[i]) {
73
+ co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
74
+ }
75
+ }
76
+ }
77
+ return co;
78
+ });
79
+ const flt = new u8(288);
80
+ for (let i = 0; i < 144; ++i)
81
+ flt[i] = 8;
82
+ for (let i = 144; i < 256; ++i)
83
+ flt[i] = 9;
84
+ for (let i = 256; i < 280; ++i)
85
+ flt[i] = 7;
86
+ for (let i = 280; i < 288; ++i)
87
+ flt[i] = 8;
88
+ const fdt = new u8(32);
89
+ for (let i = 0; i < 32; ++i)
90
+ fdt[i] = 5;
91
+ const flrm = hMap(flt, 9, 1);
92
+ const fdrm = hMap(fdt, 5, 1);
93
+ const bits = (d, p, m) => {
94
+ const o = p >>> 3;
95
+ return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;
96
+ };
97
+ const bits16 = (d, p) => {
98
+ const o = p >>> 3;
99
+ return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));
100
+ };
101
+ const shft = (p) => (p >>> 3) + (p & 7 && 1);
102
+ const slc = (v, s, e) => {
103
+ if (s == null || s < 0)
104
+ s = 0;
105
+ if (e == null || e > v.length)
106
+ e = v.length;
107
+ // can't use .constructor in case user-supplied
108
+ const n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);
109
+ n.set(v.subarray(s, e));
110
+ return n;
111
+ };
112
+ const max = (a) => {
113
+ let m = a[0];
114
+ for (let i = 1, count = a.length; i < count; ++i) {
115
+ if (a[i] > m)
116
+ m = a[i];
117
+ }
118
+ return m;
119
+ };
120
+ const inflt = (dat, buf, st) => {
121
+ const noSt = !st || st.i;
122
+ if (!st)
123
+ st = {};
124
+ // source length
125
+ const sl = dat.length;
126
+ // have to estimate size
127
+ const noBuf = !buf || !noSt;
128
+ // Assumes roughly 33% compression ratio average
129
+ if (!buf)
130
+ buf = new u8(sl * 3);
131
+ // ensure buffer can fit at least l elements
132
+ const cbuf = (l) => {
133
+ let bl = buf.length;
134
+ // need to increase size to fit
135
+ if (l > bl) {
136
+ // Double or set to necessary, whichever is greater
137
+ const nbuf = new u8(Math.max(bl << 1, l));
138
+ nbuf.set(buf);
139
+ buf = nbuf;
140
+ }
141
+ };
142
+ // last chunk bitpos bytes
143
+ let final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
144
+ if (final && !lm)
145
+ return buf;
146
+ // total bits
147
+ const tbts = sl << 3;
148
+ do {
149
+ if (!lm) {
150
+ // BFINAL - this is only 1 when last chunk is next
151
+ st.f = final = bits(dat, pos, 1);
152
+ // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
153
+ const type = bits(dat, pos + 1, 3);
154
+ pos += 3;
155
+ if (!type) {
156
+ // go to end of byte boundary
157
+ const s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
158
+ if (t > sl) {
159
+ if (noSt)
160
+ throw 'unexpected EOF';
161
+ break;
162
+ }
163
+ // ensure size
164
+ if (noBuf)
165
+ cbuf(bt + l);
166
+ // Copy over uncompressed data
167
+ buf.set(dat.subarray(s, t), bt);
168
+ // Get new bitpos, update byte count
169
+ st.b = bt += l, st.p = pos = t << 3;
170
+ continue;
171
+ }
172
+ else if (type == 1)
173
+ lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
174
+ else if (type == 2) {
175
+ // literal lengths
176
+ const hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
177
+ const tl = hLit + bits(dat, pos + 5, 31) + 1;
178
+ pos += 14;
179
+ // length+distance tree
180
+ const ldt = new u8(tl);
181
+ // code length tree
182
+ const clt = new u8(19);
183
+ for (let i = 0; i < hcLen; ++i) {
184
+ // use index map to get real code
185
+ clt[clim[i]] = bits(dat, pos + i * 3, 7);
186
+ }
187
+ pos += hcLen * 3;
188
+ // code lengths bits
189
+ const clb = max(clt), clbmsk = (1 << clb) - 1;
190
+ if (!noSt && pos + tl * (clb + 7) > tbts)
191
+ break;
192
+ // code lengths map
193
+ const clm = hMap(clt, clb, 1);
194
+ for (let i = 0; i < tl;) {
195
+ const r = clm[bits(dat, pos, clbmsk)];
196
+ // bits read
197
+ pos += r & 15;
198
+ // symbol
199
+ const s = r >>> 4;
200
+ // code length to copy
201
+ if (s < 16) {
202
+ ldt[i++] = s;
203
+ }
204
+ else {
205
+ // copy count
206
+ let c = 0, n = 0;
207
+ if (s == 16)
208
+ n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
209
+ else if (s == 17)
210
+ n = 3 + bits(dat, pos, 7), pos += 3;
211
+ else if (s == 18)
212
+ n = 11 + bits(dat, pos, 127), pos += 7;
213
+ while (n--)
214
+ ldt[i++] = c;
215
+ }
216
+ }
217
+ // length tree distance tree
218
+ const lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
219
+ // max length bits
220
+ lbt = max(lt);
221
+ // max dist bits
222
+ dbt = max(dt);
223
+ lm = hMap(lt, lbt, 1);
224
+ dm = hMap(dt, dbt, 1);
225
+ }
226
+ else
227
+ throw 'invalid block type';
228
+ if (pos > tbts)
229
+ throw 'unexpected EOF';
230
+ }
231
+ // Make sure the buffer can hold this + the largest possible addition
232
+ // maximum chunk size (practically, theoretically infinite) is 2^17;
233
+ if (noBuf)
234
+ cbuf(bt + 131072);
235
+ const lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
236
+ const mxa = lbt + dbt + 18;
237
+ while (noSt || pos + mxa < tbts) {
238
+ // bits read, code
239
+ const c = lm[bits16(dat, pos) & lms], sym = c >>> 4;
240
+ pos += c & 15;
241
+ if (pos > tbts)
242
+ throw 'unexpected EOF';
243
+ if (!c)
244
+ throw 'invalid length/literal';
245
+ if (sym < 256)
246
+ buf[bt++] = sym;
247
+ else if (sym == 256) {
248
+ lm = undefined;
249
+ break;
250
+ }
251
+ else {
252
+ let add = sym - 254;
253
+ // no extra bits needed if less
254
+ if (sym > 264) {
255
+ // index
256
+ const i = sym - 257, b = fleb[i];
257
+ add = bits(dat, pos, (1 << b) - 1) + fl[i];
258
+ pos += b;
259
+ }
260
+ // dist
261
+ const d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;
262
+ if (!d)
263
+ throw 'invalid distance';
264
+ pos += d & 15;
265
+ let dt = fd[dsym];
266
+ if (dsym > 3) {
267
+ const b = fdeb[dsym];
268
+ dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;
269
+ }
270
+ if (pos > tbts)
271
+ throw 'unexpected EOF';
272
+ if (noBuf)
273
+ cbuf(bt + 131072);
274
+ const end = bt + add;
275
+ for (; bt < end; bt += 4) {
276
+ buf[bt] = buf[bt - dt];
277
+ buf[bt + 1] = buf[bt + 1 - dt];
278
+ buf[bt + 2] = buf[bt + 2 - dt];
279
+ buf[bt + 3] = buf[bt + 3 - dt];
280
+ }
281
+ bt = end;
282
+ }
283
+ }
284
+ st.l = lm, st.p = pos, st.b = bt;
285
+ if (lm)
286
+ final = 1, st.m = lbt, st.d = dm, st.n = dbt;
287
+ } while (!final);
288
+ return bt == buf.length ? buf : slc(buf, 0, bt);
289
+ };
290
+ const zlv = (d) => {
291
+ if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))
292
+ throw 'invalid zlib data';
293
+ if (d[1] & 32)
294
+ throw 'invalid zlib data: preset dictionaries not supported';
295
+ };
296
+ /**
297
+ * Expands Zlib data
298
+ * @param data The data to decompress
299
+ * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
300
+ * @returns The decompressed version of the data
301
+ */
302
+ export function unzlibSync(data, out) {
303
+ return inflt((zlv(data), data.subarray(2, -4)), out);
304
+ }
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import './packageDetect.js';
2
+ export * from './bundle.js';
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ import './packageDetect.js';
2
+ export * from './bundle.js';
package/package.json CHANGED
@@ -15,17 +15,122 @@
15
15
  },
16
16
  "sideEffects": [
17
17
  "./packageDetect.js",
18
- "./packageDetect.cjs"
18
+ "./cjs/packageDetect.js"
19
19
  ],
20
20
  "type": "module",
21
- "version": "7.5.9",
22
- "main": "index.js",
21
+ "version": "7.5.10",
22
+ "main": "./cjs/index.js",
23
+ "module": "./index.js",
24
+ "types": "./index.d.ts",
25
+ "exports": {
26
+ "./cjs/package.json": "./cjs/package.json",
27
+ "./cjs/*": "./cjs/*.js",
28
+ ".": {
29
+ "module": {
30
+ "types": "./index.d.ts",
31
+ "default": "./index.js"
32
+ },
33
+ "require": {
34
+ "types": "./cjs/index.d.ts",
35
+ "default": "./cjs/index.js"
36
+ },
37
+ "default": {
38
+ "types": "./index.d.ts",
39
+ "default": "./index.js"
40
+ }
41
+ },
42
+ "./base64": {
43
+ "module": {
44
+ "types": "./base64.d.ts",
45
+ "default": "./base64.js"
46
+ },
47
+ "require": {
48
+ "types": "./cjs/base64.d.ts",
49
+ "default": "./cjs/base64.js"
50
+ },
51
+ "default": {
52
+ "types": "./base64.d.ts",
53
+ "default": "./base64.js"
54
+ }
55
+ },
56
+ "./bundle": {
57
+ "module": {
58
+ "types": "./bundle.d.ts",
59
+ "default": "./bundle.js"
60
+ },
61
+ "require": {
62
+ "types": "./cjs/bundle.d.ts",
63
+ "default": "./cjs/bundle.js"
64
+ },
65
+ "default": {
66
+ "types": "./bundle.d.ts",
67
+ "default": "./bundle.js"
68
+ }
69
+ },
70
+ "./fflate": {
71
+ "module": {
72
+ "types": "./fflate.d.ts",
73
+ "default": "./fflate.js"
74
+ },
75
+ "require": {
76
+ "types": "./cjs/fflate.d.ts",
77
+ "default": "./cjs/fflate.js"
78
+ },
79
+ "default": {
80
+ "types": "./fflate.d.ts",
81
+ "default": "./fflate.js"
82
+ }
83
+ },
84
+ "./package.json": {
85
+ "require": "./cjs/package.json",
86
+ "default": "./package.json"
87
+ },
88
+ "./packageDetect": {
89
+ "module": {
90
+ "types": "./packageDetect.d.ts",
91
+ "default": "./packageDetect.js"
92
+ },
93
+ "require": {
94
+ "types": "./cjs/packageDetect.d.ts",
95
+ "default": "./cjs/packageDetect.js"
96
+ },
97
+ "default": {
98
+ "types": "./packageDetect.d.ts",
99
+ "default": "./packageDetect.js"
100
+ }
101
+ },
102
+ "./packageInfo.js": {
103
+ "module": {
104
+ "types": "./packageInfo.d.ts",
105
+ "default": "./packageInfo.js"
106
+ },
107
+ "require": {
108
+ "types": "./cjs/packageInfo.d.ts",
109
+ "default": "./cjs/packageInfo.js"
110
+ },
111
+ "default": {
112
+ "types": "./packageInfo.d.ts",
113
+ "default": "./packageInfo.js"
114
+ }
115
+ },
116
+ "./packageInfo": {
117
+ "module": {
118
+ "types": "./packageInfo.d.ts",
119
+ "default": "./packageInfo.js"
120
+ },
121
+ "require": {
122
+ "types": "./cjs/packageInfo.d.ts",
123
+ "default": "./cjs/packageInfo.js"
124
+ },
125
+ "default": {
126
+ "types": "./packageInfo.d.ts",
127
+ "default": "./packageInfo.js"
128
+ }
129
+ }
130
+ },
23
131
  "dependencies": {
24
132
  "tslib": "^2.7.0"
25
133
  },
26
- "devDependencies": {
27
- "@pezkuwi/util": "^14.0.1"
28
- },
29
134
  "peerDependencies": {
30
135
  "@pezkuwi/util": "*"
31
136
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { detectPackage } from '@pezkuwi/util';
2
+ import { packageInfo } from './packageInfo.js';
3
+ detectPackage(packageInfo, null, []);
@@ -0,0 +1,6 @@
1
+ export declare const packageInfo: {
2
+ name: string;
3
+ path: string;
4
+ type: string;
5
+ version: string;
6
+ };
package/packageInfo.js ADDED
@@ -0,0 +1 @@
1
+ export const packageInfo = { name: '@pezkuwi/wasm-util', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '7.5.10' };
@@ -1,46 +0,0 @@
1
- // Copyright 2019-2026 @pezkuwi/wasm-util authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- /// <reference types="@pezkuwi/dev-test/globals.d.ts" />
5
-
6
- import { base64Decode } from './base64.js';
7
-
8
- const TESTS = [
9
- {
10
- // hello world Приветствую ми 你好
11
- base64: 'aGVsbG8gd29ybGQg0J/RgNC40LLQtdGC0YHRgtCy0YPRjiDQvNC4IOS9oOWlvQ==',
12
- output: new Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 32, 208, 159, 209, 128, 208, 184, 208, 178, 208, 181, 209, 130, 209, 129, 209, 130, 208, 178, 209, 131, 209, 142, 32, 208, 188, 208, 184, 32, 228, 189, 160, 229, 165, 189])
13
- },
14
- {
15
- // ✓ à la mode
16
- base64: '4pyTIMOgIGxhIG1vZGU=',
17
- output: new Uint8Array([226, 156, 147, 32, 195, 160, 32, 108, 97, 32, 109, 111, 100, 101])
18
- },
19
- {
20
- // Hello World!
21
- base64: 'SGVsbG8gV29ybGQh',
22
- output: new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])
23
- },
24
- {
25
- base64: 'AA==',
26
- output: new Uint8Array([0])
27
- },
28
- {
29
- base64: 'AAA=',
30
- output: new Uint8Array([0, 0])
31
- },
32
- {
33
- base64: 'AAAA',
34
- output: new Uint8Array([0, 0, 0])
35
- }
36
- ];
37
-
38
- describe('base64Decode', (): void => {
39
- for (const { base64, output } of TESTS) {
40
- it(`decodes ${base64}`, (): void => {
41
- expect(
42
- base64Decode(base64, new Uint8Array(output.length))
43
- ).toEqual(output);
44
- });
45
- }
46
- });
package/src/base64.ts DELETED
@@ -1,43 +0,0 @@
1
- // Copyright 2019-2026 @pezkuwi/wasm-util authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- // Use an array for our indexer - this is faster than using map access. In
5
- // this case we assume ASCII-only inputs, so we cannot overflow the array
6
- const CHR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' as const;
7
- const map = new Array<number>(256);
8
-
9
- // We use charCodeAt for access here and in the decoder loop - this is faster
10
- // on lookups (array + numbers) and also faster than accessing the specific
11
- // character via data[i]
12
- for (let i = 0, count = CHR.length; i < count; i++) {
13
- map[CHR.charCodeAt(i)] = i;
14
- }
15
-
16
- /**
17
- * @name base64Decode
18
- * @description
19
- * A base64 decoding function that operates in all environments. Unlike decoding
20
- * from Buffer (Node.js only) or atob (browser-only) this implementation is
21
- * slightly slower, but it is platform independent.
22
- *
23
- * For our usage, since we have access to the static final size, so we decode
24
- * to a specified output buffer. This also means we have applied a number of
25
- * optimizations based on this - checking output position instead of chars.
26
- */
27
- export function base64Decode (data: string, out: Uint8Array): Uint8Array {
28
- let byte = 0;
29
- let bits = 0;
30
- let pos = -1;
31
-
32
- for (let i = 0, last = out.length - 1; pos !== last; i++) {
33
- // each character represents 6 bits
34
- byte = (byte << 6) | map[data.charCodeAt(i)];
35
-
36
- // each byte needs to contain 8 bits
37
- if ((bits += 6) >= 8) {
38
- out[++pos] = (byte >>> (bits -= 8)) & 0xff;
39
- }
40
- }
41
-
42
- return out;
43
- }