@slimr/dbsync 0.0.8 → 0.0.9
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/README.md +5 -4
- package/cjs/DbSync.d.ts +9 -5
- package/cjs/DbSync.js +8 -8
- package/cjs/DbSync.js.map +1 -1
- package/cjs/index.d.ts +1 -0
- package/cjs/internal/MigrationManager.d.ts +3 -3
- package/cjs/internal/MigrationManager.js.map +1 -1
- package/cjs/internal/StorageManager.d.ts +8 -1
- package/cjs/internal/StorageManager.js +22 -5
- package/cjs/internal/StorageManager.js.map +1 -1
- package/cjs/useDbQuery.d.ts +7 -2
- package/cjs/useDbQuery.js +10 -6
- package/cjs/useDbQuery.js.map +1 -1
- package/esm/DbSync.d.ts +9 -5
- package/esm/DbSync.js +8 -8
- package/esm/DbSync.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/internal/MigrationManager.d.ts +3 -3
- package/esm/internal/MigrationManager.js.map +1 -1
- package/esm/internal/StorageManager.d.ts +8 -1
- package/esm/internal/StorageManager.js +22 -5
- package/esm/internal/StorageManager.js.map +1 -1
- package/esm/useDbQuery.d.ts +7 -2
- package/esm/useDbQuery.js +10 -6
- package/esm/useDbQuery.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ const dbAdapter = process.env.TEST ? new LocalAdapter() : new RestAdapter({ url:
|
|
|
34
34
|
const db = new DbSync({
|
|
35
35
|
adapter: dbAdapter,
|
|
36
36
|
tables: {
|
|
37
|
-
posts: { indexes: ['userId', 'updatedAt'] },
|
|
37
|
+
posts: { indexes: ['userId', 'updatedAt'], beforeWrite: () => ({ category: 0 }) },
|
|
38
38
|
users: { indexes: ['email'] }
|
|
39
39
|
}
|
|
40
40
|
});
|
|
@@ -116,7 +116,7 @@ class Tx {
|
|
|
116
116
|
posts = new DbTxRepository<Post>(this.tx, 'posts');
|
|
117
117
|
users = new DbTxRepository<User>(this.tx, 'users');
|
|
118
118
|
|
|
119
|
-
commit =
|
|
119
|
+
commit = this.tx.commit.bind(this.tx);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
const tx = new Tx();
|
|
@@ -152,9 +152,10 @@ import { useDbQuery } from '@slimr/dbsync/react';
|
|
|
152
152
|
|
|
153
153
|
function PostList({ db }) {
|
|
154
154
|
// Re-renders automatically whenever the 'posts' table changes!
|
|
155
|
-
const posts = useDbQuery(db, 'posts', () => db.findAll('posts'));
|
|
155
|
+
const { value: posts, loading } = useDbQuery(db, 'posts', () => db.findAll('posts'));
|
|
156
156
|
|
|
157
|
-
if (
|
|
157
|
+
if (loading) return <Spinner />;
|
|
158
|
+
if (!posts) return <p>No posts found.</p>;
|
|
158
159
|
return <ul>{posts.map(p => <li key={p.id}>{p.content}</li>)}</ul>;
|
|
159
160
|
}
|
|
160
161
|
```
|
package/cjs/DbSync.d.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import type { BackendAdapter } from "./adapters/types.js";
|
|
2
2
|
import { type SyncState } from "./internal/EventBus.js";
|
|
3
3
|
import { StorageManager } from "./internal/StorageManager.js";
|
|
4
|
+
export interface DbSyncTableConfig {
|
|
5
|
+
/** Optional index names to create for the store. */
|
|
6
|
+
indexes?: string[];
|
|
7
|
+
/** Optional callback that fills in default fields before write operations. */
|
|
8
|
+
beforeWrite?: (value: any) => any;
|
|
9
|
+
}
|
|
4
10
|
export interface DbSyncConfig {
|
|
5
11
|
/** The backend adapter used for authentication and synchronization. */
|
|
6
12
|
adapter: BackendAdapter;
|
|
7
13
|
/** Optional fixed IndexedDB version. */
|
|
8
14
|
version?: number;
|
|
9
15
|
/** The object stores and their index definitions. */
|
|
10
|
-
tables: Record<string,
|
|
11
|
-
indexes?: string[];
|
|
12
|
-
}>;
|
|
16
|
+
tables: Record<string, DbSyncTableConfig>;
|
|
13
17
|
}
|
|
14
18
|
export type { SyncState };
|
|
15
19
|
/**
|
|
@@ -48,12 +52,12 @@ export declare class DbSync {
|
|
|
48
52
|
findAll<T>(storeName: string): Promise<T[]>;
|
|
49
53
|
/** Inserts a new record into the given object store. */
|
|
50
54
|
add<T>(storeName: string, value: any, key?: string | number): Promise<T>;
|
|
55
|
+
/** Partially updates an existing record in the given object store. */
|
|
56
|
+
patch<T>(storeName: string, value: Partial<T>, key?: string | number): Promise<T>;
|
|
51
57
|
/** Upserts a record into the given object store. */
|
|
52
58
|
put<T>(storeName: string, value: any, key?: string | number): Promise<T>;
|
|
53
59
|
/** Deletes a record from the given object store. */
|
|
54
60
|
delete(storeName: string, key: string | number): Promise<void>;
|
|
55
|
-
/** Partially updates an existing record in the given object store. */
|
|
56
|
-
patch<T>(storeName: string, value: Partial<T>, key?: string | number): Promise<T>;
|
|
57
61
|
/** Clears all records from the given object store. */
|
|
58
62
|
clear(storeName: string): Promise<void>;
|
|
59
63
|
/** Subscribes to store update notifications. */
|
package/cjs/DbSync.js
CHANGED
|
@@ -64,23 +64,23 @@ class DbSync {
|
|
|
64
64
|
}
|
|
65
65
|
/** Inserts a new record into the given object store. */
|
|
66
66
|
async add(storeName, value, key) {
|
|
67
|
-
await this.storage.executeTransaction([{ type: "add", storeName, value, key }]);
|
|
67
|
+
const [executedWrite] = await this.storage.executeTransaction([{ type: "add", storeName, value, key }]);
|
|
68
|
+
return executedWrite?.value;
|
|
69
|
+
}
|
|
70
|
+
/** Partially updates an existing record in the given object store. */
|
|
71
|
+
async patch(storeName, value, key) {
|
|
72
|
+
await this.storage.executeTransaction([{ type: "patch", storeName, value, key }]);
|
|
68
73
|
return value;
|
|
69
74
|
}
|
|
70
75
|
/** Upserts a record into the given object store. */
|
|
71
76
|
async put(storeName, value, key) {
|
|
72
|
-
await this.storage.executeTransaction([{ type: "put", storeName, value, key }]);
|
|
73
|
-
return value;
|
|
77
|
+
const [executedWrite] = await this.storage.executeTransaction([{ type: "put", storeName, value, key }]);
|
|
78
|
+
return executedWrite?.value;
|
|
74
79
|
}
|
|
75
80
|
/** Deletes a record from the given object store. */
|
|
76
81
|
async delete(storeName, key) {
|
|
77
82
|
await this.storage.executeTransaction([{ type: "delete", storeName, key }]);
|
|
78
83
|
}
|
|
79
|
-
/** Partially updates an existing record in the given object store. */
|
|
80
|
-
async patch(storeName, value, key) {
|
|
81
|
-
await this.storage.executeTransaction([{ type: "patch", storeName, value, key }]);
|
|
82
|
-
return value;
|
|
83
|
-
}
|
|
84
84
|
/** Clears all records from the given object store. */
|
|
85
85
|
async clear(storeName) {
|
|
86
86
|
await this.storage.executeTransaction([{ type: "clear", storeName }]);
|
package/cjs/DbSync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbSync.js","sourceRoot":"","sources":["../src/DbSync.ts"],"names":[],"mappings":";;;AACA,8DAAuD;AACvD,wDAAiE;AACjE,oEAA6D;AAC7D,4DAAqD;AACrD,kDAA6C;
|
|
1
|
+
{"version":3,"file":"DbSync.js","sourceRoot":"","sources":["../src/DbSync.ts"],"names":[],"mappings":"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"}
|
package/cjs/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Migrations allow existing offline data to be selectively upgraded rather than wiped
|
|
4
4
|
* when backend domain modeling changes.
|
|
5
5
|
*/
|
|
6
|
-
export interface
|
|
6
|
+
export interface MigrationManagerMigration<T = any> {
|
|
7
7
|
/**
|
|
8
8
|
* An ascending integer determining execution order. A record currently at `storeVersion: 1`
|
|
9
9
|
* will only trigger migrations where `version >= 2`.
|
|
@@ -39,7 +39,7 @@ export declare class MigrationManager {
|
|
|
39
39
|
*
|
|
40
40
|
* @param schemaMigrations A dictionary mapping store names to arrays of `IMigration` steps.
|
|
41
41
|
*/
|
|
42
|
-
runAll(schemaMigrations: Record<string,
|
|
42
|
+
runAll(schemaMigrations: Record<string, MigrationManagerMigration[]>): Promise<void>;
|
|
43
43
|
/**
|
|
44
44
|
* Sorts and attempts to apply a sequence of migrations to a single record in memory.
|
|
45
45
|
* Evaluates `storeVersion` to ensure migrations are only executed sequentially and exactly once.
|
|
@@ -48,7 +48,7 @@ export declare class MigrationManager {
|
|
|
48
48
|
* @param migrations The full list of potential migrations for the record's domain type.
|
|
49
49
|
* @returns The functionally upgraded record with an updated `storeVersion`.
|
|
50
50
|
*/
|
|
51
|
-
static upgradeRecord<T>(record: any, migrations:
|
|
51
|
+
static upgradeRecord<T>(record: any, migrations: MigrationManagerMigration<T>[]): Promise<any>;
|
|
52
52
|
/**
|
|
53
53
|
* Reads all records from a specific store, upgrades out-of-date entries,
|
|
54
54
|
* and atomically flushes the changed entries back within a single database transaction.
|
|
@@ -1 +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,
|
|
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,gBAA6D;QACzE,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,UAA0C;QAC3F,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,UAAuC;QACpF,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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { DbSyncConfig } from "../DbSync.js";
|
|
2
2
|
import { DbTransaction } from "./DbTransaction.js";
|
|
3
3
|
import type { EventBus } from "./EventBus.js";
|
|
4
|
+
type ExecutedWrite = {
|
|
5
|
+
type: string;
|
|
6
|
+
storeName: string;
|
|
7
|
+
value?: any;
|
|
8
|
+
key?: string | number;
|
|
9
|
+
};
|
|
4
10
|
/**
|
|
5
11
|
* Owns IndexedDB initialization, transactions, and record access.
|
|
6
12
|
*/
|
|
@@ -29,7 +35,7 @@ export declare class StorageManager {
|
|
|
29
35
|
/** Opens IndexedDB and creates the configured stores when needed. */
|
|
30
36
|
init(): Promise<void>;
|
|
31
37
|
/** Executes a batch of writes inside a single IndexedDB transaction. */
|
|
32
|
-
executeTransaction(operations: any[]): Promise<
|
|
38
|
+
executeTransaction(operations: any[]): Promise<ExecutedWrite[]>;
|
|
33
39
|
/** Reads a typed record by primary key from the requested store. */
|
|
34
40
|
get<T>(storeName: string, id: string | number): Promise<T | undefined>;
|
|
35
41
|
/** Returns every record from the requested store. */
|
|
@@ -39,3 +45,4 @@ export declare class StorageManager {
|
|
|
39
45
|
/** Closes the underlying IndexedDB connection. */
|
|
40
46
|
dispose(): void;
|
|
41
47
|
}
|
|
48
|
+
export {};
|
|
@@ -42,7 +42,9 @@ class StorageManager {
|
|
|
42
42
|
}
|
|
43
43
|
/** Creates a transaction wrapper used by the sync engine and public facade. */
|
|
44
44
|
getTransaction() {
|
|
45
|
-
return new DbTransaction_js_1.DbTransaction((operations) =>
|
|
45
|
+
return new DbTransaction_js_1.DbTransaction(async (operations) => {
|
|
46
|
+
await this.executeTransaction(operations);
|
|
47
|
+
});
|
|
46
48
|
}
|
|
47
49
|
/** Opens IndexedDB and creates the configured stores when needed. */
|
|
48
50
|
async init() {
|
|
@@ -93,6 +95,7 @@ class StorageManager {
|
|
|
93
95
|
"dirtyQueue",
|
|
94
96
|
"deletedQueue",
|
|
95
97
|
]);
|
|
98
|
+
const executedWrites = [];
|
|
96
99
|
// Pre-fetch objects for patch operations using a separate read-only transaction.
|
|
97
100
|
// A standard IndexedDB transaction auto-commits if we await inside it, so we must
|
|
98
101
|
// gather everything into memory synchronously before opening the main readwrite transaction.
|
|
@@ -119,19 +122,33 @@ class StorageManager {
|
|
|
119
122
|
const tx = this.db.transaction(storeNames, "readwrite");
|
|
120
123
|
tx.oncomplete = () => {
|
|
121
124
|
this.events.notifySubscribers(storeNames);
|
|
122
|
-
resolve();
|
|
125
|
+
resolve(executedWrites);
|
|
123
126
|
};
|
|
124
127
|
tx.onerror = () => reject(tx.error);
|
|
125
128
|
operations.forEach((op) => {
|
|
126
129
|
const store = tx.objectStore(op.storeName);
|
|
127
|
-
|
|
130
|
+
let payloadToWrite = op.value;
|
|
131
|
+
let recordId = op.key || op.value?.id;
|
|
128
132
|
if (op.type === "put" || op.type === "add" || op.type === "patch") {
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
if (op.type === "put" || op.type === "add") {
|
|
134
|
+
const beforeWrite = this.config.tables[op.storeName]?.beforeWrite;
|
|
135
|
+
if (beforeWrite) {
|
|
136
|
+
payloadToWrite = beforeWrite(payloadToWrite);
|
|
137
|
+
}
|
|
138
|
+
recordId = op.key || payloadToWrite?.id;
|
|
139
|
+
}
|
|
140
|
+
else if (op.type === "patch") {
|
|
131
141
|
const existingRecord = patchRecords[`${op.storeName}-${recordId}`];
|
|
132
142
|
payloadToWrite = { ...existingRecord, ...op.value };
|
|
143
|
+
recordId = op.key || payloadToWrite?.id;
|
|
133
144
|
}
|
|
134
145
|
store.put(payloadToWrite);
|
|
146
|
+
executedWrites.push({
|
|
147
|
+
type: op.type,
|
|
148
|
+
storeName: op.storeName,
|
|
149
|
+
value: payloadToWrite,
|
|
150
|
+
key: recordId,
|
|
151
|
+
});
|
|
135
152
|
if (op.storeName !== "dirtyQueue" && op.storeName !== "deletedQueue") {
|
|
136
153
|
tx.objectStore("dirtyQueue").put({
|
|
137
154
|
id: recordId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/internal/StorageManager.ts"],"names":[],"mappings":";;;AACA,6EAAsE;AACtE,yDAAkD;
|
|
1
|
+
{"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/internal/StorageManager.ts"],"names":[],"mappings":"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"}
|
package/cjs/useDbQuery.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { DbSync } from "./DbSync.js";
|
|
2
|
+
type DbQueryState<T> = {
|
|
3
|
+
value: T | null;
|
|
4
|
+
loading: boolean;
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* A React hook that subscribes to one or more `DbSync` tables and natively
|
|
4
8
|
* re-evaluates a strictly typed query function whenever local mutations or
|
|
@@ -8,6 +12,7 @@ import type { DbSync } from "./DbSync.js";
|
|
|
8
12
|
* @param stores A string or array of strings containing the table names the query function reads from.
|
|
9
13
|
* @param queryFn An asynchronous function invoked to pull data from IndexedDB.
|
|
10
14
|
* @param deps A standard React dependency array for parameters referenced inside the `queryFn`.
|
|
11
|
-
* @returns
|
|
15
|
+
* @returns An object containing the latest query result and whether the initial fetch is still pending.
|
|
12
16
|
*/
|
|
13
|
-
export declare function useDbQuery<T>(db: DbSync, stores: string | string[], queryFn: () => Promise<T>, deps?: any[]): T
|
|
17
|
+
export declare function useDbQuery<T>(db: DbSync, stores: string | string[], queryFn: () => Promise<T>, deps?: any[]): DbQueryState<T>;
|
|
18
|
+
export {};
|
package/cjs/useDbQuery.js
CHANGED
|
@@ -11,11 +11,11 @@ const react_1 = require("react");
|
|
|
11
11
|
* @param stores A string or array of strings containing the table names the query function reads from.
|
|
12
12
|
* @param queryFn An asynchronous function invoked to pull data from IndexedDB.
|
|
13
13
|
* @param deps A standard React dependency array for parameters referenced inside the `queryFn`.
|
|
14
|
-
* @returns
|
|
14
|
+
* @returns An object containing the latest query result and whether the initial fetch is still pending.
|
|
15
15
|
*/
|
|
16
16
|
function useDbQuery(db, stores, queryFn, deps = []) {
|
|
17
|
-
/** Holds the latest query result. */
|
|
18
|
-
const [
|
|
17
|
+
/** Holds the latest query result and loading state. */
|
|
18
|
+
const [state, setState] = (0, react_1.useState)({ value: null, loading: true });
|
|
19
19
|
/** Normalizes the store input into an array for matching. */
|
|
20
20
|
const storeArray = Array.isArray(stores) ? stores : [stores];
|
|
21
21
|
(0, react_1.useEffect)(() => {
|
|
@@ -34,11 +34,15 @@ function useDbQuery(db, stores, queryFn, deps = []) {
|
|
|
34
34
|
}
|
|
35
35
|
try {
|
|
36
36
|
const result = await queryFn();
|
|
37
|
-
if (isMounted)
|
|
38
|
-
|
|
37
|
+
if (isMounted) {
|
|
38
|
+
setState({ value: result ?? null, loading: false });
|
|
39
|
+
}
|
|
39
40
|
}
|
|
40
41
|
catch (err) {
|
|
41
42
|
console.error("[dbsync useDbQuery]: Query failed", err);
|
|
43
|
+
if (isMounted) {
|
|
44
|
+
setState((current) => ({ ...current, loading: false }));
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
47
|
};
|
|
44
48
|
// Initial fetch
|
|
@@ -56,6 +60,6 @@ function useDbQuery(db, stores, queryFn, deps = []) {
|
|
|
56
60
|
};
|
|
57
61
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
62
|
}, [db, JSON.stringify(storeArray), ...deps]);
|
|
59
|
-
return
|
|
63
|
+
return state;
|
|
60
64
|
}
|
|
61
65
|
//# sourceMappingURL=useDbQuery.js.map
|
package/cjs/useDbQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDbQuery.js","sourceRoot":"","sources":["../src/useDbQuery.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"useDbQuery.js","sourceRoot":"","sources":["../src/useDbQuery.ts"],"names":[],"mappings":";;AAmBA,gCA0DC;AA7ED,iCAA2C;AAQ3C;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CACzB,EAAU,EACV,MAAyB,EACzB,OAAyB,EACzB,OAAc,EAAE;IAEhB,uDAAuD;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,6DAA6D;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAE5D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACd,IAAI,SAAS,GAAG,IAAI,CAAA;QAEpB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;gBACjB,oDAAoD;gBACpD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBACnC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;wBAC9B,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;4BAC9B,aAAa,CAAC,KAAK,CAAC,CAAA;4BACpB,OAAO,EAAE,CAAA;wBACV,CAAC;oBACF,CAAC,EAAE,EAAE,CAAC,CAAA;gBACP,CAAC,CAAC,CAAA;YACH,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;gBAC9B,IAAI,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;gBACpD,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;gBACvD,IAAI,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;gBACxD,CAAC;YACF,CAAC;QACF,CAAC,CAAA;QAED,gBAAgB;QAChB,SAAS,EAAE,CAAA;QAEX,+BAA+B;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,EAAE;YAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YACtE,IAAI,YAAY,EAAE,CAAC;gBAClB,SAAS,EAAE,CAAA;YACZ,CAAC;QACF,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACX,SAAS,GAAG,KAAK,CAAA;YACjB,GAAG,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC,CAAA;QACD,uDAAuD;IACxD,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAE7C,OAAO,KAAK,CAAA;AACb,CAAC"}
|
package/esm/DbSync.d.ts
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import type { BackendAdapter } from "./adapters/types.js";
|
|
2
2
|
import { type SyncState } from "./internal/EventBus.js";
|
|
3
3
|
import { StorageManager } from "./internal/StorageManager.js";
|
|
4
|
+
export interface DbSyncTableConfig {
|
|
5
|
+
/** Optional index names to create for the store. */
|
|
6
|
+
indexes?: string[];
|
|
7
|
+
/** Optional callback that fills in default fields before write operations. */
|
|
8
|
+
beforeWrite?: (value: any) => any;
|
|
9
|
+
}
|
|
4
10
|
export interface DbSyncConfig {
|
|
5
11
|
/** The backend adapter used for authentication and synchronization. */
|
|
6
12
|
adapter: BackendAdapter;
|
|
7
13
|
/** Optional fixed IndexedDB version. */
|
|
8
14
|
version?: number;
|
|
9
15
|
/** The object stores and their index definitions. */
|
|
10
|
-
tables: Record<string,
|
|
11
|
-
indexes?: string[];
|
|
12
|
-
}>;
|
|
16
|
+
tables: Record<string, DbSyncTableConfig>;
|
|
13
17
|
}
|
|
14
18
|
export type { SyncState };
|
|
15
19
|
/**
|
|
@@ -48,12 +52,12 @@ export declare class DbSync {
|
|
|
48
52
|
findAll<T>(storeName: string): Promise<T[]>;
|
|
49
53
|
/** Inserts a new record into the given object store. */
|
|
50
54
|
add<T>(storeName: string, value: any, key?: string | number): Promise<T>;
|
|
55
|
+
/** Partially updates an existing record in the given object store. */
|
|
56
|
+
patch<T>(storeName: string, value: Partial<T>, key?: string | number): Promise<T>;
|
|
51
57
|
/** Upserts a record into the given object store. */
|
|
52
58
|
put<T>(storeName: string, value: any, key?: string | number): Promise<T>;
|
|
53
59
|
/** Deletes a record from the given object store. */
|
|
54
60
|
delete(storeName: string, key: string | number): Promise<void>;
|
|
55
|
-
/** Partially updates an existing record in the given object store. */
|
|
56
|
-
patch<T>(storeName: string, value: Partial<T>, key?: string | number): Promise<T>;
|
|
57
61
|
/** Clears all records from the given object store. */
|
|
58
62
|
clear(storeName: string): Promise<void>;
|
|
59
63
|
/** Subscribes to store update notifications. */
|
package/esm/DbSync.js
CHANGED
|
@@ -61,23 +61,23 @@ export class DbSync {
|
|
|
61
61
|
}
|
|
62
62
|
/** Inserts a new record into the given object store. */
|
|
63
63
|
async add(storeName, value, key) {
|
|
64
|
-
await this.storage.executeTransaction([{ type: "add", storeName, value, key }]);
|
|
64
|
+
const [executedWrite] = await this.storage.executeTransaction([{ type: "add", storeName, value, key }]);
|
|
65
|
+
return executedWrite?.value;
|
|
66
|
+
}
|
|
67
|
+
/** Partially updates an existing record in the given object store. */
|
|
68
|
+
async patch(storeName, value, key) {
|
|
69
|
+
await this.storage.executeTransaction([{ type: "patch", storeName, value, key }]);
|
|
65
70
|
return value;
|
|
66
71
|
}
|
|
67
72
|
/** Upserts a record into the given object store. */
|
|
68
73
|
async put(storeName, value, key) {
|
|
69
|
-
await this.storage.executeTransaction([{ type: "put", storeName, value, key }]);
|
|
70
|
-
return value;
|
|
74
|
+
const [executedWrite] = await this.storage.executeTransaction([{ type: "put", storeName, value, key }]);
|
|
75
|
+
return executedWrite?.value;
|
|
71
76
|
}
|
|
72
77
|
/** Deletes a record from the given object store. */
|
|
73
78
|
async delete(storeName, key) {
|
|
74
79
|
await this.storage.executeTransaction([{ type: "delete", storeName, key }]);
|
|
75
80
|
}
|
|
76
|
-
/** Partially updates an existing record in the given object store. */
|
|
77
|
-
async patch(storeName, value, key) {
|
|
78
|
-
await this.storage.executeTransaction([{ type: "patch", storeName, value, key }]);
|
|
79
|
-
return value;
|
|
80
|
-
}
|
|
81
81
|
/** Clears all records from the given object store. */
|
|
82
82
|
async clear(storeName) {
|
|
83
83
|
await this.storage.executeTransaction([{ type: "clear", storeName }]);
|
package/esm/DbSync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbSync.js","sourceRoot":"","sources":["../src/DbSync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAkB,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"DbSync.js","sourceRoot":"","sources":["../src/DbSync.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Migrations allow existing offline data to be selectively upgraded rather than wiped
|
|
4
4
|
* when backend domain modeling changes.
|
|
5
5
|
*/
|
|
6
|
-
export interface
|
|
6
|
+
export interface MigrationManagerMigration<T = any> {
|
|
7
7
|
/**
|
|
8
8
|
* An ascending integer determining execution order. A record currently at `storeVersion: 1`
|
|
9
9
|
* will only trigger migrations where `version >= 2`.
|
|
@@ -39,7 +39,7 @@ export declare class MigrationManager {
|
|
|
39
39
|
*
|
|
40
40
|
* @param schemaMigrations A dictionary mapping store names to arrays of `IMigration` steps.
|
|
41
41
|
*/
|
|
42
|
-
runAll(schemaMigrations: Record<string,
|
|
42
|
+
runAll(schemaMigrations: Record<string, MigrationManagerMigration[]>): Promise<void>;
|
|
43
43
|
/**
|
|
44
44
|
* Sorts and attempts to apply a sequence of migrations to a single record in memory.
|
|
45
45
|
* Evaluates `storeVersion` to ensure migrations are only executed sequentially and exactly once.
|
|
@@ -48,7 +48,7 @@ export declare class MigrationManager {
|
|
|
48
48
|
* @param migrations The full list of potential migrations for the record's domain type.
|
|
49
49
|
* @returns The functionally upgraded record with an updated `storeVersion`.
|
|
50
50
|
*/
|
|
51
|
-
static upgradeRecord<T>(record: any, migrations:
|
|
51
|
+
static upgradeRecord<T>(record: any, migrations: MigrationManagerMigration<T>[]): Promise<any>;
|
|
52
52
|
/**
|
|
53
53
|
* Reads all records from a specific store, upgrades out-of-date entries,
|
|
54
54
|
* and atomically flushes the changed entries back within a single database transaction.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationManager.js","sourceRoot":"","sources":["../../src/internal/MigrationManager.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAOR;IANpB;;;;;OAKG;IACH,YAAoB,EAAO;QAAP,OAAE,GAAF,EAAE,CAAK;IAAG,CAAC,CAAC,wBAAwB;IAExD;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"MigrationManager.js","sourceRoot":"","sources":["../../src/internal/MigrationManager.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAOR;IANpB;;;;;OAKG;IACH,YAAoB,EAAO;QAAP,OAAE,GAAF,EAAE,CAAK;IAAG,CAAC,CAAC,wBAAwB;IAExD;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,gBAA6D;QACzE,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,UAA0C;QAC3F,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,UAAuC;QACpF,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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { DbSyncConfig } from "../DbSync.js";
|
|
2
2
|
import { DbTransaction } from "./DbTransaction.js";
|
|
3
3
|
import type { EventBus } from "./EventBus.js";
|
|
4
|
+
type ExecutedWrite = {
|
|
5
|
+
type: string;
|
|
6
|
+
storeName: string;
|
|
7
|
+
value?: any;
|
|
8
|
+
key?: string | number;
|
|
9
|
+
};
|
|
4
10
|
/**
|
|
5
11
|
* Owns IndexedDB initialization, transactions, and record access.
|
|
6
12
|
*/
|
|
@@ -29,7 +35,7 @@ export declare class StorageManager {
|
|
|
29
35
|
/** Opens IndexedDB and creates the configured stores when needed. */
|
|
30
36
|
init(): Promise<void>;
|
|
31
37
|
/** Executes a batch of writes inside a single IndexedDB transaction. */
|
|
32
|
-
executeTransaction(operations: any[]): Promise<
|
|
38
|
+
executeTransaction(operations: any[]): Promise<ExecutedWrite[]>;
|
|
33
39
|
/** Reads a typed record by primary key from the requested store. */
|
|
34
40
|
get<T>(storeName: string, id: string | number): Promise<T | undefined>;
|
|
35
41
|
/** Returns every record from the requested store. */
|
|
@@ -39,3 +45,4 @@ export declare class StorageManager {
|
|
|
39
45
|
/** Closes the underlying IndexedDB connection. */
|
|
40
46
|
dispose(): void;
|
|
41
47
|
}
|
|
48
|
+
export {};
|
|
@@ -39,7 +39,9 @@ export class StorageManager {
|
|
|
39
39
|
}
|
|
40
40
|
/** Creates a transaction wrapper used by the sync engine and public facade. */
|
|
41
41
|
getTransaction() {
|
|
42
|
-
return new DbTransaction((operations) =>
|
|
42
|
+
return new DbTransaction(async (operations) => {
|
|
43
|
+
await this.executeTransaction(operations);
|
|
44
|
+
});
|
|
43
45
|
}
|
|
44
46
|
/** Opens IndexedDB and creates the configured stores when needed. */
|
|
45
47
|
async init() {
|
|
@@ -90,6 +92,7 @@ export class StorageManager {
|
|
|
90
92
|
"dirtyQueue",
|
|
91
93
|
"deletedQueue",
|
|
92
94
|
]);
|
|
95
|
+
const executedWrites = [];
|
|
93
96
|
// Pre-fetch objects for patch operations using a separate read-only transaction.
|
|
94
97
|
// A standard IndexedDB transaction auto-commits if we await inside it, so we must
|
|
95
98
|
// gather everything into memory synchronously before opening the main readwrite transaction.
|
|
@@ -116,19 +119,33 @@ export class StorageManager {
|
|
|
116
119
|
const tx = this.db.transaction(storeNames, "readwrite");
|
|
117
120
|
tx.oncomplete = () => {
|
|
118
121
|
this.events.notifySubscribers(storeNames);
|
|
119
|
-
resolve();
|
|
122
|
+
resolve(executedWrites);
|
|
120
123
|
};
|
|
121
124
|
tx.onerror = () => reject(tx.error);
|
|
122
125
|
operations.forEach((op) => {
|
|
123
126
|
const store = tx.objectStore(op.storeName);
|
|
124
|
-
|
|
127
|
+
let payloadToWrite = op.value;
|
|
128
|
+
let recordId = op.key || op.value?.id;
|
|
125
129
|
if (op.type === "put" || op.type === "add" || op.type === "patch") {
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
if (op.type === "put" || op.type === "add") {
|
|
131
|
+
const beforeWrite = this.config.tables[op.storeName]?.beforeWrite;
|
|
132
|
+
if (beforeWrite) {
|
|
133
|
+
payloadToWrite = beforeWrite(payloadToWrite);
|
|
134
|
+
}
|
|
135
|
+
recordId = op.key || payloadToWrite?.id;
|
|
136
|
+
}
|
|
137
|
+
else if (op.type === "patch") {
|
|
128
138
|
const existingRecord = patchRecords[`${op.storeName}-${recordId}`];
|
|
129
139
|
payloadToWrite = { ...existingRecord, ...op.value };
|
|
140
|
+
recordId = op.key || payloadToWrite?.id;
|
|
130
141
|
}
|
|
131
142
|
store.put(payloadToWrite);
|
|
143
|
+
executedWrites.push({
|
|
144
|
+
type: op.type,
|
|
145
|
+
storeName: op.storeName,
|
|
146
|
+
value: payloadToWrite,
|
|
147
|
+
key: recordId,
|
|
148
|
+
});
|
|
132
149
|
if (op.storeName !== "dirtyQueue" && op.storeName !== "deletedQueue") {
|
|
133
150
|
tx.objectStore("dirtyQueue").put({
|
|
134
151
|
id: recordId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/internal/StorageManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/internal/StorageManager.ts"],"names":[],"mappings":"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"}
|
package/esm/useDbQuery.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { DbSync } from "./DbSync.js";
|
|
2
|
+
type DbQueryState<T> = {
|
|
3
|
+
value: T | null;
|
|
4
|
+
loading: boolean;
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
7
|
* A React hook that subscribes to one or more `DbSync` tables and natively
|
|
4
8
|
* re-evaluates a strictly typed query function whenever local mutations or
|
|
@@ -8,6 +12,7 @@ import type { DbSync } from "./DbSync.js";
|
|
|
8
12
|
* @param stores A string or array of strings containing the table names the query function reads from.
|
|
9
13
|
* @param queryFn An asynchronous function invoked to pull data from IndexedDB.
|
|
10
14
|
* @param deps A standard React dependency array for parameters referenced inside the `queryFn`.
|
|
11
|
-
* @returns
|
|
15
|
+
* @returns An object containing the latest query result and whether the initial fetch is still pending.
|
|
12
16
|
*/
|
|
13
|
-
export declare function useDbQuery<T>(db: DbSync, stores: string | string[], queryFn: () => Promise<T>, deps?: any[]): T
|
|
17
|
+
export declare function useDbQuery<T>(db: DbSync, stores: string | string[], queryFn: () => Promise<T>, deps?: any[]): DbQueryState<T>;
|
|
18
|
+
export {};
|
package/esm/useDbQuery.js
CHANGED
|
@@ -8,11 +8,11 @@ import { useEffect, useState } from "react";
|
|
|
8
8
|
* @param stores A string or array of strings containing the table names the query function reads from.
|
|
9
9
|
* @param queryFn An asynchronous function invoked to pull data from IndexedDB.
|
|
10
10
|
* @param deps A standard React dependency array for parameters referenced inside the `queryFn`.
|
|
11
|
-
* @returns
|
|
11
|
+
* @returns An object containing the latest query result and whether the initial fetch is still pending.
|
|
12
12
|
*/
|
|
13
13
|
export function useDbQuery(db, stores, queryFn, deps = []) {
|
|
14
|
-
/** Holds the latest query result. */
|
|
15
|
-
const [
|
|
14
|
+
/** Holds the latest query result and loading state. */
|
|
15
|
+
const [state, setState] = useState({ value: null, loading: true });
|
|
16
16
|
/** Normalizes the store input into an array for matching. */
|
|
17
17
|
const storeArray = Array.isArray(stores) ? stores : [stores];
|
|
18
18
|
useEffect(() => {
|
|
@@ -31,11 +31,15 @@ export function useDbQuery(db, stores, queryFn, deps = []) {
|
|
|
31
31
|
}
|
|
32
32
|
try {
|
|
33
33
|
const result = await queryFn();
|
|
34
|
-
if (isMounted)
|
|
35
|
-
|
|
34
|
+
if (isMounted) {
|
|
35
|
+
setState({ value: result ?? null, loading: false });
|
|
36
|
+
}
|
|
36
37
|
}
|
|
37
38
|
catch (err) {
|
|
38
39
|
console.error("[dbsync useDbQuery]: Query failed", err);
|
|
40
|
+
if (isMounted) {
|
|
41
|
+
setState((current) => ({ ...current, loading: false }));
|
|
42
|
+
}
|
|
39
43
|
}
|
|
40
44
|
};
|
|
41
45
|
// Initial fetch
|
|
@@ -53,6 +57,6 @@ export function useDbQuery(db, stores, queryFn, deps = []) {
|
|
|
53
57
|
};
|
|
54
58
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
55
59
|
}, [db, JSON.stringify(storeArray), ...deps]);
|
|
56
|
-
return
|
|
60
|
+
return state;
|
|
57
61
|
}
|
|
58
62
|
//# sourceMappingURL=useDbQuery.js.map
|
package/esm/useDbQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDbQuery.js","sourceRoot":"","sources":["../src/useDbQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"useDbQuery.js","sourceRoot":"","sources":["../src/useDbQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAQ3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CACzB,EAAU,EACV,MAAyB,EACzB,OAAyB,EACzB,OAAc,EAAE;IAEhB,uDAAuD;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,6DAA6D;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAE5D,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,SAAS,GAAG,IAAI,CAAA;QAEpB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;gBACjB,oDAAoD;gBACpD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBACnC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;wBAC9B,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;4BAC9B,aAAa,CAAC,KAAK,CAAC,CAAA;4BACpB,OAAO,EAAE,CAAA;wBACV,CAAC;oBACF,CAAC,EAAE,EAAE,CAAC,CAAA;gBACP,CAAC,CAAC,CAAA;YACH,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAA;gBAC9B,IAAI,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;gBACpD,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;gBACvD,IAAI,SAAS,EAAE,CAAC;oBACf,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;gBACxD,CAAC;YACF,CAAC;QACF,CAAC,CAAA;QAED,gBAAgB;QAChB,SAAS,EAAE,CAAA;QAEX,+BAA+B;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,EAAE;YAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YACtE,IAAI,YAAY,EAAE,CAAC;gBAClB,SAAS,EAAE,CAAA;YACZ,CAAC;QACF,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACX,SAAS,GAAG,KAAK,CAAA;YACjB,GAAG,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC,CAAA;QACD,uDAAuD;IACxD,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAE7C,OAAO,KAAK,CAAA;AACb,CAAC"}
|