@slimr/dbsync 0.0.3

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 (122) hide show
  1. package/README.md +183 -0
  2. package/cjs/DbRepository.d.ts +59 -0
  3. package/cjs/DbRepository.js +78 -0
  4. package/cjs/DbRepository.js.map +1 -0
  5. package/cjs/DbSync.d.ts +51 -0
  6. package/cjs/DbSync.js +123 -0
  7. package/cjs/DbSync.js.map +1 -0
  8. package/cjs/DbTransaction.d.ts +60 -0
  9. package/cjs/DbTransaction.js +82 -0
  10. package/cjs/DbTransaction.js.map +1 -0
  11. package/cjs/DbTxRepository.d.ts +41 -0
  12. package/cjs/DbTxRepository.js +56 -0
  13. package/cjs/DbTxRepository.js.map +1 -0
  14. package/cjs/MigrationManager.d.ts +60 -0
  15. package/cjs/MigrationManager.js +69 -0
  16. package/cjs/MigrationManager.js.map +1 -0
  17. package/cjs/Repository.d.ts +59 -0
  18. package/cjs/Repository.js +78 -0
  19. package/cjs/Repository.js.map +1 -0
  20. package/cjs/adapters/RestAdapter.d.ts +13 -0
  21. package/cjs/adapters/RestAdapter.js +47 -0
  22. package/cjs/adapters/RestAdapter.js.map +1 -0
  23. package/cjs/adapters/index.d.ts +2 -0
  24. package/cjs/adapters/index.js +19 -0
  25. package/cjs/adapters/index.js.map +1 -0
  26. package/cjs/adapters/types.d.ts +11 -0
  27. package/cjs/adapters/types.js +3 -0
  28. package/cjs/adapters/types.js.map +1 -0
  29. package/cjs/index.d.ts +3 -0
  30. package/cjs/index.js +20 -0
  31. package/cjs/index.js.map +1 -0
  32. package/cjs/internal/AuthManager.d.ts +13 -0
  33. package/cjs/internal/AuthManager.js +34 -0
  34. package/cjs/internal/AuthManager.js.map +1 -0
  35. package/cjs/internal/DbTransaction.d.ts +60 -0
  36. package/cjs/internal/DbTransaction.js +82 -0
  37. package/cjs/internal/DbTransaction.js.map +1 -0
  38. package/cjs/internal/EventBus.d.ts +16 -0
  39. package/cjs/internal/EventBus.js +41 -0
  40. package/cjs/internal/EventBus.js.map +1 -0
  41. package/cjs/internal/MigrationManager.d.ts +60 -0
  42. package/cjs/internal/MigrationManager.js +69 -0
  43. package/cjs/internal/MigrationManager.js.map +1 -0
  44. package/cjs/internal/StorageManager.d.ts +20 -0
  45. package/cjs/internal/StorageManager.js +148 -0
  46. package/cjs/internal/StorageManager.js.map +1 -0
  47. package/cjs/internal/SyncEngine.d.ts +27 -0
  48. package/cjs/internal/SyncEngine.js +191 -0
  49. package/cjs/internal/SyncEngine.js.map +1 -0
  50. package/cjs/internal/utils.d.ts +1 -0
  51. package/cjs/internal/utils.js +7 -0
  52. package/cjs/internal/utils.js.map +1 -0
  53. package/cjs/react.d.ts +1 -0
  54. package/cjs/react.js +18 -0
  55. package/cjs/react.js.map +1 -0
  56. package/cjs/useDbQuery.d.ts +13 -0
  57. package/cjs/useDbQuery.js +59 -0
  58. package/cjs/useDbQuery.js.map +1 -0
  59. package/cjs/util/promiseWithResolvers.d.ts +11 -0
  60. package/cjs/util/promiseWithResolvers.js +19 -0
  61. package/cjs/util/promiseWithResolvers.js.map +1 -0
  62. package/esm/DbRepository.d.ts +59 -0
  63. package/esm/DbRepository.js +74 -0
  64. package/esm/DbRepository.js.map +1 -0
  65. package/esm/DbSync.d.ts +51 -0
  66. package/esm/DbSync.js +119 -0
  67. package/esm/DbSync.js.map +1 -0
  68. package/esm/DbTransaction.d.ts +60 -0
  69. package/esm/DbTransaction.js +78 -0
  70. package/esm/DbTransaction.js.map +1 -0
  71. package/esm/DbTxRepository.d.ts +41 -0
  72. package/esm/DbTxRepository.js +52 -0
  73. package/esm/DbTxRepository.js.map +1 -0
  74. package/esm/MigrationManager.d.ts +60 -0
  75. package/esm/MigrationManager.js +65 -0
  76. package/esm/MigrationManager.js.map +1 -0
  77. package/esm/Repository.d.ts +59 -0
  78. package/esm/Repository.js +74 -0
  79. package/esm/Repository.js.map +1 -0
  80. package/esm/adapters/RestAdapter.d.ts +13 -0
  81. package/esm/adapters/RestAdapter.js +43 -0
  82. package/esm/adapters/RestAdapter.js.map +1 -0
  83. package/esm/adapters/index.d.ts +2 -0
  84. package/esm/adapters/index.js +3 -0
  85. package/esm/adapters/index.js.map +1 -0
  86. package/esm/adapters/types.d.ts +11 -0
  87. package/esm/adapters/types.js +2 -0
  88. package/esm/adapters/types.js.map +1 -0
  89. package/esm/index.d.ts +3 -0
  90. package/esm/index.js +4 -0
  91. package/esm/index.js.map +1 -0
  92. package/esm/internal/AuthManager.d.ts +13 -0
  93. package/esm/internal/AuthManager.js +30 -0
  94. package/esm/internal/AuthManager.js.map +1 -0
  95. package/esm/internal/DbTransaction.d.ts +60 -0
  96. package/esm/internal/DbTransaction.js +78 -0
  97. package/esm/internal/DbTransaction.js.map +1 -0
  98. package/esm/internal/EventBus.d.ts +16 -0
  99. package/esm/internal/EventBus.js +37 -0
  100. package/esm/internal/EventBus.js.map +1 -0
  101. package/esm/internal/MigrationManager.d.ts +60 -0
  102. package/esm/internal/MigrationManager.js +65 -0
  103. package/esm/internal/MigrationManager.js.map +1 -0
  104. package/esm/internal/StorageManager.d.ts +20 -0
  105. package/esm/internal/StorageManager.js +144 -0
  106. package/esm/internal/StorageManager.js.map +1 -0
  107. package/esm/internal/SyncEngine.d.ts +27 -0
  108. package/esm/internal/SyncEngine.js +187 -0
  109. package/esm/internal/SyncEngine.js.map +1 -0
  110. package/esm/internal/utils.d.ts +1 -0
  111. package/esm/internal/utils.js +4 -0
  112. package/esm/internal/utils.js.map +1 -0
  113. package/esm/react.d.ts +1 -0
  114. package/esm/react.js +2 -0
  115. package/esm/react.js.map +1 -0
  116. package/esm/useDbQuery.d.ts +13 -0
  117. package/esm/useDbQuery.js +56 -0
  118. package/esm/useDbQuery.js.map +1 -0
  119. package/esm/util/promiseWithResolvers.d.ts +11 -0
  120. package/esm/util/promiseWithResolvers.js +16 -0
  121. package/esm/util/promiseWithResolvers.js.map +1 -0
  122. package/package.json +44 -0
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ // DbTransaction does not depend on DbSync now
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DbTransaction = void 0;
5
+ /**
6
+ * Represents an atomic sequence of write operations.
7
+ * Operations are queued in memory and only executed against the target
8
+ * database when `commit()` is called.
9
+ */
10
+ class DbTransaction {
11
+ executor;
12
+ /**
13
+ * Stores the pending CRUD operations.
14
+ * @internal Evaluated and executed by the executor function upon `commit()`.
15
+ */
16
+ operations = [];
17
+ /**
18
+ * Initializes the transaction with an execution engine.
19
+ * Should be instantiated via `DbSync.getTransaction()` rather than directly.
20
+ *
21
+ * @internal
22
+ * @param executor Provides the context needed to process the queued operations.
23
+ */
24
+ constructor(executor) {
25
+ this.executor = executor;
26
+ }
27
+ /**
28
+ * Queues an insertion operation.
29
+ *
30
+ * @param storeName The name of the target object store.
31
+ * @param value The object payload to insert.
32
+ * @param key An optional explicit primary key.
33
+ */
34
+ add(storeName, value, key) {
35
+ this.operations.push({ type: "add", storeName, value, key });
36
+ }
37
+ /**
38
+ * Queues an upsert (insert or update) operation.
39
+ *
40
+ * @param storeName The name of the target object store.
41
+ * @param value The object payload to write.
42
+ * @param key An optional explicit primary key.
43
+ */
44
+ put(storeName, value, key) {
45
+ this.operations.push({ type: "put", storeName, value, key });
46
+ }
47
+ /**
48
+ * Queues a deletion operation.
49
+ *
50
+ * @param storeName The name of the target object store.
51
+ * @param key The primary key of the record to remove.
52
+ */
53
+ delete(storeName, key) {
54
+ this.operations.push({ type: "delete", storeName, key });
55
+ }
56
+ /**
57
+ * Queues an operation to remove all records from an object store.
58
+ *
59
+ * @param storeName The name of the object store to clear.
60
+ */
61
+ clear(storeName) {
62
+ this.operations.push({ type: "clear", storeName });
63
+ }
64
+ /**
65
+ * Executes all queued operations atomically within a single database transaction.
66
+ *
67
+ * @returns A promise that resolves when the transaction successfully completes.
68
+ */
69
+ async commit() {
70
+ if (this.operations.length === 0)
71
+ return;
72
+ return this.executor(this.operations);
73
+ }
74
+ /**
75
+ * Discards all pending operations without modifying the database.
76
+ */
77
+ cancel() {
78
+ this.operations = [];
79
+ }
80
+ }
81
+ exports.DbTransaction = DbTransaction;
82
+ //# sourceMappingURL=DbTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DbTransaction.js","sourceRoot":"","sources":["../../src/internal/DbTransaction.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAE9C;;;;GAIG;AACH,MAAa,aAAa;IAmBL;IAlBpB;;;OAGG;IACK,UAAU,GAKZ,EAAE,CAAA;IAER;;;;;;OAMG;IACH,YAAoB,QAAuC;QAAvC,aAAQ,GAAR,QAAQ,CAA+B;IAAG,CAAC;IAE/D;;;;;;OAMG;IACH,GAAG,CAAC,SAAiB,EAAE,KAAU,EAAE,GAAqB;QACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,SAAiB,EAAE,KAAU,EAAE,GAAqB;QACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAiB,EAAE,GAAoB;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;IACzD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAiB;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACX,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IAED;;OAEG;IACH,MAAM;QACL,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;IACrB,CAAC;CACD;AA9ED,sCA8EC"}
@@ -0,0 +1,16 @@
1
+ export type SyncState = "idle" | "syncing" | "offline" | "error";
2
+ export declare class EventBus {
3
+ private subscribers;
4
+ private stateListeners;
5
+ private bc;
6
+ constructor();
7
+ subscribe(callback: (stores: string[]) => void): {
8
+ close: () => boolean;
9
+ };
10
+ notifySubscribers(stores: string[]): void;
11
+ onSyncStateChange(callback: (state: SyncState) => void): {
12
+ close: () => boolean;
13
+ };
14
+ setState(state: SyncState): void;
15
+ dispose(): void;
16
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventBus = void 0;
4
+ class EventBus {
5
+ subscribers = new Set();
6
+ stateListeners = new Set();
7
+ bc = typeof BroadcastChannel !== "undefined" ? new BroadcastChannel("dbsync_events") : null;
8
+ constructor() {
9
+ if (this.bc) {
10
+ this.bc.onmessage = (e) => {
11
+ if (e.data.type === "DATA_UPDATED") {
12
+ this.notifySubscribers(e.data.stores);
13
+ }
14
+ };
15
+ }
16
+ }
17
+ subscribe(callback) {
18
+ this.subscribers.add(callback);
19
+ return { close: () => this.subscribers.delete(callback) };
20
+ }
21
+ notifySubscribers(stores) {
22
+ this.subscribers.forEach((cb) => cb(stores));
23
+ if (this.bc)
24
+ this.bc.postMessage({ type: "DATA_UPDATED", stores });
25
+ }
26
+ onSyncStateChange(callback) {
27
+ this.stateListeners.add(callback);
28
+ return { close: () => this.stateListeners.delete(callback) };
29
+ }
30
+ setState(state) {
31
+ this.stateListeners.forEach((cb) => cb(state));
32
+ }
33
+ dispose() {
34
+ if (this.bc) {
35
+ this.bc.close();
36
+ this.bc = null;
37
+ }
38
+ }
39
+ }
40
+ exports.EventBus = EventBus;
41
+ //# sourceMappingURL=EventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../../src/internal/EventBus.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IACZ,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAA;IACnD,cAAc,GAAG,IAAI,GAAG,EAA8B,CAAA;IACtD,EAAE,GACT,OAAO,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvF;QACC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtC,CAAC;YACF,CAAC,CAAA;QACF,CAAC;IACF,CAAC;IAEM,SAAS,CAAC,QAAoC;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC1D,CAAC;IAEM,iBAAiB,CAAC,MAAgB;QACxC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QAC5C,IAAI,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;IAEM,iBAAiB,CAAC,QAAoC;QAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC7D,CAAC;IAEM,QAAQ,CAAC,KAAgB;QAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/C,CAAC;IAEM,OAAO;QACb,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QACf,CAAC;IACF,CAAC;CACD;AAzCD,4BAyCC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Defines a single, sequential schema evolution step for a document structure.
3
+ * Migrations allow existing offline data to be selectively upgraded rather than wiped
4
+ * when backend domain modeling changes.
5
+ */
6
+ export interface IMigration<T = any> {
7
+ /**
8
+ * An ascending integer determining execution order. A record currently at `storeVersion: 1`
9
+ * will only trigger migrations where `version >= 2`.
10
+ */
11
+ version: number;
12
+ /**
13
+ * A human-readable note summarizing the structural change.
14
+ */
15
+ note: string;
16
+ /**
17
+ * Mutates the provided record in-place to comply with the new schema structure.
18
+ *
19
+ * @param record The raw record needing an upgrade.
20
+ * @returns A promise that resolves when the record has been fully transformed.
21
+ */
22
+ upgrade(record: T): Promise<void>;
23
+ }
24
+ /**
25
+ * An engine for applying a suite of `IMigration` objects to all records
26
+ * across targeted `DbSync` object stores.
27
+ */
28
+ export declare class MigrationManager {
29
+ private db;
30
+ /**
31
+ * Initializes the MigrationManager for a specific database instance.
32
+ *
33
+ * @internal
34
+ * @param db The `DbSync` instance used to traverse object stores and apply rewrites.
35
+ */
36
+ constructor(db: any);
37
+ /**
38
+ * Iterates through a map of object stores and systematically applies their respective migrations.
39
+ *
40
+ * @param schemaMigrations A dictionary mapping store names to arrays of `IMigration` steps.
41
+ */
42
+ runAll(schemaMigrations: Record<string, IMigration[]>): Promise<void>;
43
+ /**
44
+ * Sorts and attempts to apply a sequence of migrations to a single record in memory.
45
+ * Evaluates `storeVersion` to ensure migrations are only executed sequentially and exactly once.
46
+ *
47
+ * @param record The plain object to be upgraded.
48
+ * @param migrations The full list of potential migrations for the record's domain type.
49
+ * @returns The functionally upgraded record with an updated `storeVersion`.
50
+ */
51
+ static upgradeRecord<T>(record: any, migrations: IMigration<T>[]): Promise<any>;
52
+ /**
53
+ * Reads all records from a specific store, upgrades out-of-date entries,
54
+ * and atomically flushes the changed entries back within a single database transaction.
55
+ *
56
+ * @param storeName The name of the target object store.
57
+ * @param migrations The ordered array of migrations applicable to the store.
58
+ */
59
+ private upgradeStore;
60
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationManager = void 0;
4
+ /**
5
+ * An engine for applying a suite of `IMigration` objects to all records
6
+ * across targeted `DbSync` object stores.
7
+ */
8
+ class MigrationManager {
9
+ db;
10
+ /**
11
+ * Initializes the MigrationManager for a specific database instance.
12
+ *
13
+ * @internal
14
+ * @param db The `DbSync` instance used to traverse object stores and apply rewrites.
15
+ */
16
+ constructor(db) {
17
+ this.db = db;
18
+ } // db is DbSync instance
19
+ /**
20
+ * Iterates through a map of object stores and systematically applies their respective migrations.
21
+ *
22
+ * @param schemaMigrations A dictionary mapping store names to arrays of `IMigration` steps.
23
+ */
24
+ async runAll(schemaMigrations) {
25
+ for (const [storeName, migrations] of Object.entries(schemaMigrations)) {
26
+ await this.upgradeStore(storeName, migrations);
27
+ }
28
+ }
29
+ /**
30
+ * Sorts and attempts to apply a sequence of migrations to a single record in memory.
31
+ * Evaluates `storeVersion` to ensure migrations are only executed sequentially and exactly once.
32
+ *
33
+ * @param record The plain object to be upgraded.
34
+ * @param migrations The full list of potential migrations for the record's domain type.
35
+ * @returns The functionally upgraded record with an updated `storeVersion`.
36
+ */
37
+ static async upgradeRecord(record, migrations) {
38
+ const sortedMigrations = [...migrations].sort((a, b) => a.version - b.version);
39
+ for (const migration of sortedMigrations) {
40
+ const currentVersion = record.storeVersion || 0;
41
+ if (currentVersion < migration.version) {
42
+ await migration.upgrade(record);
43
+ record.storeVersion = migration.version;
44
+ }
45
+ }
46
+ return record;
47
+ }
48
+ /**
49
+ * Reads all records from a specific store, upgrades out-of-date entries,
50
+ * and atomically flushes the changed entries back within a single database transaction.
51
+ *
52
+ * @param storeName The name of the target object store.
53
+ * @param migrations The ordered array of migrations applicable to the store.
54
+ */
55
+ async upgradeStore(storeName, migrations) {
56
+ const allRecords = await this.db.findAll(storeName);
57
+ const tx = this.db.getTransaction();
58
+ for (const recordCurrent of allRecords) {
59
+ const recordNext = { ...recordCurrent };
60
+ await MigrationManager.upgradeRecord(recordNext, migrations);
61
+ if (recordNext.storeVersion !== recordCurrent.storeVersion) {
62
+ tx.put(storeName, recordNext);
63
+ }
64
+ }
65
+ await tx.commit();
66
+ }
67
+ }
68
+ exports.MigrationManager = MigrationManager;
69
+ //# sourceMappingURL=MigrationManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationManager.js","sourceRoot":"","sources":["../../src/internal/MigrationManager.ts"],"names":[],"mappings":";;;AA0BA;;;GAGG;AACH,MAAa,gBAAgB;IAOR;IANpB;;;;;OAKG;IACH,YAAoB,EAAO;QAAP,OAAE,GAAF,EAAE,CAAK;IAAG,CAAC,CAAC,wBAAwB;IAExD;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,gBAA8C;QAC1D,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAC/C,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAI,MAAW,EAAE,UAA2B;QAC5E,MAAM,gBAAgB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;QAC9E,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAA;YAC/C,IAAI,cAAc,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBAC/B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAA;YACxC,CAAC;QACF,CAAC;QACD,OAAO,MAAM,CAAA;IACd,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,UAAwB;QACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAA;QAEnC,KAAK,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,EAAE,GAAG,aAAa,EAAE,CAAA;YACvC,MAAM,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;YAE5D,IAAI,UAAU,CAAC,YAAY,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;gBAC5D,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YAC9B,CAAC;QACF,CAAC;QAED,MAAM,EAAE,CAAC,MAAM,EAAE,CAAA;IAClB,CAAC;CACD;AA9DD,4CA8DC"}
@@ -0,0 +1,20 @@
1
+ import type { DbSyncConfig } from "../DbSync.js";
2
+ import { DbTransaction } from "./DbTransaction.js";
3
+ import type { EventBus } from "./EventBus.js";
4
+ export declare class StorageManager {
5
+ private config;
6
+ private events;
7
+ private onSchemaChange;
8
+ db: IDBDatabase;
9
+ initted: boolean;
10
+ private dbName;
11
+ constructor(config: DbSyncConfig, events: EventBus, onSchemaChange: () => void);
12
+ private get schemaSignature();
13
+ getTransaction(): DbTransaction;
14
+ init(): Promise<void>;
15
+ executeTransaction(operations: any[]): Promise<void>;
16
+ get<T>(storeName: string, id: string | number): Promise<T | undefined>;
17
+ findAll<T>(storeName: string): Promise<T[]>;
18
+ clearAllStores(): Promise<void>;
19
+ dispose(): void;
20
+ }
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageManager = void 0;
4
+ const promiseWithResolvers_js_1 = require("../util/promiseWithResolvers.js");
5
+ const DbTransaction_js_1 = require("./DbTransaction.js");
6
+ class StorageManager {
7
+ config;
8
+ events;
9
+ onSchemaChange;
10
+ db;
11
+ initted = false;
12
+ dbName = "dbsync";
13
+ constructor(config, events, onSchemaChange) {
14
+ this.config = config;
15
+ this.events = events;
16
+ this.onSchemaChange = onSchemaChange;
17
+ }
18
+ get schemaSignature() {
19
+ const tables = Object.keys(this.config.tables)
20
+ .sort()
21
+ .map((table) => {
22
+ return {
23
+ table,
24
+ indexes: this.config.tables[table].indexes?.slice().sort() || [],
25
+ };
26
+ });
27
+ return JSON.stringify(tables);
28
+ }
29
+ getTransaction() {
30
+ return new DbTransaction_js_1.DbTransaction((operations) => this.executeTransaction(operations));
31
+ }
32
+ async init() {
33
+ const { promise, resolve, reject } = (0, promiseWithResolvers_js_1.promiseWithResolvers)();
34
+ const upgradeFn = (e) => {
35
+ const db = e.target.result;
36
+ Object.entries(this.config.tables).forEach(([tableName, config]) => {
37
+ if (!db.objectStoreNames.contains(tableName)) {
38
+ const store = db.createObjectStore(tableName, { keyPath: "id" });
39
+ if (config.indexes) {
40
+ config.indexes.forEach((idx) => store.createIndex(idx, idx, { unique: false }));
41
+ }
42
+ }
43
+ });
44
+ if (!db.objectStoreNames.contains("dirtyQueue"))
45
+ db.createObjectStore("dirtyQueue", { keyPath: "id" });
46
+ if (!db.objectStoreNames.contains("deletedQueue"))
47
+ db.createObjectStore("deletedQueue", { keyPath: "id" });
48
+ };
49
+ let localDbVersion = this.config.version;
50
+ if (localDbVersion === undefined) {
51
+ const storedVersion = Number(localStorage.getItem("dbsync-db-version") || "1");
52
+ const currentSignature = this.schemaSignature;
53
+ const storedSignature = localStorage.getItem("dbsync-schema-signature");
54
+ if (storedSignature !== currentSignature) {
55
+ localDbVersion = storedVersion + 1;
56
+ localStorage.setItem("dbsync-schema-signature", currentSignature);
57
+ localStorage.setItem("dbsync-db-version", String(localDbVersion));
58
+ }
59
+ else {
60
+ localDbVersion = storedVersion;
61
+ }
62
+ }
63
+ const req = indexedDB.open(this.dbName, localDbVersion);
64
+ req.onupgradeneeded = upgradeFn;
65
+ req.onsuccess = (e) => {
66
+ this.db = e.target.result;
67
+ this.db.onversionchange = () => this.onSchemaChange();
68
+ this.initted = true;
69
+ resolve();
70
+ };
71
+ req.onerror = () => reject(req.error);
72
+ return promise;
73
+ }
74
+ async executeTransaction(operations) {
75
+ const storeNames = Array.from(new Set(operations.map((o) => o.storeName))).concat([
76
+ "dirtyQueue",
77
+ "deletedQueue",
78
+ ]);
79
+ const { promise, resolve, reject } = (0, promiseWithResolvers_js_1.promiseWithResolvers)();
80
+ const tx = this.db.transaction(storeNames, "readwrite");
81
+ tx.oncomplete = () => {
82
+ this.events.notifySubscribers(storeNames);
83
+ resolve();
84
+ };
85
+ tx.onerror = () => reject(tx.error);
86
+ operations.forEach((op) => {
87
+ const store = tx.objectStore(op.storeName);
88
+ const recordId = op.key || op.value?.id;
89
+ if (op.type === "put" || op.type === "add") {
90
+ store.put(op.value);
91
+ if (op.storeName !== "dirtyQueue" && op.storeName !== "deletedQueue") {
92
+ tx.objectStore("dirtyQueue").put({
93
+ id: recordId,
94
+ table: op.storeName,
95
+ payload: op.value,
96
+ timestamp: Date.now(),
97
+ });
98
+ }
99
+ }
100
+ else if (op.type === "delete") {
101
+ store.delete(recordId);
102
+ if (op.storeName !== "dirtyQueue" && op.storeName !== "deletedQueue") {
103
+ tx.objectStore("deletedQueue").put({
104
+ id: recordId,
105
+ table: op.storeName,
106
+ timestamp: Date.now(),
107
+ });
108
+ tx.objectStore("dirtyQueue").delete(recordId);
109
+ }
110
+ }
111
+ else if (op.type === "clear") {
112
+ store.clear();
113
+ }
114
+ });
115
+ return promise;
116
+ }
117
+ async get(storeName, id) {
118
+ const { promise, resolve, reject } = (0, promiseWithResolvers_js_1.promiseWithResolvers)();
119
+ const tx = this.db.transaction(storeName, "readonly");
120
+ const req = tx.objectStore(storeName).get(id);
121
+ req.onsuccess = () => resolve(req.result);
122
+ req.onerror = () => reject(req.error);
123
+ return promise;
124
+ }
125
+ async findAll(storeName) {
126
+ const { promise, resolve, reject } = (0, promiseWithResolvers_js_1.promiseWithResolvers)();
127
+ const tx = this.db.transaction(storeName, "readonly");
128
+ const req = tx.objectStore(storeName).getAll();
129
+ req.onsuccess = () => resolve(req.result);
130
+ req.onerror = () => reject(req.error);
131
+ return promise;
132
+ }
133
+ async clearAllStores() {
134
+ const tx = this.db.transaction(Array.from(this.db.objectStoreNames), "readwrite");
135
+ Array.from(this.db.objectStoreNames).forEach((name) => tx.objectStore(name).clear());
136
+ return new Promise((resolve, reject) => {
137
+ tx.oncomplete = () => resolve();
138
+ tx.onerror = () => reject(tx.error);
139
+ });
140
+ }
141
+ dispose() {
142
+ if (this.db) {
143
+ this.db.close();
144
+ }
145
+ }
146
+ }
147
+ exports.StorageManager = StorageManager;
148
+ //# sourceMappingURL=StorageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/internal/StorageManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { BackendAdapter } from "../adapters/types.js";
2
+ import type { DbSyncConfig } from "../DbSync.js";
3
+ import type { AuthManager } from "./AuthManager.js";
4
+ import type { EventBus } from "./EventBus.js";
5
+ import type { StorageManager } from "./StorageManager.js";
6
+ export declare class SyncEngine {
7
+ private config;
8
+ private syncInterval;
9
+ private events;
10
+ private storage;
11
+ private auth;
12
+ private adapter;
13
+ private onSchemaChange;
14
+ private syncSetInterval;
15
+ constructor(config: DbSyncConfig, syncInterval: number, events: EventBus, storage: StorageManager, auth: AuthManager, adapter: BackendAdapter, onSchemaChange: () => void);
16
+ enable(): void;
17
+ disable(): void;
18
+ get isEnabled(): boolean;
19
+ get isLive(): boolean;
20
+ waitForLive(): Promise<void>;
21
+ triggerSync(): Promise<void>;
22
+ private sync;
23
+ private performSync;
24
+ private get schemaSignature();
25
+ private syncPull;
26
+ private syncPush;
27
+ }