@korajs/store 1.0.0-beta.12 → 1.0.0-beta.14

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 (92) hide show
  1. package/README.md +29 -37
  2. package/dist/adapters/better-sqlite3.cjs +90 -4
  3. package/dist/adapters/better-sqlite3.cjs.map +1 -1
  4. package/dist/adapters/better-sqlite3.d.cts +21 -12
  5. package/dist/adapters/better-sqlite3.d.ts +21 -12
  6. package/dist/adapters/better-sqlite3.js +69 -5
  7. package/dist/adapters/better-sqlite3.js.map +1 -1
  8. package/dist/adapters/indexeddb.cjs +1316 -610
  9. package/dist/adapters/indexeddb.cjs.map +1 -1
  10. package/dist/adapters/indexeddb.d.cts +29 -3
  11. package/dist/adapters/indexeddb.d.ts +29 -3
  12. package/dist/adapters/indexeddb.js +247 -221
  13. package/dist/adapters/indexeddb.js.map +1 -1
  14. package/dist/adapters/sqlite-wasm-worker.cjs +856 -63
  15. package/dist/adapters/sqlite-wasm-worker.cjs.map +1 -1
  16. package/dist/adapters/sqlite-wasm-worker.js +529 -63
  17. package/dist/adapters/sqlite-wasm-worker.js.map +1 -1
  18. package/dist/adapters/sqlite-wasm.cjs +1032 -344
  19. package/dist/adapters/sqlite-wasm.cjs.map +1 -1
  20. package/dist/adapters/sqlite-wasm.d.cts +239 -18
  21. package/dist/adapters/sqlite-wasm.d.ts +239 -18
  22. package/dist/adapters/sqlite-wasm.js +111 -5
  23. package/dist/adapters/sqlite-wasm.js.map +1 -1
  24. package/dist/backup-IHKVMUAM.js +25 -0
  25. package/dist/chunk-5AQSGMJV.js +5471 -0
  26. package/dist/chunk-5AQSGMJV.js.map +1 -0
  27. package/dist/chunk-5JMGMPUE.js +591 -0
  28. package/dist/chunk-5JMGMPUE.js.map +1 -0
  29. package/dist/{chunk-CYO3YKFL.js → chunk-5ZRRF6R2.js} +2 -2
  30. package/dist/chunk-A6GFH5IG.js +36 -0
  31. package/dist/chunk-A6GFH5IG.js.map +1 -0
  32. package/dist/chunk-BILSA6XZ.js +608 -0
  33. package/dist/chunk-BILSA6XZ.js.map +1 -0
  34. package/dist/chunk-BQSIL6TT.js +1095 -0
  35. package/dist/chunk-BQSIL6TT.js.map +1 -0
  36. package/dist/{chunk-GSJ7EEUC.js → chunk-J5AGXF3D.js} +58 -9
  37. package/dist/chunk-J5AGXF3D.js.map +1 -0
  38. package/dist/chunk-KK3GBONL.js +112 -0
  39. package/dist/chunk-KK3GBONL.js.map +1 -0
  40. package/dist/chunk-KTVNANUH.js +876 -0
  41. package/dist/chunk-KTVNANUH.js.map +1 -0
  42. package/dist/chunk-QW4UU7NG.js +1003 -0
  43. package/dist/chunk-QW4UU7NG.js.map +1 -0
  44. package/dist/chunk-SRHDJF5B.js +186 -0
  45. package/dist/chunk-SRHDJF5B.js.map +1 -0
  46. package/dist/chunk-UC2LGFPV.js +810 -0
  47. package/dist/chunk-UC2LGFPV.js.map +1 -0
  48. package/dist/{export-audit-ODGQTQIK.js → export-audit-J2QXRHD2.js} +3 -3
  49. package/dist/index.cjs +9533 -4246
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.cts +1143 -110
  52. package/dist/index.d.ts +1143 -110
  53. package/dist/index.js +298 -3191
  54. package/dist/index.js.map +1 -1
  55. package/dist/internal.cjs +581 -264
  56. package/dist/internal.cjs.map +1 -1
  57. package/dist/internal.d.cts +15 -85
  58. package/dist/internal.d.ts +15 -85
  59. package/dist/internal.js +10 -8
  60. package/dist/restore-MNDPR557.js +299 -0
  61. package/dist/restore-MNDPR557.js.map +1 -0
  62. package/dist/sql-builder-D0tC3sv9.d.cts +615 -0
  63. package/dist/sql-builder-D5UMzHEo.d.ts +615 -0
  64. package/dist/sqlite-wasm-channel-DVX93Uiq.d.cts +141 -0
  65. package/dist/sqlite-wasm-channel-DVX93Uiq.d.ts +141 -0
  66. package/dist/sqlite-wasm-channel-QCCNBYCU.js +12 -0
  67. package/dist/store-HNGX4KTT.js +16 -0
  68. package/dist/store-HNGX4KTT.js.map +1 -0
  69. package/dist/{types-BslDOTk0.d.ts → types-Dh-xyUjP.d.cts} +99 -26
  70. package/dist/{types-BslDOTk0.d.cts → types-Dh-xyUjP.d.ts} +99 -26
  71. package/package.json +3 -2
  72. package/dist/backup-5S7K2Z35.js +0 -14
  73. package/dist/chunk-GSJ7EEUC.js.map +0 -1
  74. package/dist/chunk-HS6DBMST.js +0 -383
  75. package/dist/chunk-HS6DBMST.js.map +0 -1
  76. package/dist/chunk-RJIEKEN4.js +0 -751
  77. package/dist/chunk-RJIEKEN4.js.map +0 -1
  78. package/dist/chunk-TUR7RGEP.js +0 -84
  79. package/dist/chunk-TUR7RGEP.js.map +0 -1
  80. package/dist/chunk-VDBJQ75K.js +0 -78
  81. package/dist/chunk-VDBJQ75K.js.map +0 -1
  82. package/dist/chunk-YT7MRFCP.js +0 -687
  83. package/dist/chunk-YT7MRFCP.js.map +0 -1
  84. package/dist/sqlite-wasm-channel-GGHA2BXU.js +0 -12
  85. package/dist/sqlite-wasm-channel-L6o3bWQK.d.cts +0 -92
  86. package/dist/sqlite-wasm-channel-L6o3bWQK.d.ts +0 -92
  87. package/dist/types-BOO9EPt1.d.ts +0 -170
  88. package/dist/types-C_GDavG-.d.cts +0 -170
  89. /package/dist/{backup-5S7K2Z35.js.map → backup-IHKVMUAM.js.map} +0 -0
  90. /package/dist/{chunk-CYO3YKFL.js.map → chunk-5ZRRF6R2.js.map} +0 -0
  91. /package/dist/{export-audit-ODGQTQIK.js.map → export-audit-J2QXRHD2.js.map} +0 -0
  92. /package/dist/{sqlite-wasm-channel-GGHA2BXU.js.map → sqlite-wasm-channel-QCCNBYCU.js.map} +0 -0
