@lls/offline 24.20.0-debug

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,885 @@
1
+ // src/utils/worker.ts
2
+ var a = (a2) => a2;
3
+ var makeSyncHandler = a(
4
+ (sender, services) => async ({ data: { eventId, methodName, arg } = {}, ports }) => {
5
+ try {
6
+ if (typeof methodName === "string" && methodName in services && services[methodName]) {
7
+ const results = await services[methodName](arg, { ports });
8
+ sender.postMessage({ eventId, methodName, results });
9
+ return;
10
+ }
11
+ throw new Error(`invalid methodName ${String(methodName)}`);
12
+ } catch (e) {
13
+ console.debug("failed", e);
14
+ sender.postMessage({ eventId, methodName, error: e });
15
+ }
16
+ }
17
+ );
18
+ var bufToJson = (buf) => JSON.parse(new TextDecoder("UTF-8").decode(new Uint8Array(buf)));
19
+
20
+ // src/worker/wwApi.ts
21
+ var STATE = {
22
+ books: {},
23
+ chapters: {}
24
+ };
25
+ var loadBook = (json) => {
26
+ json.viewer.books.hits.forEach((book) => {
27
+ STATE.books[book.id] = {
28
+ ...book,
29
+ chapters: book.chapters.map((c) => {
30
+ STATE.chapters[c.id] = c;
31
+ return c.id;
32
+ })
33
+ };
34
+ });
35
+ };
36
+ var slugToFileMeta = async ({ slug, json }) => {
37
+ console.debug("come here", slug, json);
38
+ const id = slug.split("/")[1];
39
+ const [pageId, chapterId] = json[id].split(";").map((val) => Number.parseInt(val, 10));
40
+ return { pageId, chapterId };
41
+ };
42
+ var loadPageContent = async ({ chapterId, json }) => {
43
+ json.viewer.pages.hits[0].chapter = STATE.chapters[chapterId] || json.viewer.pages.hits[0].chapter;
44
+ return json;
45
+ };
46
+ var searchBooks = async ({
47
+ uris,
48
+ slugs,
49
+ ids,
50
+ chapterIds
51
+ }) => {
52
+ const matchFn = (k, values) => {
53
+ if (typeof values === "undefined") return void 0;
54
+ return (b) => values.includes(b[k]);
55
+ };
56
+ const matchMul = (k, values) => {
57
+ if (typeof values === "undefined") return void 0;
58
+ return (b) => Array.isArray(b[k]) ? b[k].some((val) => values.includes(val)) : false;
59
+ };
60
+ const makeMatcher = (arr) => {
61
+ const fns = arr.filter((fn) => !!fn);
62
+ return (b) => fns.some((fn) => fn(b));
63
+ };
64
+ const matcher = makeMatcher([
65
+ matchFn("uri", uris),
66
+ matchFn("slug", slugs),
67
+ matchFn("id", ids),
68
+ matchMul("chapters", chapterIds)
69
+ ]);
70
+ const books = Object.values(STATE.books).filter(matcher);
71
+ console.debug("found", books, "for", { uris, slugs, ids, chapterIds });
72
+ return books;
73
+ };
74
+ var loadPreload = (json) => {
75
+ json.viewer.books.hits.forEach((book) => {
76
+ STATE.books[book.id] = {
77
+ ...book,
78
+ chapters: book.chapters.map((c) => {
79
+ STATE.chapters[c.id] = Object.assign(STATE.chapters[c.id] || {}, c);
80
+ return c.id;
81
+ })
82
+ };
83
+ });
84
+ };
85
+
86
+ // ../../node_modules/.pnpm/fflate@0.8.2/node_modules/fflate/esm/index.mjs
87
+ import { createRequire } from "module";
88
+ var require2 = createRequire("/");
89
+ var Worker;
90
+ try {
91
+ Worker = require2("worker_threads").Worker;
92
+ } catch (e) {
93
+ }
94
+ var u8 = Uint8Array;
95
+ var u16 = Uint16Array;
96
+ var i32 = Int32Array;
97
+ var fleb = new u8([
98
+ 0,
99
+ 0,
100
+ 0,
101
+ 0,
102
+ 0,
103
+ 0,
104
+ 0,
105
+ 0,
106
+ 1,
107
+ 1,
108
+ 1,
109
+ 1,
110
+ 2,
111
+ 2,
112
+ 2,
113
+ 2,
114
+ 3,
115
+ 3,
116
+ 3,
117
+ 3,
118
+ 4,
119
+ 4,
120
+ 4,
121
+ 4,
122
+ 5,
123
+ 5,
124
+ 5,
125
+ 5,
126
+ 0,
127
+ /* unused */
128
+ 0,
129
+ 0,
130
+ /* impossible */
131
+ 0
132
+ ]);
133
+ var fdeb = new u8([
134
+ 0,
135
+ 0,
136
+ 0,
137
+ 0,
138
+ 1,
139
+ 1,
140
+ 2,
141
+ 2,
142
+ 3,
143
+ 3,
144
+ 4,
145
+ 4,
146
+ 5,
147
+ 5,
148
+ 6,
149
+ 6,
150
+ 7,
151
+ 7,
152
+ 8,
153
+ 8,
154
+ 9,
155
+ 9,
156
+ 10,
157
+ 10,
158
+ 11,
159
+ 11,
160
+ 12,
161
+ 12,
162
+ 13,
163
+ 13,
164
+ /* unused */
165
+ 0,
166
+ 0
167
+ ]);
168
+ var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
169
+ var freb = function(eb, start) {
170
+ var b = new u16(31);
171
+ for (var i = 0; i < 31; ++i) {
172
+ b[i] = start += 1 << eb[i - 1];
173
+ }
174
+ var r = new i32(b[30]);
175
+ for (var i = 1; i < 30; ++i) {
176
+ for (var j = b[i]; j < b[i + 1]; ++j) {
177
+ r[j] = j - b[i] << 5 | i;
178
+ }
179
+ }
180
+ return { b, r };
181
+ };
182
+ var _a = freb(fleb, 2);
183
+ var fl = _a.b;
184
+ var revfl = _a.r;
185
+ fl[28] = 258, revfl[258] = 28;
186
+ var _b = freb(fdeb, 0);
187
+ var fd = _b.b;
188
+ var revfd = _b.r;
189
+ var rev = new u16(32768);
190
+ for (i = 0; i < 32768; ++i) {
191
+ x = (i & 43690) >> 1 | (i & 21845) << 1;
192
+ x = (x & 52428) >> 2 | (x & 13107) << 2;
193
+ x = (x & 61680) >> 4 | (x & 3855) << 4;
194
+ rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
195
+ }
196
+ var x;
197
+ var i;
198
+ var hMap = function(cd, mb, r) {
199
+ var s = cd.length;
200
+ var i = 0;
201
+ var l = new u16(mb);
202
+ for (; i < s; ++i) {
203
+ if (cd[i])
204
+ ++l[cd[i] - 1];
205
+ }
206
+ var le = new u16(mb);
207
+ for (i = 1; i < mb; ++i) {
208
+ le[i] = le[i - 1] + l[i - 1] << 1;
209
+ }
210
+ var co;
211
+ if (r) {
212
+ co = new u16(1 << mb);
213
+ var rvb = 15 - mb;
214
+ for (i = 0; i < s; ++i) {
215
+ if (cd[i]) {
216
+ var sv = i << 4 | cd[i];
217
+ var r_1 = mb - cd[i];
218
+ var v = le[cd[i] - 1]++ << r_1;
219
+ for (var m = v | (1 << r_1) - 1; v <= m; ++v) {
220
+ co[rev[v] >> rvb] = sv;
221
+ }
222
+ }
223
+ }
224
+ } else {
225
+ co = new u16(s);
226
+ for (i = 0; i < s; ++i) {
227
+ if (cd[i]) {
228
+ co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i];
229
+ }
230
+ }
231
+ }
232
+ return co;
233
+ };
234
+ var flt = new u8(288);
235
+ for (i = 0; i < 144; ++i)
236
+ flt[i] = 8;
237
+ var i;
238
+ for (i = 144; i < 256; ++i)
239
+ flt[i] = 9;
240
+ var i;
241
+ for (i = 256; i < 280; ++i)
242
+ flt[i] = 7;
243
+ var i;
244
+ for (i = 280; i < 288; ++i)
245
+ flt[i] = 8;
246
+ var i;
247
+ var fdt = new u8(32);
248
+ for (i = 0; i < 32; ++i)
249
+ fdt[i] = 5;
250
+ var i;
251
+ var flrm = /* @__PURE__ */ hMap(flt, 9, 1);
252
+ var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
253
+ var max = function(a2) {
254
+ var m = a2[0];
255
+ for (var i = 1; i < a2.length; ++i) {
256
+ if (a2[i] > m)
257
+ m = a2[i];
258
+ }
259
+ return m;
260
+ };
261
+ var bits = function(d, p, m) {
262
+ var o = p / 8 | 0;
263
+ return (d[o] | d[o + 1] << 8) >> (p & 7) & m;
264
+ };
265
+ var bits16 = function(d, p) {
266
+ var o = p / 8 | 0;
267
+ return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
268
+ };
269
+ var shft = function(p) {
270
+ return (p + 7) / 8 | 0;
271
+ };
272
+ var slc = function(v, s, e) {
273
+ if (s == null || s < 0)
274
+ s = 0;
275
+ if (e == null || e > v.length)
276
+ e = v.length;
277
+ return new u8(v.subarray(s, e));
278
+ };
279
+ var ec = [
280
+ "unexpected EOF",
281
+ "invalid block type",
282
+ "invalid length/literal",
283
+ "invalid distance",
284
+ "stream finished",
285
+ "no stream handler",
286
+ ,
287
+ "no callback",
288
+ "invalid UTF-8 data",
289
+ "extra field too long",
290
+ "date not in range 1980-2099",
291
+ "filename too long",
292
+ "stream finishing",
293
+ "invalid zip data"
294
+ // determined by unknown compression method
295
+ ];
296
+ var err = function(ind, msg, nt) {
297
+ var e = new Error(msg || ec[ind]);
298
+ e.code = ind;
299
+ if (Error.captureStackTrace)
300
+ Error.captureStackTrace(e, err);
301
+ if (!nt)
302
+ throw e;
303
+ return e;
304
+ };
305
+ var inflt = function(dat, st, buf, dict) {
306
+ var sl = dat.length, dl = dict ? dict.length : 0;
307
+ if (!sl || st.f && !st.l)
308
+ return buf || new u8(0);
309
+ var noBuf = !buf;
310
+ var resize = noBuf || st.i != 2;
311
+ var noSt = st.i;
312
+ if (noBuf)
313
+ buf = new u8(sl * 3);
314
+ var cbuf = function(l2) {
315
+ var bl = buf.length;
316
+ if (l2 > bl) {
317
+ var nbuf = new u8(Math.max(bl * 2, l2));
318
+ nbuf.set(buf);
319
+ buf = nbuf;
320
+ }
321
+ };
322
+ var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
323
+ var tbts = sl * 8;
324
+ do {
325
+ if (!lm) {
326
+ final = bits(dat, pos, 1);
327
+ var type = bits(dat, pos + 1, 3);
328
+ pos += 3;
329
+ if (!type) {
330
+ var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;
331
+ if (t > sl) {
332
+ if (noSt)
333
+ err(0);
334
+ break;
335
+ }
336
+ if (resize)
337
+ cbuf(bt + l);
338
+ buf.set(dat.subarray(s, t), bt);
339
+ st.b = bt += l, st.p = pos = t * 8, st.f = final;
340
+ continue;
341
+ } else if (type == 1)
342
+ lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
343
+ else if (type == 2) {
344
+ var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
345
+ var tl = hLit + bits(dat, pos + 5, 31) + 1;
346
+ pos += 14;
347
+ var ldt = new u8(tl);
348
+ var clt = new u8(19);
349
+ for (var i = 0; i < hcLen; ++i) {
350
+ clt[clim[i]] = bits(dat, pos + i * 3, 7);
351
+ }
352
+ pos += hcLen * 3;
353
+ var clb = max(clt), clbmsk = (1 << clb) - 1;
354
+ var clm = hMap(clt, clb, 1);
355
+ for (var i = 0; i < tl; ) {
356
+ var r = clm[bits(dat, pos, clbmsk)];
357
+ pos += r & 15;
358
+ var s = r >> 4;
359
+ if (s < 16) {
360
+ ldt[i++] = s;
361
+ } else {
362
+ var c = 0, n = 0;
363
+ if (s == 16)
364
+ n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
365
+ else if (s == 17)
366
+ n = 3 + bits(dat, pos, 7), pos += 3;
367
+ else if (s == 18)
368
+ n = 11 + bits(dat, pos, 127), pos += 7;
369
+ while (n--)
370
+ ldt[i++] = c;
371
+ }
372
+ }
373
+ var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
374
+ lbt = max(lt);
375
+ dbt = max(dt);
376
+ lm = hMap(lt, lbt, 1);
377
+ dm = hMap(dt, dbt, 1);
378
+ } else
379
+ err(1);
380
+ if (pos > tbts) {
381
+ if (noSt)
382
+ err(0);
383
+ break;
384
+ }
385
+ }
386
+ if (resize)
387
+ cbuf(bt + 131072);
388
+ var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
389
+ var lpos = pos;
390
+ for (; ; lpos = pos) {
391
+ var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
392
+ pos += c & 15;
393
+ if (pos > tbts) {
394
+ if (noSt)
395
+ err(0);
396
+ break;
397
+ }
398
+ if (!c)
399
+ err(2);
400
+ if (sym < 256)
401
+ buf[bt++] = sym;
402
+ else if (sym == 256) {
403
+ lpos = pos, lm = null;
404
+ break;
405
+ } else {
406
+ var add = sym - 254;
407
+ if (sym > 264) {
408
+ var i = sym - 257, b = fleb[i];
409
+ add = bits(dat, pos, (1 << b) - 1) + fl[i];
410
+ pos += b;
411
+ }
412
+ var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
413
+ if (!d)
414
+ err(3);
415
+ pos += d & 15;
416
+ var dt = fd[dsym];
417
+ if (dsym > 3) {
418
+ var b = fdeb[dsym];
419
+ dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
420
+ }
421
+ if (pos > tbts) {
422
+ if (noSt)
423
+ err(0);
424
+ break;
425
+ }
426
+ if (resize)
427
+ cbuf(bt + 131072);
428
+ var end = bt + add;
429
+ if (bt < dt) {
430
+ var shift = dl - dt, dend = Math.min(dt, end);
431
+ if (shift + bt < 0)
432
+ err(3);
433
+ for (; bt < dend; ++bt)
434
+ buf[bt] = dict[shift + bt];
435
+ }
436
+ for (; bt < end; ++bt)
437
+ buf[bt] = buf[bt - dt];
438
+ }
439
+ }
440
+ st.l = lm, st.p = lpos, st.b = bt, st.f = final;
441
+ if (lm)
442
+ final = 1, st.m = lbt, st.d = dm, st.n = dbt;
443
+ } while (!final);
444
+ return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
445
+ };
446
+ var et = /* @__PURE__ */ new u8(0);
447
+ var b2 = function(d, b) {
448
+ return d[b] | d[b + 1] << 8;
449
+ };
450
+ var b4 = function(d, b) {
451
+ return (d[b] | d[b + 1] << 8 | d[b + 2] << 16 | d[b + 3] << 24) >>> 0;
452
+ };
453
+ var b8 = function(d, b) {
454
+ return b4(d, b) + b4(d, b + 4) * 4294967296;
455
+ };
456
+ var Inflate = /* @__PURE__ */ function() {
457
+ function Inflate2(opts, cb) {
458
+ if (typeof opts == "function")
459
+ cb = opts, opts = {};
460
+ this.ondata = cb;
461
+ var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);
462
+ this.s = { i: 0, b: dict ? dict.length : 0 };
463
+ this.o = new u8(32768);
464
+ this.p = new u8(0);
465
+ if (dict)
466
+ this.o.set(dict);
467
+ }
468
+ Inflate2.prototype.e = function(c) {
469
+ if (!this.ondata)
470
+ err(5);
471
+ if (this.d)
472
+ err(4);
473
+ if (!this.p.length)
474
+ this.p = c;
475
+ else if (c.length) {
476
+ var n = new u8(this.p.length + c.length);
477
+ n.set(this.p), n.set(c, this.p.length), this.p = n;
478
+ }
479
+ };
480
+ Inflate2.prototype.c = function(final) {
481
+ this.s.i = +(this.d = final || false);
482
+ var bts = this.s.b;
483
+ var dt = inflt(this.p, this.s, this.o);
484
+ this.ondata(slc(dt, bts, this.s.b), this.d);
485
+ this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;
486
+ this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7;
487
+ };
488
+ Inflate2.prototype.push = function(chunk, final) {
489
+ this.e(chunk), this.c(final);
490
+ };
491
+ return Inflate2;
492
+ }();
493
+ var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
494
+ var tds = 0;
495
+ try {
496
+ td.decode(et, { stream: true });
497
+ tds = 1;
498
+ } catch (e) {
499
+ }
500
+ var dutf8 = function(d) {
501
+ for (var r = "", i = 0; ; ) {
502
+ var c = d[i++];
503
+ var eb = (c > 127) + (c > 223) + (c > 239);
504
+ if (i + eb > d.length)
505
+ return { s: r, r: slc(d, i - 1) };
506
+ if (!eb)
507
+ r += String.fromCharCode(c);
508
+ else if (eb == 3) {
509
+ c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | d[i++] & 63) - 65536, r += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);
510
+ } else if (eb & 1)
511
+ r += String.fromCharCode((c & 31) << 6 | d[i++] & 63);
512
+ else
513
+ r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | d[i++] & 63);
514
+ }
515
+ };
516
+ function strFromU8(dat, latin1) {
517
+ if (latin1) {
518
+ var r = "";
519
+ for (var i = 0; i < dat.length; i += 16384)
520
+ r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
521
+ return r;
522
+ } else if (td) {
523
+ return td.decode(dat);
524
+ } else {
525
+ var _a2 = dutf8(dat), s = _a2.s, r = _a2.r;
526
+ if (r.length)
527
+ err(8);
528
+ return s;
529
+ }
530
+ }
531
+ var z64e = function(d, b) {
532
+ for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
533
+ ;
534
+ return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
535
+ };
536
+ var UnzipPassThrough = /* @__PURE__ */ function() {
537
+ function UnzipPassThrough2() {
538
+ }
539
+ UnzipPassThrough2.prototype.push = function(data, final) {
540
+ this.ondata(null, data, final);
541
+ };
542
+ UnzipPassThrough2.compression = 0;
543
+ return UnzipPassThrough2;
544
+ }();
545
+ var UnzipInflate = /* @__PURE__ */ function() {
546
+ function UnzipInflate2() {
547
+ var _this = this;
548
+ this.i = new Inflate(function(dat, final) {
549
+ _this.ondata(null, dat, final);
550
+ });
551
+ }
552
+ UnzipInflate2.prototype.push = function(data, final) {
553
+ try {
554
+ this.i.push(data, final);
555
+ } catch (e) {
556
+ this.ondata(e, null, final);
557
+ }
558
+ };
559
+ UnzipInflate2.compression = 8;
560
+ return UnzipInflate2;
561
+ }();
562
+ var Unzip = /* @__PURE__ */ function() {
563
+ function Unzip2(cb) {
564
+ this.onfile = cb;
565
+ this.k = [];
566
+ this.o = {
567
+ 0: UnzipPassThrough
568
+ };
569
+ this.p = et;
570
+ }
571
+ Unzip2.prototype.push = function(chunk, final) {
572
+ var _this = this;
573
+ if (!this.onfile)
574
+ err(5);
575
+ if (!this.p)
576
+ err(4);
577
+ if (this.c > 0) {
578
+ var len = Math.min(this.c, chunk.length);
579
+ var toAdd = chunk.subarray(0, len);
580
+ this.c -= len;
581
+ if (this.d)
582
+ this.d.push(toAdd, !this.c);
583
+ else
584
+ this.k[0].push(toAdd);
585
+ chunk = chunk.subarray(len);
586
+ if (chunk.length)
587
+ return this.push(chunk, final);
588
+ } else {
589
+ var f = 0, i = 0, is = void 0, buf = void 0;
590
+ if (!this.p.length)
591
+ buf = chunk;
592
+ else if (!chunk.length)
593
+ buf = this.p;
594
+ else {
595
+ buf = new u8(this.p.length + chunk.length);
596
+ buf.set(this.p), buf.set(chunk, this.p.length);
597
+ }
598
+ var l = buf.length, oc = this.c, add = oc && this.d;
599
+ var _loop_2 = function() {
600
+ var _a2;
601
+ var sig = b4(buf, i);
602
+ if (sig == 67324752) {
603
+ f = 1, is = i;
604
+ this_1.d = null;
605
+ this_1.c = 0;
606
+ var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);
607
+ if (l > i + 30 + fnl + es) {
608
+ var chks_3 = [];
609
+ this_1.k.unshift(chks_3);
610
+ f = 2;
611
+ var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);
612
+ var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);
613
+ if (sc_1 == 4294967295) {
614
+ _a2 = dd ? [-2] : z64e(buf, i), sc_1 = _a2[0], su_1 = _a2[1];
615
+ } else if (dd)
616
+ sc_1 = -1;
617
+ i += es;
618
+ this_1.c = sc_1;
619
+ var d_1;
620
+ var file_1 = {
621
+ name: fn_1,
622
+ compression: cmp_1,
623
+ start: function() {
624
+ if (!file_1.ondata)
625
+ err(5);
626
+ if (!sc_1)
627
+ file_1.ondata(null, et, true);
628
+ else {
629
+ var ctr = _this.o[cmp_1];
630
+ if (!ctr)
631
+ file_1.ondata(err(14, "unknown compression type " + cmp_1, 1), null, false);
632
+ d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);
633
+ d_1.ondata = function(err2, dat3, final2) {
634
+ file_1.ondata(err2, dat3, final2);
635
+ };
636
+ for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {
637
+ var dat2 = chks_4[_i];
638
+ d_1.push(dat2, false);
639
+ }
640
+ if (_this.k[0] == chks_3 && _this.c)
641
+ _this.d = d_1;
642
+ else
643
+ d_1.push(et, true);
644
+ }
645
+ },
646
+ terminate: function() {
647
+ if (d_1 && d_1.terminate)
648
+ d_1.terminate();
649
+ }
650
+ };
651
+ if (sc_1 >= 0)
652
+ file_1.size = sc_1, file_1.originalSize = su_1;
653
+ this_1.onfile(file_1);
654
+ }
655
+ return "break";
656
+ } else if (oc) {
657
+ if (sig == 134695760) {
658
+ is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;
659
+ return "break";
660
+ } else if (sig == 33639248) {
661
+ is = i -= 4, f = 3, this_1.c = 0;
662
+ return "break";
663
+ }
664
+ }
665
+ };
666
+ var this_1 = this;
667
+ for (; i < l - 4; ++i) {
668
+ var state_1 = _loop_2();
669
+ if (state_1 === "break")
670
+ break;
671
+ }
672
+ this.p = et;
673
+ if (oc < 0) {
674
+ var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 134695760 && 4)) : buf.subarray(0, i);
675
+ if (add)
676
+ add.push(dat, !!f);
677
+ else
678
+ this.k[+(f == 2)].push(dat);
679
+ }
680
+ if (f & 2)
681
+ return this.push(buf.subarray(i), final);
682
+ this.p = buf.subarray(i);
683
+ }
684
+ if (final) {
685
+ if (this.c)
686
+ err(13);
687
+ this.p = null;
688
+ }
689
+ };
690
+ Unzip2.prototype.register = function(decoder) {
691
+ this.o[decoder.compression] = decoder;
692
+ };
693
+ return Unzip2;
694
+ }();
695
+
696
+ // src/worker/wwZip.ts
697
+ var key = new Uint8Array([..."4c6520636f6e74656e7520646573206c".matchAll(/../g)].map(([c]) => Number(`0x${c}`)));
698
+ var iv = new Uint8Array(16).fill(0);
699
+ async function decryptData(encryptedData, key2, iv2) {
700
+ const cryptoKey = await crypto.subtle.importKey("raw", key2.buffer, { name: "AES-CBC" }, false, ["decrypt"]);
701
+ const decryptedData = await crypto.subtle.decrypt({ name: "AES-CBC", iv: iv2.buffer }, cryptoKey, encryptedData);
702
+ return decryptedData;
703
+ }
704
+ var BOOKS = {};
705
+ var readZipEntry = async ({
706
+ bookId,
707
+ entryName,
708
+ asJson
709
+ }) => {
710
+ if (!hasZip(bookId)) {
711
+ console.trace("no bookId", bookId, "found");
712
+ return null;
713
+ }
714
+ const bookEntry = BOOKS[bookId].get(entryName);
715
+ if (!bookEntry) {
716
+ console.info("no bookEntry", entryName, "found");
717
+ return null;
718
+ }
719
+ if (!bookEntry.decoded) {
720
+ bookEntry.decoded = await decryptData(await bookEntry.zipEntry.getData(), key, iv);
721
+ }
722
+ return asJson ? bufToJson(bookEntry.decoded) : bookEntry.decoded;
723
+ };
724
+ var hasZip = (bookId) => {
725
+ return !!BOOKS[bookId];
726
+ };
727
+ function concatArrayBuffers(buffers) {
728
+ const totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);
729
+ const concatenated = new Uint8Array(totalLength);
730
+ let offset = 0;
731
+ for (const buffer of buffers) {
732
+ concatenated.set(new Uint8Array(buffer), offset);
733
+ offset += buffer.byteLength;
734
+ }
735
+ return concatenated.buffer;
736
+ }
737
+ var loadZip = async (buf, bookId) => {
738
+ const m = /* @__PURE__ */ new Map();
739
+ const unzipper = new Unzip();
740
+ unzipper.register(UnzipInflate);
741
+ unzipper.onfile = (file) => {
742
+ m.set(file.name, {
743
+ decoded: null,
744
+ zipEntry: {
745
+ getData: () => {
746
+ return new Promise((resolve) => {
747
+ const buffers = [];
748
+ file.ondata = (err2, data, final) => {
749
+ if (err2) {
750
+ console.error("err?????", err2);
751
+ }
752
+ if (data.byteLength) {
753
+ buffers.push(data);
754
+ }
755
+ if (final) {
756
+ return resolve(concatArrayBuffers(buffers));
757
+ }
758
+ };
759
+ file.start();
760
+ });
761
+ }
762
+ }
763
+ });
764
+ };
765
+ unzipper.push(buf);
766
+ BOOKS[bookId] = m;
767
+ return [...m.keys()];
768
+ };
769
+
770
+ // src/worker/offlineWorker.ts
771
+ var CHECK_UPDATES = false;
772
+ var fetchZipFile = async (zipUrl) => {
773
+ const opfsRoot = await navigator.storage.getDirectory();
774
+ const fileName = zipUrl.split("/").slice(-1)[0];
775
+ const readArrayBuffer = async () => {
776
+ const handle = await opfsRoot.getFileHandle(fileName);
777
+ const accessHandle = await handle.createSyncAccessHandle();
778
+ const size = accessHandle.getSize();
779
+ const arrayBuffer = new ArrayBuffer(size);
780
+ accessHandle.read(arrayBuffer);
781
+ await accessHandle.close();
782
+ return arrayBuffer;
783
+ };
784
+ try {
785
+ const buf = await readArrayBuffer();
786
+ if (CHECK_UPDATES) {
787
+ const response = await fetch(zipUrl, { method: "HEAD" });
788
+ const remoteSize = Number.parseInt(response.headers.get("content-length") || "0", 10);
789
+ if (remoteSize !== buf.byteLength) {
790
+ const error = `new ${fileName} available, refetching (opfs:${buf.byteLength} vs remote:${remoteSize})`;
791
+ console.debug(error);
792
+ self.postMessage({ error });
793
+ throw new Error(`new ${fileName} available, refetching`);
794
+ }
795
+ }
796
+ return buf;
797
+ } catch (e) {
798
+ console.debug("opfs db not found, creating it", e, zipUrl);
799
+ const arrayBuffer = await fetch(zipUrl).then((res) => res.arrayBuffer());
800
+ if (arrayBuffer.byteLength < 1e4) {
801
+ const error = `likely ${zipUrl} was not fetched`;
802
+ console.debug(error);
803
+ throw new Error(error);
804
+ }
805
+ const handle = await opfsRoot.getFileHandle(fileName, { create: true });
806
+ const accessHandle = await handle.createSyncAccessHandle();
807
+ await accessHandle.truncate(0);
808
+ await accessHandle.write(arrayBuffer);
809
+ await accessHandle.close();
810
+ return await readArrayBuffer();
811
+ }
812
+ };
813
+ var slugToFileMeta2 = async ({ slug }) => {
814
+ console.debug("hereshit");
815
+ const json = await readZipEntry({ bookId: "preload", entryName: "preload/hashmap_slugToMetaPage.json", asJson: true });
816
+ console.debug("hereshit2");
817
+ return slugToFileMeta({ slug, json });
818
+ };
819
+ var PRELOAD_AS_BOOK_ID = "preload";
820
+ var loadBook2 = async (bookId) => {
821
+ const buf = await fetchZipFile(`https://ci.lls.fr/artefacts/content/production/${bookId}.zip`);
822
+ try {
823
+ const entryNames = await loadZip(new Uint8Array(buf), bookId);
824
+ fetchWorker.postMessage({ methodName: "setKnownLinks", arg: { entryNames, bookId } });
825
+ const json = await readZipEntry({ entryName: `preload/${bookId}.json`, bookId: PRELOAD_AS_BOOK_ID, asJson: true });
826
+ loadBook(json);
827
+ } catch (e) {
828
+ console.error("failed", e);
829
+ }
830
+ };
831
+ var loadPageContent2 = async ({
832
+ bookId,
833
+ chapterId,
834
+ pageId
835
+ }) => {
836
+ const json = await readZipEntry({ entryName: `${chapterId}/${pageId}.json`, bookId, asJson: true });
837
+ return await loadPageContent({ chapterId, json });
838
+ };
839
+ var fetchWorker;
840
+ var initChannel = (__, { ports }) => {
841
+ fetchWorker = ports[0];
842
+ const defaultHandler = makeSyncHandler(fetchWorker, {
843
+ readZipEntry,
844
+ loadBook: loadBook2,
845
+ slugToFileMeta: slugToFileMeta2,
846
+ loadPageContent: loadPageContent2,
847
+ searchBooks
848
+ });
849
+ const fn = (dataObj) => {
850
+ if (dataObj.data?.methodName === "sendAppReady") {
851
+ self.postMessage({ methodName: "ready" });
852
+ return;
853
+ }
854
+ defaultHandler(dataObj);
855
+ };
856
+ fetchWorker.onmessage = fn;
857
+ };
858
+ var loadBooks = async () => {
859
+ const opfsRoot = await navigator.storage.getDirectory();
860
+ const entries = await opfsRoot.values();
861
+ for await (const entry of entries) {
862
+ if (/\d+\.zip$/.test(entry.name)) {
863
+ const bookId = entry.name.match(/\d+/)[0];
864
+ await loadBook2(Number.parseInt(bookId, 10));
865
+ }
866
+ }
867
+ };
868
+ var loadPreload2 = async () => {
869
+ const zipUrl = "https://lls-ci-fr.s3.eu-west-3.amazonaws.com/artefacts/content/development/preload.zip";
870
+ const buf = await fetchZipFile(zipUrl);
871
+ const bookId = PRELOAD_AS_BOOK_ID;
872
+ try {
873
+ await loadZip(new Uint8Array(buf), bookId);
874
+ const json = await readZipEntry({ entryName: "preload/books.json", bookId, asJson: true });
875
+ loadPreload(json);
876
+ } catch (e) {
877
+ console.error("failed", e);
878
+ }
879
+ };
880
+ self.onmessage = makeSyncHandler(self, {
881
+ initChannel,
882
+ loadPreload: loadPreload2,
883
+ readZipEntry,
884
+ loadBooks
885
+ });