@pezkuwi/wasm-util 7.5.13 → 7.5.15

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