@@ -1,16 +1,122 @@
1
1
  import {
2
- SqliteWasmAdapter
3
- } from "../chunk-RJIEKEN4.js";
2
+ SqliteWasmAdapter,
3
+ deleteFromIndexedDB,
4
+ deleteManifestRecord,
5
+ listManifestRecords,
6
+ loadDumpFromIndexedDB,
7
+ readManifestRecord,
8
+ restoreDumpStatements
9
+ } from "../chunk-BQSIL6TT.js";
4
10
  import {
5
11
  WebWorkerBridge
6
- } from "../chunk-VDBJQ75K.js";
12
+ } from "../chunk-KK3GBONL.js";
7
13
  import {
8
14
  Mutex
9
15
  } from "../chunk-TVJEC5S2.js";
10
- import "../chunk-TUR7RGEP.js";
16
+ import {
17
+ leaderLockName,
18
+ opfsPoolNameFor
19
+ } from "../chunk-5JMGMPUE.js";
20
+ import {
21
+ AdapterError,
22
+ StorageInUseError,
23
+ UnsyncedDataError
24
+ } from "../chunk-SRHDJF5B.js";
25
+
26
+ // src/adapters/local-databases.ts
27
+ async function listLocalDatabases() {
28
+ return listManifestRecords();
29
+ }
30
+ async function withExclusiveDatabase(dbName, run) {
31
+ const locks = typeof navigator !== "undefined" ? navigator.locks : void 0;
32
+ if (!locks || typeof locks.request !== "function") {
33
+ return run();
34
+ }
35
+ let ran = false;
36
+ let result;
37
+ await locks.request(
38
+ leaderLockName(dbName),
39
+ { mode: "exclusive", ifAvailable: true },
40
+ async (lock) => {
41
+ if (lock === null) return;
42
+ ran = true;
43
+ result = await run();
44
+ }
45
+ );
46
+ if (!ran) {
47
+ throw new StorageInUseError(dbName);
48
+ }
49
+ return result;
50
+ }
51
+ async function deleteLocalDatabase(dbName, options) {
52
+ const record = await readManifestRecord(dbName);
53
+ const backend = record?.backend ?? "opfs";
54
+ return withExclusiveDatabase(dbName, async () => {
55
+ const { WebWorkerBridge: WebWorkerBridge2 } = await import("../sqlite-wasm-channel-QCCNBYCU.js");
56
+ const worker = new WebWorkerBridge2(options.workerUrl, options.workerResponseTimeoutMs ?? 3e4);
57
+ const send = async (request) => worker.send(request);
58
+ const reader = {
59
+ dbName,
60
+ query: async (sql, params) => {
61
+ const response = await send({ id: 0, type: "query", sql, params });
62
+ if (response.type === "error") {
63
+ throw new AdapterError(`Query failed: ${response.message}`, { dbName, sql });
64
+ }
65
+ return response.data ?? [];
66
+ }
67
+ };
68
+ try {
69
+ let exists;
70
+ if (backend === "opfs") {
71
+ const opened = await worker.send(
72
+ { id: 0, type: "open", ddlStatements: [], dbName, mustExist: true },
73
+ void 0,
74
+ { timeoutMs: Number.POSITIVE_INFINITY }
75
+ );
76
+ if (opened.type === "error" && opened.code !== "NOT_FOUND") {
77
+ throw new AdapterError(`Could not open "${dbName}" for deletion: ${opened.message}`, {
78
+ dbName,
79
+ code: opened.code
80
+ });
81
+ }
82
+ exists = opened.type === "success";
83
+ } else {
84
+ const dump = await loadDumpFromIndexedDB(dbName);
85
+ exists = dump !== null;
86
+ if (dump) {
87
+ await send({ id: 0, type: "open", ddlStatements: [], dbName, storage: "memory" });
88
+ for (const statement of restoreDumpStatements(dump, true)) {
89
+ await send({ id: 0, type: "execute", sql: statement.sql, params: statement.params });
90
+ }
91
+ }
92
+ }
93
+ if (exists && !options.force && options.hasUnsyncedOperations) {
94
+ if (await options.hasUnsyncedOperations(reader)) {
95
+ throw new UnsyncedDataError(dbName);
96
+ }
97
+ }
98
+ if (backend === "opfs" && exists) {
99
+ const destroyed = await send({ id: 0, type: "destroy" });
100
+ if (destroyed.type === "error") {
101
+ throw new AdapterError(`Could not delete "${dbName}": ${destroyed.message}`, { dbName });
102
+ }
103
+ }
104
+ if (backend === "indexeddb") {
105
+ await deleteFromIndexedDB(dbName);
106
+ }
107
+ await deleteManifestRecord(dbName);
108
+ return exists || record !== null;
109
+ } finally {
110
+ worker.terminate();
111
+ }
112
+ });
113
+ }
11
114
  export {
12
115
  Mutex,
13
116
  SqliteWasmAdapter,
14
- WebWorkerBridge
117
+ WebWorkerBridge,
118
+ deleteLocalDatabase,
119
+ listLocalDatabases,
120
+ opfsPoolNameFor
15
121
  };
