@the_library/public 1.0.0

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 (90) hide show
  1. package/README.md +2298 -0
  2. package/assets/branding/data-pond.png +0 -0
  3. package/assets/branding/dsafe-logo.png +0 -0
  4. package/assets/branding/founder-photo.jpg +0 -0
  5. package/assets/branding/icon_transparent.png +0 -0
  6. package/assets/branding/library-favicon.png +0 -0
  7. package/assets/branding/pond-enterprise-logo.jpg +0 -0
  8. package/assets/branding/pond-enterprise-logo.svg +27 -0
  9. package/dist/branding/index.d.ts +48 -0
  10. package/dist/branding/index.js +67 -0
  11. package/dist/branding/index.js.map +1 -0
  12. package/dist/chunk-2HFOWE5R.js +296 -0
  13. package/dist/chunk-2HFOWE5R.js.map +1 -0
  14. package/dist/chunk-3L6LH2XK.js +465 -0
  15. package/dist/chunk-3L6LH2XK.js.map +1 -0
  16. package/dist/chunk-4CWVFPBN.js +28 -0
  17. package/dist/chunk-4CWVFPBN.js.map +1 -0
  18. package/dist/chunk-AGHPATVL.js +65 -0
  19. package/dist/chunk-AGHPATVL.js.map +1 -0
  20. package/dist/chunk-JDUYLUDJ.js +4835 -0
  21. package/dist/chunk-JDUYLUDJ.js.map +1 -0
  22. package/dist/chunk-OEZK7IX7.js +77 -0
  23. package/dist/chunk-OEZK7IX7.js.map +1 -0
  24. package/dist/chunk-PUYDAUCI.js +2873 -0
  25. package/dist/chunk-PUYDAUCI.js.map +1 -0
  26. package/dist/chunk-WHWMTS7D.js +99 -0
  27. package/dist/chunk-WHWMTS7D.js.map +1 -0
  28. package/dist/chunk-Y7RS6RTM.js +342 -0
  29. package/dist/chunk-Y7RS6RTM.js.map +1 -0
  30. package/dist/chunk-ZEZGI2TP.js +197 -0
  31. package/dist/chunk-ZEZGI2TP.js.map +1 -0
  32. package/dist/core-dao-core-logo-VDT2I5IW.svg +33 -0
  33. package/dist/downloader/dl2-sw.js +199 -0
  34. package/dist/downloader/dl2-sw.js.map +1 -0
  35. package/dist/downloader/file-worker-v2.js +258 -0
  36. package/dist/downloader/file-worker-v2.js.map +1 -0
  37. package/dist/downloader/index.d.ts +45 -0
  38. package/dist/downloader/index.js +538 -0
  39. package/dist/downloader/index.js.map +1 -0
  40. package/dist/downloader/mu-worker-v2.js +197 -0
  41. package/dist/downloader/mu-worker-v2.js.map +1 -0
  42. package/dist/downloader/react.d.ts +19 -0
  43. package/dist/downloader/react.js +32 -0
  44. package/dist/downloader/react.js.map +1 -0
  45. package/dist/downloader/solid.d.ts +21 -0
  46. package/dist/downloader/solid.js +19 -0
  47. package/dist/downloader/solid.js.map +1 -0
  48. package/dist/downloader/sw.d.ts +22 -0
  49. package/dist/downloader/sw.js +119 -0
  50. package/dist/downloader/sw.js.map +1 -0
  51. package/dist/downloader/vue.d.ts +23 -0
  52. package/dist/downloader/vue.js +19 -0
  53. package/dist/downloader/vue.js.map +1 -0
  54. package/dist/level-state-J3pj64Tr.d.ts +15 -0
  55. package/dist/models/astro.d.ts +47 -0
  56. package/dist/models/astro.js +44 -0
  57. package/dist/models/astro.js.map +1 -0
  58. package/dist/models/index.d.ts +244 -0
  59. package/dist/models/index.js +340 -0
  60. package/dist/models/index.js.map +1 -0
  61. package/dist/models/models.d.ts +524 -0
  62. package/dist/models/models.js +46 -0
  63. package/dist/models/models.js.map +1 -0
  64. package/dist/models/models_v2.global.js +1 -0
  65. package/dist/models/patch-worker.js +543 -0
  66. package/dist/models/patch-worker.js.map +1 -0
  67. package/dist/models/react.d.ts +43 -0
  68. package/dist/models/react.js +73 -0
  69. package/dist/models/react.js.map +1 -0
  70. package/dist/models/solid.d.ts +73 -0
  71. package/dist/models/solid.js +95 -0
  72. package/dist/models/solid.js.map +1 -0
  73. package/dist/models/vue.d.ts +51 -0
  74. package/dist/models/vue.js +98 -0
  75. package/dist/models/vue.js.map +1 -0
  76. package/dist/orm-BvkX0aBT.d.ts +507 -0
  77. package/dist/session-vqOnyxga.d.ts +184 -0
  78. package/dist/state-BTsp-E4v.d.ts +111 -0
  79. package/dist/types-Dn0EFMO_.d.ts +293 -0
  80. package/dist/types-Xb8Ta9tZ.d.ts +155 -0
  81. package/dist/web3/index.d.ts +820 -0
  82. package/dist/web3/index.js +1020 -0
  83. package/dist/web3/index.js.map +1 -0
  84. package/dist/web3/registry.d.ts +145 -0
  85. package/dist/web3/registry.js +23 -0
  86. package/dist/web3/registry.js.map +1 -0
  87. package/dist/web3/vue.d.ts +174 -0
  88. package/dist/web3/vue.js +391 -0
  89. package/dist/web3/vue.js.map +1 -0
  90. package/package.json +124 -0
