@lls/offline 24.22.0-bdccc0f6 → 24.22.0-bfdb7edf
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/lib/assets/fetch-worker.js +9 -14
- package/lib/assets/offline-worker.js +15 -40
- package/lib/index.js +0 -3
- package/package.json +2 -2
|
@@ -291,9 +291,7 @@ var ACCEPTED_EXTENSIONS = {
|
|
|
291
291
|
".gif": "image/gif",
|
|
292
292
|
".webm": "video/webm",
|
|
293
293
|
".m4a": "audio/mp4",
|
|
294
|
-
".webp": "image/webp"
|
|
295
|
-
".riv": "application/octet-stream",
|
|
296
|
-
".pdf": "application/pdf"
|
|
294
|
+
".webp": "image/webp"
|
|
297
295
|
};
|
|
298
296
|
var putInCache = async (request, response) => {
|
|
299
297
|
const cache = await openCache(CONF_ENV);
|
|
@@ -310,20 +308,17 @@ var onlineFirst = async (request, event) => {
|
|
|
310
308
|
event.waitUntil(cached);
|
|
311
309
|
}
|
|
312
310
|
return responseFromNetwork;
|
|
313
|
-
} catch (
|
|
311
|
+
} catch (_e) {
|
|
314
312
|
const over = /\/\?story=basic/.test(request.url) ? request.url.replace(/\/\?story=.*$/, "") : request;
|
|
315
313
|
const responseFromCache = await caches.match(over);
|
|
316
314
|
if (!responseFromCache) {
|
|
317
|
-
return new Response(
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
url: event.request.url
|
|
325
|
-
}
|
|
326
|
-
);
|
|
315
|
+
return new Response("FAILED fetch", {
|
|
316
|
+
// @ts-ignore: poor ts typing
|
|
317
|
+
ok: false,
|
|
318
|
+
status: 500,
|
|
319
|
+
type: "cors",
|
|
320
|
+
url: event.request.url
|
|
321
|
+
});
|
|
327
322
|
}
|
|
328
323
|
return responseFromCache;
|
|
329
324
|
}
|
|
@@ -84,16 +84,6 @@ var combineHandlers = (...handlers) => {
|
|
|
84
84
|
};
|
|
85
85
|
};
|
|
86
86
|
var openCache = async (mode) => caches.open(`LLS_OFFLINE_${mode}`);
|
|
87
|
-
var concatArrayBuffers = (buffers) => {
|
|
88
|
-
const totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);
|
|
89
|
-
const concatenated = new Uint8Array(totalLength);
|
|
90
|
-
let offset = 0;
|
|
91
|
-
for (const buffer of buffers) {
|
|
92
|
-
concatenated.set(new Uint8Array(buffer), offset);
|
|
93
|
-
offset += buffer.byteLength;
|
|
94
|
-
}
|
|
95
|
-
return concatenated.buffer;
|
|
96
|
-
};
|
|
97
87
|
|
|
98
88
|
// src/worker/wwApi.ts
|
|
99
89
|
var STATE = {
|
|
@@ -775,9 +765,6 @@ async function decryptData(encryptedData, key2, iv2) {
|
|
|
775
765
|
return decryptedData;
|
|
776
766
|
}
|
|
777
767
|
var BOOKS = {};
|
|
778
|
-
var zipNameInMedias = (zipName) => {
|
|
779
|
-
return /^(pages|book)/.test(zipName);
|
|
780
|
-
};
|
|
781
768
|
var readZipEntry = async ({
|
|
782
769
|
bookId,
|
|
783
770
|
entryName,
|
|
@@ -787,20 +774,9 @@ var readZipEntry = async ({
|
|
|
787
774
|
console.trace("no bookId", bookId, "found");
|
|
788
775
|
return null;
|
|
789
776
|
}
|
|
790
|
-
const
|
|
791
|
-
let overridenName = entryName;
|
|
792
|
-
if (manifest && !entryName.includes("gqls/")) {
|
|
793
|
-
const zipName = entryName.replace("medias/", "");
|
|
794
|
-
if (zipNameInMedias(zipName)) {
|
|
795
|
-
const originalName = manifest.medias[zipName];
|
|
796
|
-
overridenName = `medias/${originalName}`;
|
|
797
|
-
} else {
|
|
798
|
-
console.error("any media should exist in manifest", zipName, entryName, bookId);
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
const bookEntry = BOOKS[bookId].map.get(overridenName);
|
|
777
|
+
const bookEntry = BOOKS[bookId].get(entryName);
|
|
802
778
|
if (!bookEntry) {
|
|
803
|
-
console.info("no bookEntry", entryName, "found"
|
|
779
|
+
console.info("no bookEntry", entryName, "found");
|
|
804
780
|
return null;
|
|
805
781
|
}
|
|
806
782
|
if (!bookEntry.decoded) {
|
|
@@ -811,6 +787,16 @@ var readZipEntry = async ({
|
|
|
811
787
|
var hasZip = (bookId) => {
|
|
812
788
|
return !!BOOKS[bookId];
|
|
813
789
|
};
|
|
790
|
+
function concatArrayBuffers(buffers) {
|
|
791
|
+
const totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);
|
|
792
|
+
const concatenated = new Uint8Array(totalLength);
|
|
793
|
+
let offset = 0;
|
|
794
|
+
for (const buffer of buffers) {
|
|
795
|
+
concatenated.set(new Uint8Array(buffer), offset);
|
|
796
|
+
offset += buffer.byteLength;
|
|
797
|
+
}
|
|
798
|
+
return concatenated.buffer;
|
|
799
|
+
}
|
|
814
800
|
var loadZip = async (buf, bookId) => {
|
|
815
801
|
const m = /* @__PURE__ */ new Map();
|
|
816
802
|
const unzipper = new Unzip();
|
|
@@ -850,19 +836,8 @@ var loadZip = async (buf, bookId) => {
|
|
|
850
836
|
await sleep;
|
|
851
837
|
}
|
|
852
838
|
unzipper.push(buf.slice((nChunks - 1) * chunkSize, buf.byteLength), true);
|
|
853
|
-
BOOKS[bookId] =
|
|
854
|
-
|
|
855
|
-
manifest: null
|
|
856
|
-
};
|
|
857
|
-
const manifestEntry = m.get("manifest.json");
|
|
858
|
-
const keys = [...m.keys()];
|
|
859
|
-
if (manifestEntry) {
|
|
860
|
-
manifestEntry.decoded = await decryptData(await manifestEntry.zipEntry.getData(), key, iv);
|
|
861
|
-
BOOKS[bookId].manifest = bufToJson(manifestEntry.decoded);
|
|
862
|
-
const { medias } = BOOKS[bookId].manifest;
|
|
863
|
-
keys.push(...Object.keys(medias).map((entryName) => `medias/${entryName}`));
|
|
864
|
-
}
|
|
865
|
-
return keys;
|
|
839
|
+
BOOKS[bookId] = m;
|
|
840
|
+
return [...m.keys()];
|
|
866
841
|
};
|
|
867
842
|
|
|
868
843
|
// src/worker/offline-worker.ts
|
|
@@ -1053,7 +1028,7 @@ var loadBooks = async ({ primaryOnly = false } = {}) => {
|
|
|
1053
1028
|
const cache = await openCache(CONF_ENV);
|
|
1054
1029
|
const keys = await cache.keys();
|
|
1055
1030
|
const zips = keys.filter((key2) => {
|
|
1056
|
-
return key2.url.match(/lecture-cp\.zip
|
|
1031
|
+
return key2.url.match(/lecture-cp\.zip/);
|
|
1057
1032
|
});
|
|
1058
1033
|
entries = zips.map((zip) => ({ name: String(zip.url.split("/").pop()) }));
|
|
1059
1034
|
}
|
package/lib/index.js
CHANGED
|
@@ -94,9 +94,6 @@ var { handler, ...offlineWorkerSync } = makeSyncWorker(
|
|
|
94
94
|
var fetchWorkerPromise = new Promise(
|
|
95
95
|
tryCatch(async () => {
|
|
96
96
|
let fetchWorker = null;
|
|
97
|
-
await navigator.serviceWorker.getRegistrations().then((registrations) => {
|
|
98
|
-
return Promise.all(registrations.map((reg) => reg.unregister()));
|
|
99
|
-
});
|
|
100
97
|
await navigator.serviceWorker.register("/fetch-worker.js", { type: "module" }).then((reg) => {
|
|
101
98
|
return reg.update().catch((e) => {
|
|
102
99
|
console.debug(e, "likely we are offline");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lls/offline",
|
|
3
|
-
"version": "24.22.0-
|
|
3
|
+
"version": "24.22.0-bfdb7edf",
|
|
4
4
|
"description": "offline",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"module": "./lib/index.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"vite": "7.0.0",
|
|
53
53
|
"vite-tsconfig-paths": "5.1.4",
|
|
54
54
|
"zod": "3.25.50",
|
|
55
|
-
"@lls/vitescripts": "24.22.0-
|
|
55
|
+
"@lls/vitescripts": "24.22.0-bfdb7edf"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"fflate": "0.8.2"
|