16
122
  //# sourceMappingURL=sqlite-wasm.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../src/adapters/local-databases.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\n/**\n * Explicit management of the local databases on this origin (W8a, NEW-STORE-7).\n *\n * Kora never evicts a database on its own: a full pool is prevented by\n * per-database pools and capacity reservation, and removing data is always an\n * explicit call that refuses while the database is open or still holds\n * operations the server has not acknowledged.\n */\n\nimport { AdapterError, StorageInUseError, UnsyncedDataError } from '../errors'\nimport { type DatabaseDump, restoreDumpStatements } from './database-dump'\nimport { leaderLockName } from './opfs-names'\nimport type { WorkerRequest, WorkerResponse } from './sqlite-wasm-channel'\nimport { deleteFromIndexedDB, loadDumpFromIndexedDB } from './sqlite-wasm-persistence'\nimport {\n\ttype LocalDatabaseRecord,\n\tdeleteManifestRecord,\n\tlistManifestRecords,\n\treadManifestRecord,\n} from './storage-manifest'\n\n/** Read-only access to a database handed to the unsynced-data check. */\nexport interface LocalDatabaseReader {\n\tdbName: string\n\tquery<T>(sql: string, params?: unknown[]): Promise<T[]>\n}\n\n/** Options for {@link deleteLocalDatabase}. */\nexport interface DeleteLocalDatabaseOptions {\n\t/** URL of the Kora SQLite worker (the same one the app's store uses). */\n\tworkerUrl: string | URL\n\t/**\n\t * Decides whether the database still holds operations the server never\n\t * acknowledged. Injected by the app layer, which knows its sync setup.\n\t * When it returns true the delete is refused with {@link UnsyncedDataError}.\n\t */\n\thasUnsyncedOperations?: (db: LocalDatabaseReader) => Promise<boolean>\n\t/** Delete even when unsynced operations exist (they are lost). */\n\tforce?: boolean\n\t/** Worker response timeout. Defaults to 30000ms. */\n\tworkerResponseTimeoutMs?: number\n}\n\n/**\n * Databases Kora has recorded on this origin (created or opened since W8a).\n * A database still in the pre-W8a shared pool appears after its first open.\n */\nexport async function listLocalDatabases(): Promise<LocalDatabaseRecord[]> {\n\treturn listManifestRecords()\n}\n\n/**\n * Hold a database's leader lock for the duration of `run`, so no tab can open\n * it meanwhile. Throws {@link StorageInUseError} when it is open somewhere.\n */\nasync function withExclusiveDatabase<T>(dbName: string, run: () => Promise<T>): Promise<T> {\n\tconst locks = typeof navigator !== 'undefined' ? navigator.locks : undefined\n\tif (!locks || typeof locks.request !== 'function') {\n\t\treturn run()\n\t}\n\tlet ran = false\n\tlet result: T | undefined\n\tawait locks.request(\n\t\tleaderLockName(dbName),\n\t\t{ mode: 'exclusive', ifAvailable: true },\n\t\tasync (lock) => {\n\t\t\tif (lock === null) return\n\t\t\tran = true\n\t\t\tresult = await run()\n\t\t},\n\t)\n\tif (!ran) {\n\t\tthrow new StorageInUseError(dbName)\n\t}\n\treturn result as T\n}\n\n/**\n * Permanently delete a local database and its OPFS pool or IndexedDB copy.\n *\n * Refuses with {@link StorageInUseError} while any tab has the database open,\n * and with {@link UnsyncedDataError} while `hasUnsyncedOperations` reports\n * unsynced operations (unless `force`). Never touches any other database.\n *\n * @returns true when something was deleted, false when the database did not exist\n */\nexport async function deleteLocalDatabase(\n\tdbName: string,\n\toptions: DeleteLocalDatabaseOptions,\n): Promise<boolean> {\n\tconst record = await readManifestRecord(dbName)\n\tconst backend = record?.backend ?? 'opfs'\n\treturn withExclusiveDatabase(dbName, async () => {\n\t\tconst { WebWorkerBridge } = await import('./sqlite-wasm-channel')\n\t\tconst worker = new WebWorkerBridge(options.workerUrl, options.workerResponseTimeoutMs ?? 30_000)\n\t\tconst send = async (request: WorkerRequest): Promise<WorkerResponse> => worker.send(request)\n\t\tconst reader: LocalDatabaseReader = {\n\t\t\tdbName,\n\t\t\tquery: async <T>(sql: string, params?: unknown[]): Promise<T[]> => {\n\t\t\t\tconst response = await send({ id: 0, type: 'query', sql, params })\n\t\t\t\tif (response.type === 'error') {\n\t\t\t\t\tthrow new AdapterError(`Query failed: ${response.message}`, { dbName, sql })\n\t\t\t\t}\n\t\t\t\treturn (response.data as T[]) ?? []\n\t\t\t},\n\t\t}\n\t\ttry {\n\t\t\tlet exists: boolean\n\t\t\tif (backend === 'opfs') {\n\t\t\t\tconst opened = await worker.send(\n\t\t\t\t\t{ id: 0, type: 'open', ddlStatements: [], dbName, mustExist: true },\n\t\t\t\t\tundefined,\n\t\t\t\t\t{ timeoutMs: Number.POSITIVE_INFINITY },\n\t\t\t\t)\n\t\t\t\tif (opened.type === 'error' && opened.code !== 'NOT_FOUND') {\n\t\t\t\t\tthrow new AdapterError(`Could not open \"${dbName}\" for deletion: ${opened.message}`, {\n\t\t\t\t\t\tdbName,\n\t\t\t\t\t\tcode: opened.code,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\texists = opened.type === 'success'\n\t\t\t} else {\n\t\t\t\tconst dump = await loadDumpFromIndexedDB<DatabaseDump>(dbName)\n\t\t\t\texists = dump !== null\n\t\t\t\tif (dump) {\n\t\t\t\t\tawait send({ id: 0, type: 'open', ddlStatements: [], dbName, storage: 'memory' })\n\t\t\t\t\tfor (const statement of restoreDumpStatements(dump, true)) {\n\t\t\t\t\t\tawait send({ id: 0, type: 'execute', sql: statement.sql, params: statement.params })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (exists && !options.force && options.hasUnsyncedOperations) {\n\t\t\t\tif (await options.hasUnsyncedOperations(reader)) {\n\t\t\t\t\tthrow new UnsyncedDataError(dbName)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (backend === 'opfs' && exists) {\n\t\t\t\tconst destroyed = await send({ id: 0, type: 'destroy' })\n\t\t\t\tif (destroyed.type === 'error') {\n\t\t\t\t\tthrow new AdapterError(`Could not delete \"${dbName}\": ${destroyed.message}`, { dbName })\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (backend === 'indexeddb') {\n\t\t\t\tawait deleteFromIndexedDB(dbName)\n\t\t\t}\n\t\t\tawait deleteManifestRecord(dbName)\n\t\t\treturn exists || record !== null\n\t\t} finally {\n\t\t\tworker.terminate()\n\t\t}\n\t})\n}\n"],"mappings":"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","names":["WebWorkerBridge"]}
@@ -0,0 +1,25 @@
1
+ import {
2
+ BACKUP_VERSION,
3
+ BackupFormatError,
4
+ convertBackupV1,
5
+ exportBackup,
6
+ parseBackup,
7
+ readBackupManifest,
8
+ restoreBackup,
9
+ verifyBackupChecksum
10
+ } from "./chunk-UC2LGFPV.js";
11
+ import "./chunk-KTVNANUH.js";
12
+ import "./chunk-QW4UU7NG.js";
13
+ import "./chunk-J5AGXF3D.js";
14
+ import "./chunk-SRHDJF5B.js";
15
+ export {
16
+ BACKUP_VERSION,
17
+ BackupFormatError,
18
+ convertBackupV1,
19
+ exportBackup,
20
+ parseBackup,
21
+ readBackupManifest,
22
+ restoreBackup,
23
+ verifyBackupChecksum
24
+ };
25
+ //# sourceMappingURL=backup-IHKVMUAM.js.map