@@ -0,0 +1,197 @@
1
+ // src/downloader/keys.ts
2
+ var CACHE_VERSION = 1;
3
+ var CACHES = {
4
+ pdf: `dl2-pdf-v${CACHE_VERSION}`,
5
+ preview: `dl2-preview-v${CACHE_VERSION}`,
6
+ pages: `dl2-pages-v${CACHE_VERSION}`
7
+ };
8
+ var arKey = (txId) => `/ar/${txId}`;
9
+ var pdfKey = arKey;
10
+ var pageKey = (txId, n) => `/pages/${encodeURIComponent(txId)}/${n}`;
11
+
12
+ // src/downloader/cache-store.ts
13
+ var openPdfCache = () => caches.open(CACHES.pdf);
14
+ var openPagesCache = () => caches.open(CACHES.pages);
15
+ var matchPdf = async (txId) => {
16
+ const c = await openPdfCache();
17
+ return c.match(pdfKey(txId));
18
+ };
19
+ var matchPage = async (txId, n) => {
20
+ const c = await openPagesCache();
21
+ return c.match(pageKey(txId, n));
22
+ };
23
+ var putPage = async (txId, n, response) => {
24
+ const c = await openPagesCache();
25
+ await c.put(pageKey(txId, n), response);
26
+ };
27
+
28
+ // src/downloader/meta-db.ts
29
+ var DB_NAME = "dl2_meta";
30
+ var DB_VERSION = 1;
31
+ var _db = null;
32
+ var openMetaDb = () => {
33
+ if (_db) return Promise.resolve(_db);
34
+ return new Promise((resolve, reject) => {
35
+ const req = indexedDB.open(DB_NAME, DB_VERSION);
36
+ req.onupgradeneeded = (e) => {
37
+ const db = e.target.result;
38
+ if (!db.objectStoreNames.contains("book_data")) {
39
+ db.createObjectStore("book_data", { keyPath: "txId" });
40
+ }
41
+ if (!db.objectStoreNames.contains("downloads")) {
42
+ db.createObjectStore("downloads", { keyPath: "txId" });
43
+ }
44
+ if (!db.objectStoreNames.contains("migration_checkpoints")) {
45
+ db.createObjectStore("migration_checkpoints", { keyPath: "cacheName" });
46
+ }
47
+ };
48
+ req.onsuccess = (e) => {
49
+ _db = e.target.result;
50
+ resolve(_db);
51
+ };
52
+ req.onerror = () => reject(req.error);
53
+ });
54
+ };
55
+ var idbGet = (store, key) => openMetaDb().then((db) => new Promise((resolve, reject) => {
56
+ const tx = db.transaction(store, "readonly");
57
+ const req = tx.objectStore(store).get(key);
58
+ req.onsuccess = () => resolve(req.result);
59
+ req.onerror = () => reject(req.error);
60
+ }));
61
+ var idbPut = (store, value) => openMetaDb().then((db) => new Promise((resolve, reject) => {
62
+ const tx = db.transaction(store, "readwrite");
63
+ const req = tx.objectStore(store).put(value);
64
+ req.onsuccess = () => resolve();
65
+ req.onerror = () => reject(req.error);
66
+ }));
67
+ var getBookData = (txId) => idbGet("book_data", txId);
68
+ var storeBookData = (data) => idbPut("book_data", data);
69
+
70
+ // src/downloader/worker/mu-worker.ts
71
+ function post(msg) {
72
+ self.postMessage(msg);
73
+ }
74
+ var mupdf = null;
75
+ async function initMupdf(mupdfUrl) {
76
+ if (mupdf) return;
77
+ const mod = await import(
78
+ /* @vite-ignore */
79
+ mupdfUrl
80
+ );
81
+ mupdf = mod.default ?? mod;
82
+ if (typeof mupdf === "function") {
83
+ mupdf = await mupdf();
84
+ }
85
+ }
86
+ var activeDoc = null;
87
+ var IDLE_TIMEOUT_MS = 8e3;
88
+ var EMPTY_BUFFER = new ArrayBuffer(0);
89
+ function closeActiveDoc() {
90
+ if (activeDoc) {
91
+ clearTimeout(activeDoc.idleTimer);
92
+ activeDoc.doc.destroy();
93
+ activeDoc = null;
94
+ }
95
+ }
96
+ function getOrOpenDoc(txId, pdfBytes) {
97
+ if (activeDoc?.txId === txId) {
98
+ clearTimeout(activeDoc.idleTimer);
99
+ activeDoc.idleTimer = setTimeout(closeActiveDoc, IDLE_TIMEOUT_MS);
100
+ return activeDoc.doc;
101
+ }
102
+ closeActiveDoc();
103
+ const doc = mupdf.Document.openDocument(pdfBytes, "application/pdf");
104
+ activeDoc = {
105
+ txId,
106
+ doc,
107
+ idleTimer: setTimeout(closeActiveDoc, IDLE_TIMEOUT_MS)
108
+ };
109
+ return doc;
110
+ }
111
+ async function handleProcessPages(txId, from, to) {
112
+ try {
113
+ if (_initPromise) {
114
+ await _initPromise;
115
+ }
116
+ if (!mupdf) throw new Error("MuInit not received yet");
117
+ let doc;
118
+ if (activeDoc?.txId === txId) {
119
+ doc = getOrOpenDoc(txId, EMPTY_BUFFER);
120
+ } else {
121
+ const cached = await matchPdf(txId);
122
+ if (!cached) throw new Error("PDF not in cache");
123
+ const pdfBytes = await cached.arrayBuffer();
124
+ doc = getOrOpenDoc(txId, pdfBytes);
125
+ }
126
+ const localDims = [];
127
+ for (let i = from; i <= to; i++) {
128
+ const alreadyCached = await matchPage(txId, i);
129
+ if (alreadyCached) {
130
+ let page2 = null;
131
+ try {
132
+ page2 = doc.loadPage(i);
133
+ const b = page2.getBounds();
134
+ localDims.push({ i, w: b[2] - b[0], h: b[3] - b[1] });
135
+ } finally {
136
+ page2?.destroy();
137
+ }
138
+ post({ type: "MuPageDone", txId, page: i });
139
+ continue;
140
+ }
141
+ let page = null;
142
+ try {
143
+ page = doc.loadPage(i);
144
+ const bounds = page.getBounds();
145
+ localDims.push({ i, w: bounds[2] - bounds[0], h: bounds[3] - bounds[1] });
146
+ const pixmap = page.toPixmap(mupdf.Matrix.identity, mupdf.ColorSpace.DeviceRGB, false, true);
147
+ const pngBytes = pixmap.asPNG();
148
+ pixmap.destroy();
149
+ await putPage(txId, i, new Response(pngBytes, {
150
+ headers: { "Content-Type": "image/png" }
151
+ }));
152
+ post({ type: "MuPageDone", txId, page: i });
153
+ } catch (err) {
154
+ post({ type: "MuPageError", txId, page: i, error: err instanceof Error ? err.message : String(err) });
155
+ } finally {
156
+ page?.destroy();
157
+ }
158
+ }
159
+ let finalBookData = null;
160
+ await navigator.locks.request(`mu-worker-${txId}`, async () => {
161
+ const existing = await getBookData(txId);
162
+ const dimensions = existing ? [...existing.dimensions] : [];
163
+ for (const d of localDims) {
164
+ while (dimensions.length <= d.i) dimensions.push({ width: 0, height: 0 });
165
+ dimensions[d.i] = { width: d.w, height: d.h };
166
+ }
167
+ finalBookData = { txId, dimensions, parsed: true };
168
+ await storeBookData(finalBookData);
169
+ });
170
+ if (finalBookData) {
171
+ post({ type: "MuPdfData", txId, bookData: finalBookData });
172
+ }
173
+ } catch (err) {
174
+ const msg = err instanceof Error ? err.message : String(err);
175
+ for (let i = from; i <= to; i++) {
176
+ post({ type: "MuPageError", txId, page: i, error: msg });
177
+ }
178
+ }
179
+ }
180
+ var _initPromise = null;
181
+ var _msgChain = Promise.resolve();
182
+ self.onmessage = (e) => {
183
+ const cmd = e.data;
184
+ if (cmd.type === "MuInit") {
185
+ if (!_initPromise) {
186
+ _initPromise = initMupdf(cmd.mupdfUrl).catch((err) => {
187
+ console.error("[mu-worker] MuInit failed:", err);
188
+ throw err;
189
+ });
190
+ }
191
+ return;
192
+ }
193
+ if (cmd.type === "ProcessPages") {
194
+ _msgChain = _msgChain.then(() => handleProcessPages(cmd.txId, cmd.from, cmd.to)).catch((err) => console.error("[mu-worker] unexpected ProcessPages failure:", err));
195
+ }
196
+ };
197
+ //# sourceMappingURL=mu-worker-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/downloader/keys.ts","../../src/downloader/cache-store.ts","../../src/downloader/meta-db.ts","../../src/downloader/worker/mu-worker.ts"],"mappings":"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","names":["page"]}
@@ -0,0 +1,19 @@
1
+ import { F as FileState, R as RenderState, P as PruningState } from '../state-BTsp-E4v.js';
2
+
3
+ declare const useFileStatus: (txId: string) => FileState;
4
+ declare const useRenderStatus: (txId: string) => RenderState;
5
+ declare const useGlobalProgress: () => {
6
+ active: number;
7
+ queued: number;
8
+ loaded: number;
9
+ total: number;
10
+ };
11
+ /**
12
+ * Reactive LRU auto-cleanup state.
13
+ *
14
+ * Usage:
15
+ * const { active, freedBytes, removedCount } = usePruning()
16
+ */
17
+ declare const usePruning: () => Readonly<PruningState>;
18
+
19
+ export { useFileStatus, useGlobalProgress, usePruning, useRenderStatus };
@@ -0,0 +1,32 @@
1
+ import {
2
+ downloadState
3
+ } from "../chunk-WHWMTS7D.js";
4
+
5
+ // src/downloader/adapters/react.ts
6
+ import { useSyncExternalStore } from "react";
7
+ var version = 0;
8
+ downloadState.subscribe(() => version++);
9
+ var useTick = () => useSyncExternalStore(downloadState.subscribe, () => version);
10
+ var useFileStatus = (txId) => {
11
+ useTick();
12
+ return downloadState.get(txId);
13
+ };
14
+ var useRenderStatus = (txId) => {
15
+ useTick();
16
+ return downloadState.getRender(txId);
17
+ };
18
+ var useGlobalProgress = () => {
19
+ useTick();
20
+ return downloadState.summary();
21
+ };
22
+ var usePruning = () => {
23
+ useTick();
24
+ return downloadState.pruning;
25
+ };
26
+ export {
27
+ useFileStatus,
28
+ useGlobalProgress,
29
+ usePruning,
30
+ useRenderStatus
31
+ };
32
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/downloader/adapters/react.ts"],"mappings":";;;;;AAeA,SAAS,4BAA4B;AAGrC,IAAI,UAAU;AACd,cAAc,UAAU,MAAM,SAAS;AAEvC,IAAM,UAAU,MACZ,qBAAqB,cAAc,WAAW,MAAM,OAAO;AAExD,IAAM,gBAAoB,CAAC,SAAiB;AAAE,UAAQ;AAAG,SAAO,cAAc,IAAI,IAAI;AAAG;AACzF,IAAM,kBAAoB,CAAC,SAAiB;AAAE,UAAQ;AAAG,SAAO,cAAc,UAAU,IAAI;AAAG;AAC/F,IAAM,oBAAoB,MAAkB;AAAE,UAAQ;AAAG,SAAO,cAAc,QAAQ;AAAG;AAQzF,IAAM,aAAa,MAAM;AAAE,UAAQ;AAAG,SAAO,cAAc;AAAS;","names":[]}
@@ -0,0 +1,21 @@
1
+ import { F as FileState, R as RenderState, P as PruningState } from '../state-BTsp-E4v.js';
2
+
3
+ declare const useFileStatus: (txId: string) => () => FileState;
4
+ declare const useRenderStatus: (txId: string) => () => RenderState;
5
+ declare const useGlobalProgress: () => () => {
6
+ active: number;
7
+ queued: number;
8
+ loaded: number;
9
+ total: number;
10
+ };
11
+ /**
12
+ * Reactive LRU auto-cleanup state.
13
+ *
14
+ * Usage:
15
+ * const pruning = usePruning() // call pruning() in JSX to read reactively
16
+ * pruning().active // true while cleanup runs
17
+ * pruning().freedBytes // bytes freed in the last run
18
+ */
19
+ declare const usePruning: () => () => Readonly<PruningState>;
20
+
21
+ export { useFileStatus, useGlobalProgress, usePruning, useRenderStatus };
@@ -0,0 +1,19 @@
1
+ import {
2
+ downloadState
3
+ } from "../chunk-WHWMTS7D.js";
4
+
5
+ // src/downloader/adapters/solid.ts
6
+ import { createSignal } from "solid-js";
7
+ var [tick, setTick] = createSignal(0);
8
+ downloadState.subscribe(() => setTick((t) => t + 1));
9
+ var useFileStatus = (txId) => () => (tick(), downloadState.get(txId));
10
+ var useRenderStatus = (txId) => () => (tick(), downloadState.getRender(txId));
11
+ var useGlobalProgress = () => () => (tick(), downloadState.summary());
12
+ var usePruning = () => () => (tick(), downloadState.pruning);
13
+ export {
14
+ useFileStatus,
15
+ useGlobalProgress,
16
+ usePruning,
17
+ useRenderStatus
18
+ };
19
+ //# sourceMappingURL=solid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/downloader/adapters/solid.ts"],"mappings":";;;;;AAeA,SAAS,oBAAoB;AAG7B,IAAM,CAAC,MAAM,OAAO,IAAI,aAAa,CAAC;AACtC,cAAc,UAAU,MAAM,QAAQ,OAAK,IAAI,CAAC,CAAC;AAE1C,IAAM,gBAAoB,CAAC,SAAiB,OAAO,KAAK,GAAG,cAAc,IAAI,IAAI;AACjF,IAAM,kBAAoB,CAAC,SAAiB,OAAO,KAAK,GAAG,cAAc,UAAU,IAAI;AACvF,IAAM,oBAAoB,MAAkB,OAAO,KAAK,GAAG,cAAc,QAAQ;AAUjF,IAAM,aAAa,MAAM,OAAO,KAAK,GAAG,cAAc;","names":[]}
@@ -0,0 +1,22 @@
1
+ interface SwStatus {
2
+ supported: boolean;
3
+ registered: boolean;
4
+ controlling: boolean;
5
+ scope?: string;
6
+ version?: string;
7
+ reason?: string;
8
+ }
9
+ interface SwGateOptions {
10
+ allowedOrigins?: string[];
11
+ enableInDev?: boolean;
12
+ }
13
+ declare const swStatus: () => Promise<SwStatus>;
14
+ declare const registerDownloaderSW: (opts?: SwGateOptions) => Promise<SwStatus>;
15
+ declare const unregisterDownloaderSW: (opts?: {
16
+ clearCaches?: boolean;
17
+ reload?: boolean;
18
+ }) => Promise<boolean>;
19
+ declare const clearDownloaderCaches: () => Promise<void>;
20
+ declare const nukeDownloaderStorage: () => Promise<void>;
21
+
22
+ export { type SwGateOptions, type SwStatus, clearDownloaderCaches, nukeDownloaderStorage, registerDownloaderSW, swStatus, unregisterDownloaderSW };
@@ -0,0 +1,119 @@
1
+ import {
2
+ closeMetaDb
3
+ } from "../chunk-AGHPATVL.js";
4
+
5
+ // src/downloader/sw/register.ts
6
+ var SW_SCRIPT = "/dl2-sw.js";
7
+ var DEFAULT_ORIGINS = ["datapond.earth", "localhost"];
8
+ function isAllowedOrigin(origins) {
9
+ const host = typeof location !== "undefined" ? location.hostname : "";
10
+ return origins.some((o) => host === o || host.endsWith(`.${o}`));
11
+ }
12
+ function killSwitchState() {
13
+ if (typeof location !== "undefined") {
14
+ const qs = new URLSearchParams(location.search);
15
+ const v = qs.get("dl2-sw");
16
+ if (v === "off") return "off";
17
+ if (v === "purge") return "purge";
18
+ }
19
+ if (typeof localStorage !== "undefined") {
20
+ const v = localStorage.getItem("dl2:sw");
21
+ if (v === "off") return "off";
22
+ if (v === "on") return "on";
23
+ }
24
+ return null;
25
+ }
26
+ var swStatus = async () => {
27
+ if (typeof navigator === "undefined" || !("serviceWorker" in navigator)) {
28
+ return { supported: false, registered: false, controlling: false, reason: "not-supported" };
29
+ }
30
+ const regs = await navigator.serviceWorker.getRegistrations();
31
+ const ours = regs.find(
32
+ (r) => r.installing?.scriptURL.endsWith(SW_SCRIPT) || r.waiting?.scriptURL.endsWith(SW_SCRIPT) || r.active?.scriptURL.endsWith(SW_SCRIPT)
33
+ );
34
+ return {
35
+ supported: true,
36
+ registered: !!ours,
37
+ controlling: !!navigator.serviceWorker.controller,
38
+ scope: ours?.scope,
39
+ reason: ours ? void 0 : "not-registered"
40
+ };
41
+ };
42
+ var registerDownloaderSW = async (opts = {}) => {
43
+ const origins = opts.allowedOrigins ?? DEFAULT_ORIGINS;
44
+ const enableDev = opts.enableInDev ?? false;
45
+ if (typeof navigator === "undefined" || !("serviceWorker" in navigator)) {
46
+ return { supported: false, registered: false, controlling: false, reason: "not-supported" };
47
+ }
48
+ const ks = killSwitchState();
49
+ if (ks === "purge") {
50
+ await nukeDownloaderStorage();
51
+ return { supported: true, registered: false, controlling: false, reason: "kill-switch-purge" };
52
+ }
53
+ if (ks === "off") {
54
+ await unregisterDownloaderSW();
55
+ return { supported: true, registered: false, controlling: false, reason: "kill-switch-off" };
56
+ }
57
+ if (!isAllowedOrigin(origins)) {
58
+ return { supported: true, registered: false, controlling: false, reason: "origin-not-allowed" };
59
+ }
60
+ const isDev = typeof import.meta.env !== "undefined" && import.meta.env.DEV;
61
+ if (isDev) {
62
+ if (!enableDev || ks !== "on") {
63
+ await unregisterDownloaderSW();
64
+ return { supported: true, registered: false, controlling: false, reason: "dev-mode" };
65
+ }
66
+ }
67
+ await navigator.serviceWorker.register(SW_SCRIPT, { scope: "/" });
68
+ return swStatus();
69
+ };
70
+ var unregisterDownloaderSW = async (opts = {}) => {
71
+ if (typeof navigator === "undefined" || !("serviceWorker" in navigator)) return false;
72
+ const regs = await navigator.serviceWorker.getRegistrations();
73
+ let removed = false;
74
+ for (const reg of regs) {
75
+ const matches = reg.installing?.scriptURL.endsWith(SW_SCRIPT) || reg.waiting?.scriptURL.endsWith(SW_SCRIPT) || reg.active?.scriptURL.endsWith(SW_SCRIPT);
76
+ if (matches) {
77
+ await reg.unregister();
78
+ removed = true;
79
+ }
80
+ }
81
+ if (opts.clearCaches) await clearDownloaderCaches();
82
+ if (opts.reload && removed && typeof location !== "undefined") location.reload();
83
+ return removed;
84
+ };
85
+ var clearDownloaderCaches = async () => {
86
+ const names = await caches.keys();
87
+ await Promise.all(
88
+ names.filter((n) => n.startsWith("dl2-")).map((n) => caches.delete(n))
89
+ );
90
+ };
91
+ var nukeDownloaderStorage = async () => {
92
+ await unregisterDownloaderSW({ clearCaches: true });
93
+ closeMetaDb();
94
+ await new Promise((resolve, reject) => {
95
+ const req = indexedDB.deleteDatabase("dl2_meta");
96
+ const timer = setTimeout(() => {
97
+ console.warn("[downloader] dl2_meta deleteDatabase blocked by another tab; giving up waiting");
98
+ resolve();
99
+ }, 5e3);
100
+ req.onsuccess = () => {
101
+ clearTimeout(timer);
102
+ resolve();
103
+ };
104
+ req.onerror = () => {
105
+ clearTimeout(timer);
106
+ reject(req.error);
107
+ };
108
+ req.onblocked = () => {
109
+ };
110
+ });
111
+ };
112
+ export {
113
+ clearDownloaderCaches,
114
+ nukeDownloaderStorage,
115
+ registerDownloaderSW,
116
+ swStatus,
117
+ unregisterDownloaderSW
118
+ };
119
+ //# sourceMappingURL=sw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/downloader/sw/register.ts"],"mappings":"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","names":[]}
@@ -0,0 +1,23 @@
1
+ import * as vue from 'vue';
2
+ import { F as FileState, R as RenderState, P as PruningState } from '../state-BTsp-E4v.js';
3
+
4
+ declare const useFileStatus: (txId: string) => vue.ComputedRef<FileState>;
5
+ declare const useRenderStatus: (txId: string) => vue.ComputedRef<RenderState>;
6
+ declare const useGlobalProgress: () => vue.ComputedRef<{
7
+ active: number;
8
+ queued: number;
9
+ loaded: number;
10
+ total: number;
11
+ }>;
12
+ /**
13
+ * Reactive LRU auto-cleanup state.
14
+ *
15
+ * Usage:
16
+ * const pruning = usePruning()
17
+ * // pruning.value.active → true while cleanup is running
18
+ * // pruning.value.freedBytes → bytes freed in the last run
19
+ * // pruning.value.removedCount → number of PDFs removed
20
+ */
21
+ declare const usePruning: () => vue.ComputedRef<Readonly<PruningState>>;
22
+
23
+ export { useFileStatus, useGlobalProgress, usePruning, useRenderStatus };
@@ -0,0 +1,19 @@
1
+ import {
2
+ downloadState
3
+ } from "../chunk-WHWMTS7D.js";
4
+
5
+ // src/downloader/adapters/vue.ts
6
+ import { computed, shallowRef } from "vue";
7
+ var tick = shallowRef(0);
8
+ downloadState.subscribe(() => tick.value++);
9
+ var useFileStatus = (txId) => computed(() => (tick.value, downloadState.get(txId)));
10
+ var useRenderStatus = (txId) => computed(() => (tick.value, downloadState.getRender(txId)));
11
+ var useGlobalProgress = () => computed(() => (tick.value, downloadState.summary()));
12
+ var usePruning = () => computed(() => (tick.value, downloadState.pruning));
13
+ export {
14
+ useFileStatus,
15
+ useGlobalProgress,
16
+ usePruning,
17
+ useRenderStatus
18
+ };
19
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/downloader/adapters/vue.ts"],"mappings":";;;;;AAeA,SAAS,UAAU,kBAAkB;AAGrC,IAAM,OAAO,WAAW,CAAC;AACzB,cAAc,UAAU,MAAM,KAAK,OAAO;AAEnC,IAAM,gBAAgB,CAAC,SAC1B,SAAS,OAAO,KAAK,OAAO,cAAc,IAAI,IAAI,EAAE;AAEjD,IAAM,kBAAkB,CAAC,SAC5B,SAAS,OAAO,KAAK,OAAO,cAAc,UAAU,IAAI,EAAE;AAEvD,IAAM,oBAAoB,MAC7B,SAAS,OAAO,KAAK,OAAO,cAAc,QAAQ,EAAE;AAWjD,IAAM,aAAa,MACtB,SAAS,OAAO,KAAK,OAAO,cAAc,QAAQ;","names":[]}
@@ -0,0 +1,15 @@
1
+ interface LevelState {
2
+ /** Integer level, 1-based (Math.floor(raw) + 1). */
3
+ level: number;
4
+ /** Progress toward the next level, 0–100. */
5
+ progress: number;
6
+ }
7
+ /** Returns the current level state for a username. Never throws — defaults to level 1. */
8
+ declare const getLevel: (username: string) => LevelState;
9
+ /**
10
+ * Subscribe to level updates. The listener receives the username whose level
11
+ * changed. Call the returned function to unsubscribe.
12
+ */
13
+ declare const subscribeLevel: (listener: (username: string) => void) => (() => void);
14
+
15
+ export { type LevelState as L, getLevel as g, subscribeLevel as s };
@@ -0,0 +1,47 @@
1
+ import { S as SessionBootstrapOptions } from '../session-vqOnyxga.js';
2
+ export { r as resetModelsV2Session } from '../session-vqOnyxga.js';
3
+ import '../orm-BvkX0aBT.js';
4
+
5
+ /**
6
+ * **Composes** a framework-free reactivity bus into the record tracker (coexists
7
+ * with framework systems — see `addReactivitySystem`). There is no automatic
8
+ * read-tracking for vanilla JS, so `track` is a no-op and DOM updaters subscribe
9
+ * explicitly with `subscribeRecord`. Idempotent; returns an unregister.
10
+ */
11
+ declare const installVanillaReactivity: () => (() => void);
12
+ /**
13
+ * Subscribe a plain callback (e.g. a DOM updater) to a record's mutations.
14
+ * Returns an unsubscribe function.
15
+ *
16
+ * @example
17
+ * const book = await Book.LoadAsync(10);
18
+ * const stop = subscribeRecord(book, () => { titleEl.textContent = book.title; });
19
+ */
20
+ declare const subscribeRecord: (record: object, cb: () => void) => (() => void);
21
+ /**
22
+ * Persistent models_v2 session for Astro vanilla islands — the full front-end
23
+ * boot (resolve sidecars → worker → `hydrateAll` → replay) plus framework-free
24
+ * reactivity, retained across `<ClientRouter />` navigations. Thin wrapper over
25
+ * the shared `bootstrapSession()` glue (identical to the solid/vue/react entries
26
+ * — only the reactivity installer differs).
27
+ *
28
+ * **`await` it** before reading records: `Book.Load()` throws on an un-hydrated
29
+ * miss, so gate data access on the returned promise (or use `LoadAsync`).
30
+ *
31
+ * @example
32
+ * // src/layouts/Base.astro — <head><ClientRouter /></head>, then in a client script:
33
+ * import { bootstrapModelsV2, subscribeRecord } from '@the_library/public/models/astro';
34
+ * import { Book, Tag, Person, NewBookWithId, NewTagWithId, NewPersonWithId } from '@the_library/public/models/models';
35
+ * await bootstrapModelsV2({
36
+ * models: [
37
+ * { type: Book.type, create: NewBookWithId },
38
+ * { type: Tag.type, create: NewTagWithId },
39
+ * { type: Person.type, create: NewPersonWithId },
40
+ * ],
41
+ * localMode: '/corpus_v2',
42
+ * selectedLangs: ['eng'],
43
+ * });
44
+ */
45
+ declare const bootstrapModelsV2: (opts: SessionBootstrapOptions) => Promise<void>;
46
+
47
+ export { bootstrapModelsV2, installVanillaReactivity, subscribeRecord };
@@ -0,0 +1,44 @@
1
+ import {
2
+ bootstrapSession,
3
+ resetModelsV2Session
4
+ } from "../chunk-2HFOWE5R.js";
5
+ import "../chunk-Y7RS6RTM.js";
6
+ import {
7
+ addReactivitySystem
8
+ } from "../chunk-JDUYLUDJ.js";
9
+ import "../chunk-ZEZGI2TP.js";
10
+
11
+ // src/models/adapters/astro.ts
12
+ var listeners = /* @__PURE__ */ new WeakMap();
13
+ var _vanillaUnregister = null;
14
+ var _vanillaSystem = {
15
+ track() {
16
+ },
17
+ trigger(o) {
18
+ listeners.get(o)?.forEach((cb) => cb());
19
+ }
20
+ };
21
+ var installVanillaReactivity = () => {
22
+ if (!_vanillaUnregister) _vanillaUnregister = addReactivitySystem(_vanillaSystem);
23
+ return _vanillaUnregister;
24
+ };
25
+ var subscribeRecord = (record, cb) => {
26
+ let set = listeners.get(record);
27
+ if (!set) {
28
+ set = /* @__PURE__ */ new Set();
29
+ listeners.set(record, set);
30
+ }
31
+ set.add(cb);
32
+ return () => {
33
+ set.delete(cb);
34
+ if (set.size === 0) listeners.delete(record);
35
+ };
36
+ };
37
+ var bootstrapModelsV2 = (opts) => bootstrapSession(opts, installVanillaReactivity);
38
+ export {
39
+ bootstrapModelsV2,
40
+ installVanillaReactivity,
41
+ resetModelsV2Session,
42
+ subscribeRecord
43
+ };
44
+ //# sourceMappingURL=astro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/models/adapters/astro.ts"],"mappings":";;;;;;;;;;;AA+BA,IAAM,YAAY,oBAAI,QAAiC;AAEvD,IAAI,qBAA0C;AAC9C,IAAM,iBAAmC;AAAA,EACrC,QAAQ;AAAA,EAA6D;AAAA,EACrE,QAAQ,GAAW;AACf,cAAU,IAAI,CAAC,GAAG,QAAQ,QAAM,GAAG,CAAC;AAAA,EACxC;AACJ;AAQO,IAAM,2BAA2B,MAAoB;AACxD,MAAI,CAAC,mBAAoB,sBAAqB,oBAAoB,cAAc;AAChF,SAAO;AACX;AAUO,IAAM,kBAAkB,CAAC,QAAgB,OAAiC;AAC7E,MAAI,MAAM,UAAU,IAAI,MAAM;AAC9B,MAAI,CAAC,KAAK;AAAE,UAAM,oBAAI,IAAI;AAAG,cAAU,IAAI,QAAQ,GAAG;AAAA,EAAG;AACzD,MAAI,IAAI,EAAE;AACV,SAAO,MAAM;AAAE,QAAK,OAAO,EAAE;AAAG,QAAI,IAAK,SAAS,EAAG,WAAU,OAAO,MAAM;AAAA,EAAG;AACnF;AA0BO,IAAM,oBAAoB,CAAC,SAC9B,iBAAiB,MAAM,wBAAwB;","names":[]}