@lls/offline 24.28.0-5c90d7d6 → 24.28.0-8cddca6e

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.
@@ -17,10 +17,10 @@ var parseRange = (range, size) => {
17
17
  };
18
18
 
19
19
  // src/utils/worker.ts
20
- var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
20
+ var makeSyncWorker = (offlineWorker2, methodNames, dbg) => {
21
21
  const dic = {};
22
22
  const cbks = {};
23
- const fn = ({ source, data: { eventId, methodName, results, error, arg } = {} }) => {
23
+ const fn = ({ data: { eventId, methodName, results, error, arg } = {} } = {}) => {
24
24
  if (eventId && eventId in dic) {
25
25
  if (error) {
26
26
  dic[eventId].reject(error);
@@ -28,11 +28,11 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
28
28
  dic[eventId].resolve(results);
29
29
  }
30
30
  } else {
31
- if (methodName && !(methodName in cbks)) {
31
+ if (methodName && !methodName.startsWith("async") && !(methodName in cbks)) {
32
32
  console.error(`syncWorker: unknown methodName cbk ${dbg}`, eventId, methodName, error);
33
33
  }
34
34
  }
35
- methodName && cbks[methodName]?.({ source, ...arg });
35
+ methodName && cbks[methodName]?.(arg);
36
36
  };
37
37
  const makeFn = (methodName) => {
38
38
  return ({ ports, ...arg } = {}) => {
@@ -40,7 +40,7 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
40
40
  const eventId = `${methodName}:${Date.now()}-${Math.random().toFixed(5)}`;
41
41
  let resolved = false;
42
42
  const timeout = setTimeout(() => {
43
- console.warn("slow request for", methodName, arg, eventId);
43
+ console.warn("slow request for", methodName, arg);
44
44
  }, 3e3);
45
45
  const doResolve = (arg2) => {
46
46
  if (!resolved) {
@@ -50,16 +50,11 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
50
50
  }
51
51
  };
52
52
  dic[eventId] = { resolve: doResolve, reject };
53
- if (ports) {
54
- offlineWorker.postMessage({ eventId, methodName, arg }, ports);
55
- } else {
56
- offlineWorker.postMessage({ eventId, methodName, arg });
57
- }
53
+ offlineWorker2.postMessage({ eventId, methodName, arg }, ports);
58
54
  });
59
55
  };
60
56
  };
61
- const fns = Object.fromEntries(methodNames.map((name) => [name, makeFn(name)]));
62
- const obj = Object.assign(fns, {
57
+ const obj = Object.assign(Object.fromEntries(methodNames.map((name) => [name, makeFn(name)])), {
63
58
  on: (key, fn2) => {
64
59
  cbks[key] = fn2;
65
60
  }
@@ -76,38 +71,26 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
76
71
  };
77
72
  var a = (a2) => a2;
78
73
  var makeSyncHandler = a(
79
- (services) => ({
74
+ (sender, services) => ({
80
75
  canHandle: (methodName) => {
81
76
  return methodName in services;
82
77
  },
83
- handle: async ({ data: { eventId, methodName, arg } = {}, source, ports, target }) => {
84
- const emitter = source?.postMessage && source || target?.postMessage && target || self;
78
+ handle: async ({ data: { eventId, methodName, arg } = {}, ports }) => {
85
79
  try {
86
80
  if (typeof methodName === "string" && methodName in services && services[methodName]) {
87
81
  const results = await services[methodName](arg, { ports });
88
- emitter.postMessage({ eventId, methodName, results });
82
+ sender.postMessage({ eventId, methodName, results });
89
83
  return;
90
84
  }
91
85
  throw new Error(`invalid methodName ${Object.keys(services)} |${String(methodName)}`);
92
86
  } catch (e) {
93
87
  console.debug("failed", e);
94
- emitter.postMessage({ eventId, methodName, error: e });
88
+ sender.postMessage({ eventId, methodName, error: e });
95
89
  }
96
90
  }
97
91
  })
98
92
  );
99
93
  var jsonToBuf = (json) => new TextEncoder().encode(JSON.stringify(json));
100
- var combineHandlers = (...handlers) => {
101
- return (message) => {
102
- const methodName = String("methodName" in message.data ? message.data.methodName : "");
103
- for (const h of handlers) {
104
- if (h.canHandle(methodName)) {
105
- return h.handle(message);
106
- }
107
- }
108
- console.error("no handlers matched", methodName);
109
- };
110
- };
111
94
  var openCache = async (mode) => caches.open(`LLS_OFFLINE_${mode}`);
112
95
  var isStoryZip = (name) => /story-.*?\.zip/.test(name);
113
96
  var isValidZipName = (name) => {
@@ -356,7 +339,7 @@ var fetchAsset = async (ev, { entryId, mimeType, offlineWorkerSync: offlineWorke
356
339
  try {
357
340
  const [buf, maybeRangeHeaders] = await offlineWorkerSync2.readZipEntry(entryId).then((buf2) => {
358
341
  const range = ev.request.headers.get("Range");
359
- if (!hasStreamingExtension(ev.request.url)) {
342
+ if (!ev.request.url.endsWith(".mp4") && !ev.request.url.endsWith(".webm")) {
360
343
  return [buf2, {}];
361
344
  }
362
345
  if (!range) {
@@ -437,7 +420,6 @@ var ACCEPTED_EXTENSIONS = {
437
420
  ".riv": "application/octet-stream",
438
421
  ".pdf": "application/pdf"
439
422
  };
440
- var hasStreamingExtension = (str) => /\.(mp3|mp4|webm|m4a)$/.test(str);
441
423
  var putInCache = async (request, response) => {
442
424
  const cache = await openCache(CONF_ENV);
443
425
  await cache.put(request, response);
@@ -521,20 +503,23 @@ swSelf.addEventListener("install", (_event) => {
521
503
  swSelf.addEventListener("activate", (event) => {
522
504
  event.waitUntil(swSelf.clients.claim());
523
505
  });
524
- var setKnownLinks2 = (arg) => setKnownLinks(knownLinks, arg);
506
+ var offlineWorker;
525
507
  var offlineWorkerSync;
526
508
  var initChannel = async (__, { ports }) => {
527
509
  console.info(`FETCH WORKER innitChannel v${/* @__PURE__ */ new Date()}`);
528
- const offlineWorker = ports[0];
529
- const { handler: syncHandler, ...sender } = makeSyncWorker(
510
+ offlineWorker = ports[0];
511
+ const { handler, ...sender } = makeSyncWorker(
530
512
  offlineWorker,
531
- ["readZipEntry", "loadBook", "slugToFileMeta", "loadPageContent", "searchBooks", "ensureAppReady"],
513
+ ["readZipEntry", "loadBook", "slugToFileMeta", "loadPageContent", "searchBooks"],
532
514
  "fetchworker"
533
515
  );
534
- const onHandler = makeSyncHandler({ setKnownLinks: setKnownLinks2 });
535
516
  offlineWorkerSync = sender;
536
- offlineWorker.onmessage = combineHandlers(syncHandler, onHandler);
537
- await offlineWorkerSync.ensureAppReady();
517
+ offlineWorker.onmessage = handler.handle;
518
+ offlineWorkerSync.on("setKnownLinks", ({ entryNames, bookId, eventId }) => {
519
+ setKnownLinks(knownLinks, { entryNames, bookId });
520
+ offlineWorker.postMessage({ methodName: "setKnownLinks:back", eventId });
521
+ });
522
+ offlineWorker.postMessage({ methodName: "sendAppReady" });
538
523
  };
539
524
  var knownLinks = /* @__PURE__ */ new Map();
540
525
  var configure = ({
@@ -551,4 +536,28 @@ var configure = ({
551
536
  }
552
537
  console.info("sw::configure", { STORAGE, CONF_ENV });
553
538
  };
554
- swSelf.onmessage = combineHandlers(makeSyncHandler({ initChannel, configure }));
539
+ swSelf.onmessage = async ({
540
+ data: { methodName, arg } = {},
541
+ ports
542
+ }) => {
543
+ const services = {
544
+ initChannel,
545
+ configure
546
+ };
547
+ try {
548
+ if (methodName === "configure") {
549
+ await services[methodName](arg);
550
+ return;
551
+ }
552
+ if (methodName === "initChannel") {
553
+ if (!ports.length) {
554
+ throw new Error("fetchworker::missing port!");
555
+ }
556
+ await services[methodName](arg, { ports });
557
+ return;
558
+ }
559
+ throw new Error(`fetchworker:invalid methodName ${Object.keys(services)} ${methodName}`);
560
+ } catch (e) {
561
+ console.error("failed", methodName, arg, e);
562
+ }
563
+ };
@@ -13,7 +13,7 @@ var tryCatch = (fn) => {
13
13
  var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
14
14
  const dic = {};
15
15
  const cbks = {};
16
- const fn = ({ source, data: { eventId, methodName, results, error, arg } = {} }) => {
16
+ const fn = ({ data: { eventId, methodName, results, error, arg } = {} } = {}) => {
17
17
  if (eventId && eventId in dic) {
18
18
  if (error) {
19
19
  dic[eventId].reject(error);
@@ -21,11 +21,11 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
21
21
  dic[eventId].resolve(results);
22
22
  }
23
23
  } else {
24
- if (methodName && !(methodName in cbks)) {
24
+ if (methodName && !methodName.startsWith("async") && !(methodName in cbks)) {
25
25
  console.error(`syncWorker: unknown methodName cbk ${dbg}`, eventId, methodName, error);
26
26
  }
27
27
  }
28
- methodName && cbks[methodName]?.({ source, ...arg });
28
+ methodName && cbks[methodName]?.(arg);
29
29
  };
30
30
  const makeFn = (methodName) => {
31
31
  return ({ ports, ...arg } = {}) => {
@@ -33,7 +33,7 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
33
33
  const eventId = `${methodName}:${Date.now()}-${Math.random().toFixed(5)}`;
34
34
  let resolved = false;
35
35
  const timeout = setTimeout(() => {
36
- console.warn("slow request for", methodName, arg, eventId);
36
+ console.warn("slow request for", methodName, arg);
37
37
  }, 3e3);
38
38
  const doResolve = (arg2) => {
39
39
  if (!resolved) {
@@ -43,16 +43,11 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
43
43
  }
44
44
  };
45
45
  dic[eventId] = { resolve: doResolve, reject };
46
- if (ports) {
47
- offlineWorker.postMessage({ eventId, methodName, arg }, ports);
48
- } else {
49
- offlineWorker.postMessage({ eventId, methodName, arg });
50
- }
46
+ offlineWorker.postMessage({ eventId, methodName, arg }, ports);
51
47
  });
52
48
  };
53
49
  };
54
- const fns = Object.fromEntries(methodNames.map((name) => [name, makeFn(name)]));
55
- const obj = Object.assign(fns, {
50
+ const obj = Object.assign(Object.fromEntries(methodNames.map((name) => [name, makeFn(name)])), {
56
51
  on: (key2, fn2) => {
57
52
  cbks[key2] = fn2;
58
53
  }
@@ -69,33 +64,31 @@ var makeSyncWorker = (offlineWorker, methodNames, dbg) => {
69
64
  };
70
65
  var a = (a2) => a2;
71
66
  var makeSyncHandler = a(
72
- (services) => ({
67
+ (sender2, services) => ({
73
68
  canHandle: (methodName) => {
74
69
  return methodName in services;
75
70
  },
76
- handle: async ({ data: { eventId, methodName, arg } = {}, source, ports, target }) => {
77
- const emitter = source?.postMessage && source || target?.postMessage && target || self;
71
+ handle: async ({ data: { eventId, methodName, arg } = {}, ports }) => {
78
72
  try {
79
73
  if (typeof methodName === "string" && methodName in services && services[methodName]) {
80
74
  const results = await services[methodName](arg, { ports });
81
- emitter.postMessage({ eventId, methodName, results });
75
+ sender2.postMessage({ eventId, methodName, results });
82
76
  return;
83
77
  }
84
78
  throw new Error(`invalid methodName ${Object.keys(services)} |${String(methodName)}`);
85
79
  } catch (e) {
86
80
  console.debug("failed", e);
87
- emitter.postMessage({ eventId, methodName, error: e });
81
+ sender2.postMessage({ eventId, methodName, error: e });
88
82
  }
89
83
  }
90
84
  })
91
85
  );
92
86
  var bufToJson = (buf) => JSON.parse(new TextDecoder("UTF-8").decode(new Uint8Array(buf)));
93
87
  var combineHandlers = (...handlers) => {
94
- return (message) => {
95
- const methodName = String("methodName" in message.data ? message.data.methodName : "");
88
+ return ({ data: { methodName, ...data } = {}, ports }) => {
96
89
  for (const h of handlers) {
97
- if (h.canHandle(methodName)) {
98
- return h.handle(message);
90
+ if (h.canHandle(String(methodName))) {
91
+ return h.handle({ data: { methodName, ...data }, ports });
99
92
  }
100
93
  }
101
94
  console.error("no handlers matched", methodName);
@@ -448,7 +441,12 @@ var loadBook2 = async ({ id: bookId, forceRefresh }) => {
448
441
  console.time("loadzip");
449
442
  const entryNames = await loadZip(new Uint8Array(buf), bookId);
450
443
  console.timeEnd("loadzip");
451
- await fetchWorkerSync.setKnownLinks({ entryNames, bookId });
444
+ const eventId = `setKnownLinks:${Date.now()}-${Math.random().toFixed(5)}`;
445
+ const responseForEventId = new Promise((resolve, reject) => {
446
+ dicFetchWorkerCallback[eventId] = { resolve, reject };
447
+ });
448
+ fetchWorker.postMessage({ methodName: "setKnownLinks", arg: { entryNames, bookId, eventId } });
449
+ await responseForEventId;
452
450
  if (isOldZip(bookId)) {
453
451
  const json = await readZipEntry({
454
452
  entryName: `preload/${bookId}.json`,
@@ -491,27 +489,43 @@ var loadPageContent2 = async ({
491
489
  });
492
490
  return await loadPageContent({ chapterId, json });
493
491
  };
494
- var ensureAppReady = () => {
495
- };
496
492
  var fetchWorker;
497
- var fetchWorkerSync;
493
+ var dicFetchWorkerCallback = {};
494
+ var handleFetchWorkerCallback = ({ data: { eventId } }) => {
495
+ if (dicFetchWorkerCallback[eventId]) {
496
+ dicFetchWorkerCallback[eventId].resolve();
497
+ } else {
498
+ console.debug("unknown eventId", eventId);
499
+ }
500
+ };
498
501
  var initChannel = (__, { ports }) => {
499
502
  fetchWorker = ports[0];
500
- const onHandler = makeSyncHandler({
503
+ const { canHandle, handle } = makeSyncHandler(fetchWorker, {
501
504
  readZipEntry,
502
505
  loadBook: loadBook2,
503
506
  slugToFileMeta: slugToFileMeta2,
504
507
  loadPageContent: loadPageContent2,
505
- searchBooks,
506
- ensureAppReady
508
+ searchBooks
507
509
  });
508
- const { handler: syncHandler, ...sender2 } = makeSyncWorker(
509
- fetchWorker,
510
- ["setKnownLinks"],
511
- "offline-worker"
512
- );
513
- fetchWorkerSync = sender2;
514
- fetchWorker.onmessage = combineHandlers(syncHandler, onHandler);
510
+ const fn = (dataObj) => {
511
+ if (dataObj.data?.methodName === "sendAppReady") {
512
+ self.postMessage({ methodName: "ready" });
513
+ return;
514
+ }
515
+ if (dataObj.data?.methodName === "setKnownLinks:back") {
516
+ if (typeof dataObj?.data?.eventId !== "string") {
517
+ console.debug("missing eventId to get response back for setKnownLinks:back");
518
+ return;
519
+ }
520
+ handleFetchWorkerCallback(dataObj);
521
+ return;
522
+ }
523
+ if (canHandle(dataObj.data?.methodName || "")) {
524
+ return handle(dataObj);
525
+ }
526
+ console.error("unknown methodName", dataObj.data?.methodName);
527
+ };
528
+ fetchWorker.onmessage = fn;
515
529
  };
516
530
  var loadBooks = async ({ primaryOnly = false } = {}) => {
517
531
  let entries = [];
@@ -583,7 +597,7 @@ var reset = async () => {
583
597
  await (await navigator.storage.getDirectory()).remove({ recursive: true });
584
598
  console.info("opfs cleared");
585
599
  };
586
- var mainHandle = makeSyncHandler({
600
+ var mainHandle = makeSyncHandler(self, {
587
601
  initChannel,
588
602
  loadPreload: loadPreload2,
589
603
  readZipEntry,
package/lib/index.js CHANGED
@@ -13,7 +13,7 @@ var tryCatch = (fn) => {
13
13
  var makeSyncWorker = (offlineWorker2, methodNames, dbg) => {
14
14
  const dic = {};
15
15
  const cbks = {};
16
- const fn = ({ source, data: { eventId, methodName, results, error, arg } = {} }) => {
16
+ const fn = ({ data: { eventId, methodName, results, error, arg } = {} } = {}) => {
17
17
  if (eventId && eventId in dic) {
18
18
  if (error) {
19
19
  dic[eventId].reject(error);
@@ -21,11 +21,11 @@ var makeSyncWorker = (offlineWorker2, methodNames, dbg) => {
21
21
  dic[eventId].resolve(results);
22
22
  }
23
23
  } else {
24
- if (methodName && !(methodName in cbks)) {
24
+ if (methodName && !methodName.startsWith("async") && !(methodName in cbks)) {
25
25
  console.error(`syncWorker: unknown methodName cbk ${dbg}`, eventId, methodName, error);
26
26
  }
27
27
  }
28
- methodName && cbks[methodName]?.({ source, ...arg });
28
+ methodName && cbks[methodName]?.(arg);
29
29
  };
30
30
  const makeFn = (methodName) => {
31
31
  return ({ ports, ...arg } = {}) => {
@@ -33,7 +33,7 @@ var makeSyncWorker = (offlineWorker2, methodNames, dbg) => {
33
33
  const eventId = `${methodName}:${Date.now()}-${Math.random().toFixed(5)}`;
34
34
  let resolved = false;
35
35
  const timeout = setTimeout(() => {
36
- console.warn("slow request for", methodName, arg, eventId);
36
+ console.warn("slow request for", methodName, arg);
37
37
  }, 3e3);
38
38
  const doResolve = (arg2) => {
39
39
  if (!resolved) {
@@ -43,16 +43,11 @@ var makeSyncWorker = (offlineWorker2, methodNames, dbg) => {
43
43
  }
44
44
  };
45
45
  dic[eventId] = { resolve: doResolve, reject };
46
- if (ports) {
47
- offlineWorker2.postMessage({ eventId, methodName, arg }, ports);
48
- } else {
49
- offlineWorker2.postMessage({ eventId, methodName, arg });
50
- }
46
+ offlineWorker2.postMessage({ eventId, methodName, arg }, ports);
51
47
  });
52
48
  };
53
49
  };
54
- const fns = Object.fromEntries(methodNames.map((name) => [name, makeFn(name)]));
55
- const obj = Object.assign(fns, {
50
+ const obj = Object.assign(Object.fromEntries(methodNames.map((name) => [name, makeFn(name)])), {
56
51
  on: (key, fn2) => {
57
52
  cbks[key] = fn2;
58
53
  }
@@ -69,32 +64,30 @@ var makeSyncWorker = (offlineWorker2, methodNames, dbg) => {
69
64
  };
70
65
  var a = (a2) => a2;
71
66
  var makeSyncHandler = a(
72
- (services) => ({
67
+ (sender, services) => ({
73
68
  canHandle: (methodName) => {
74
69
  return methodName in services;
75
70
  },
76
- handle: async ({ data: { eventId, methodName, arg } = {}, source, ports, target }) => {
77
- const emitter = source?.postMessage && source || target?.postMessage && target || self;
71
+ handle: async ({ data: { eventId, methodName, arg } = {}, ports }) => {
78
72
  try {
79
73
  if (typeof methodName === "string" && methodName in services && services[methodName]) {
80
74
  const results = await services[methodName](arg, { ports });
81
- emitter.postMessage({ eventId, methodName, results });
75
+ sender.postMessage({ eventId, methodName, results });
82
76
  return;
83
77
  }
84
78
  throw new Error(`invalid methodName ${Object.keys(services)} |${String(methodName)}`);
85
79
  } catch (e) {
86
80
  console.debug("failed", e);
87
- emitter.postMessage({ eventId, methodName, error: e });
81
+ sender.postMessage({ eventId, methodName, error: e });
88
82
  }
89
83
  }
90
84
  })
91
85
  );
92
86
  var combineHandlers = (...handlers) => {
93
- return (message) => {
94
- const methodName = String("methodName" in message.data ? message.data.methodName : "");
87
+ return ({ data: { methodName, ...data } = {}, ports }) => {
95
88
  for (const h of handlers) {
96
- if (h.canHandle(methodName)) {
97
- return h.handle(message);
89
+ if (h.canHandle(String(methodName))) {
90
+ return h.handle({ data: { methodName, ...data }, ports });
98
91
  }
99
92
  }
100
93
  console.error("no handlers matched", methodName);
@@ -131,6 +124,14 @@ var fetchWorkerPromise = new Promise(
131
124
  return fetchWorker;
132
125
  })
133
126
  );
127
+ var setWorkersReady;
128
+ var workersReadyPromise = new Promise((resolve) => {
129
+ setWorkersReady = resolve;
130
+ });
131
+ var setBooksLoaded;
132
+ var setBooksLoadedPromise = new Promise((resolve) => {
133
+ setBooksLoaded = resolve;
134
+ });
134
135
  var installWorker = async ({
135
136
  skipLoadBooks = false,
136
137
  primaryOnly = false,
@@ -145,7 +146,7 @@ var installWorker = async ({
145
146
  const fetchWorker = await fetchWorkerPromise;
146
147
  const configureOptions = { storage, zipBaseUrl, checkUpdates, confEnv };
147
148
  if (nativeReadFile) {
148
- const wwHandler = makeSyncHandler({ nativeReadFile, nativeWriteFile, nativeListZips });
149
+ const wwHandler = makeSyncHandler(offlineWorker, { nativeReadFile, nativeWriteFile, nativeListZips });
149
150
  offlineWorker.onmessage = combineHandlers(handler, wwHandler);
150
151
  if (storage !== "native") {
151
152
  console.warn("nativeReadFile given, ignoring storage", storage);
@@ -153,17 +154,13 @@ var installWorker = async ({
153
154
  offlineWorkerSync.configure({ ...configureOptions, storage: "native" });
154
155
  } else {
155
156
  offlineWorker.onmessage = handler.handle;
156
- await offlineWorkerSync.configure(configureOptions);
157
+ offlineWorkerSync.configure(configureOptions);
157
158
  }
159
+ offlineWorkerSync.on("ready", setWorkersReady);
158
160
  const channel = new MessageChannel();
159
- await offlineWorkerSync.initChannel({ ports: [channel.port1] });
160
- const { handler: fetchWorkerHandler, ...fetchWorkerSync } = makeSyncWorker(fetchWorker, [
161
- "initChannel",
162
- "configure"
163
- ]);
164
- navigator.serviceWorker.onmessage = combineHandlers(fetchWorkerHandler);
165
- await fetchWorkerSync.initChannel({ ports: [channel.port2] });
166
- await fetchWorkerSync.configure({ storage, confEnv });
161
+ offlineWorkerSync.initChannel({ ports: [channel.port1] });
162
+ fetchWorker.postMessage({ methodName: "initChannel" }, [channel.port2]);
163
+ fetchWorker.postMessage({ methodName: "configure", arg: { storage, confEnv } });
167
164
  offlineWorkerSync.on("opfsProgress", () => {
168
165
  });
169
166
  if (!primaryOnly) {
@@ -172,6 +169,7 @@ var installWorker = async ({
172
169
  if (!skipLoadBooks) {
173
170
  await offlineWorkerSync.loadBooks({ primaryOnly });
174
171
  }
172
+ setBooksLoaded();
175
173
  };
176
174
  var useOfflineWorker_default = ({
177
175
  skipLoadBooks,
@@ -198,6 +196,7 @@ var useOfflineWorker_default = ({
198
196
  checkUpdates,
199
197
  confEnv
200
198
  });
199
+ await Promise.all([workersReadyPromise, setBooksLoadedPromise]);
201
200
  fetch(window.location.href.replace(window.location.search, ""));
202
201
  setReady(true);
203
202
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lls/offline",
3
- "version": "24.28.0-5c90d7d6",
3
+ "version": "24.28.0-8cddca6e",
4
4
  "description": "offline",
5
5
  "main": "./lib/index.js",
6
6
  "module": "./lib/index.js",
@@ -53,7 +53,7 @@
53
53
  "vite": "7.0.7",
54
54
  "vite-tsconfig-paths": "5.1.4",
55
55
  "zod": "3.25.50",
56
- "@lls/vitescripts": "24.28.0-5c90d7d6"
56
+ "@lls/vitescripts": "24.28.0-8cddca6e"
57
57
  },
58
58
  "dependencies": {
59
59
  "redux-persist": "6.0.0"