@slimr/dbsync 0.0.3 → 0.0.6
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 +9 -7
- package/cjs/DbSync.d.ts +47 -3
- package/cjs/DbSync.js +54 -18
- package/cjs/DbSync.js.map +1 -1
- package/cjs/adapters/LocalAdapter.d.ts +18 -0
- package/cjs/adapters/LocalAdapter.js +28 -0
- package/cjs/adapters/LocalAdapter.js.map +1 -0
- package/cjs/adapters/RestAdapter.d.ts +17 -0
- package/cjs/adapters/RestAdapter.js +13 -0
- package/cjs/adapters/RestAdapter.js.map +1 -1
- package/cjs/adapters/index.d.ts +1 -0
- package/cjs/adapters/index.js +1 -0
- package/cjs/adapters/index.js.map +1 -1
- package/cjs/adapters/types.d.ts +13 -0
- package/cjs/internal/AuthManager.d.ts +17 -2
- package/cjs/internal/AuthManager.js +19 -4
- package/cjs/internal/AuthManager.js.map +1 -1
- package/cjs/internal/EventBus.d.ts +12 -0
- package/cjs/internal/EventBus.js +12 -0
- package/cjs/internal/EventBus.js.map +1 -1
- package/cjs/internal/StorageManager.d.ts +21 -0
- package/cjs/internal/StorageManager.js +21 -0
- package/cjs/internal/StorageManager.js.map +1 -1
- package/cjs/internal/SyncEngine.d.ts +29 -3
- package/cjs/internal/SyncEngine.js +31 -5
- package/cjs/internal/SyncEngine.js.map +1 -1
- package/cjs/useDbQuery.js +2 -0
- package/cjs/useDbQuery.js.map +1 -1
- package/cjs/util/promiseWithResolvers.js +3 -0
- package/cjs/util/promiseWithResolvers.js.map +1 -1
- package/docs/Adapters.md +58 -0
- package/docs/LocalAdapter.md +7 -0
- package/docs/RestAdapter.md +69 -0
- package/esm/DbSync.d.ts +47 -3
- package/esm/DbSync.js +54 -18
- package/esm/DbSync.js.map +1 -1
- package/esm/adapters/LocalAdapter.d.ts +18 -0
- package/esm/adapters/LocalAdapter.js +24 -0
- package/esm/adapters/LocalAdapter.js.map +1 -0
- package/esm/adapters/RestAdapter.d.ts +17 -0
- package/esm/adapters/RestAdapter.js +13 -0
- package/esm/adapters/RestAdapter.js.map +1 -1
- package/esm/adapters/index.d.ts +1 -0
- package/esm/adapters/index.js +1 -0
- package/esm/adapters/index.js.map +1 -1
- package/esm/adapters/types.d.ts +13 -0
- package/esm/internal/AuthManager.d.ts +17 -2
- package/esm/internal/AuthManager.js +19 -4
- package/esm/internal/AuthManager.js.map +1 -1
- package/esm/internal/EventBus.d.ts +12 -0
- package/esm/internal/EventBus.js +12 -0
- package/esm/internal/EventBus.js.map +1 -1
- package/esm/internal/StorageManager.d.ts +21 -0
- package/esm/internal/StorageManager.js +21 -0
- package/esm/internal/StorageManager.js.map +1 -1
- package/esm/internal/SyncEngine.d.ts +29 -3
- package/esm/internal/SyncEngine.js +31 -5
- package/esm/internal/SyncEngine.js.map +1 -1
- package/esm/useDbQuery.js +2 -0
- package/esm/useDbQuery.js.map +1 -1
- package/esm/util/promiseWithResolvers.js +3 -0
- package/esm/util/promiseWithResolvers.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,20 +1,41 @@
|
|
|
1
1
|
import type { DbSyncConfig } from "../DbSync.js";
|
|
2
2
|
import { DbTransaction } from "./DbTransaction.js";
|
|
3
3
|
import type { EventBus } from "./EventBus.js";
|
|
4
|
+
/**
|
|
5
|
+
* Owns IndexedDB initialization, transactions, and record access.
|
|
6
|
+
*/
|
|
4
7
|
export declare class StorageManager {
|
|
5
8
|
private config;
|
|
6
9
|
private events;
|
|
7
10
|
private onSchemaChange;
|
|
11
|
+
/** The active IndexedDB database instance. */
|
|
8
12
|
db: IDBDatabase;
|
|
13
|
+
/** Whether the storage layer has finished initializing. */
|
|
9
14
|
initted: boolean;
|
|
15
|
+
/** The IndexedDB database name used by dbsync. */
|
|
10
16
|
private dbName;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a storage manager for the provided dbsync configuration and event bus.
|
|
19
|
+
*
|
|
20
|
+
* @param config The full dbsync configuration object.
|
|
21
|
+
* @param events The event bus used to broadcast store updates.
|
|
22
|
+
* @param onSchemaChange Callback fired when the IndexedDB schema changes.
|
|
23
|
+
*/
|
|
11
24
|
constructor(config: DbSyncConfig, events: EventBus, onSchemaChange: () => void);
|
|
25
|
+
/** Computes a deterministic schema signature from the configured tables and indexes. */
|
|
12
26
|
private get schemaSignature();
|
|
27
|
+
/** Creates a transaction wrapper used by the sync engine and public facade. */
|
|
13
28
|
getTransaction(): DbTransaction;
|
|
29
|
+
/** Opens IndexedDB and creates the configured stores when needed. */
|
|
14
30
|
init(): Promise<void>;
|
|
31
|
+
/** Executes a batch of writes inside a single IndexedDB transaction. */
|
|
15
32
|
executeTransaction(operations: any[]): Promise<void>;
|
|
33
|
+
/** Reads a typed record by primary key from the requested store. */
|
|
16
34
|
get<T>(storeName: string, id: string | number): Promise<T | undefined>;
|
|
35
|
+
/** Returns every record from the requested store. */
|
|
17
36
|
findAll<T>(storeName: string): Promise<T[]>;
|
|
37
|
+
/** Clears every object store managed by the database. */
|
|
18
38
|
clearAllStores(): Promise<void>;
|
|
39
|
+
/** Closes the underlying IndexedDB connection. */
|
|
19
40
|
dispose(): void;
|
|
20
41
|
}
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
import { promiseWithResolvers } from "../util/promiseWithResolvers.js";
|
|
2
2
|
import { DbTransaction } from "./DbTransaction.js";
|
|
3
|
+
/**
|
|
4
|
+
* Owns IndexedDB initialization, transactions, and record access.
|
|
5
|
+
*/
|
|
3
6
|
export class StorageManager {
|
|
4
7
|
config;
|
|
5
8
|
events;
|
|
6
9
|
onSchemaChange;
|
|
10
|
+
/** The active IndexedDB database instance. */
|
|
7
11
|
db;
|
|
12
|
+
/** Whether the storage layer has finished initializing. */
|
|
8
13
|
initted = false;
|
|
14
|
+
/** The IndexedDB database name used by dbsync. */
|
|
9
15
|
dbName = "dbsync";
|
|
16
|
+
/**
|
|
17
|
+
* Creates a storage manager for the provided dbsync configuration and event bus.
|
|
18
|
+
*
|
|
19
|
+
* @param config The full dbsync configuration object.
|
|
20
|
+
* @param events The event bus used to broadcast store updates.
|
|
21
|
+
* @param onSchemaChange Callback fired when the IndexedDB schema changes.
|
|
22
|
+
*/
|
|
10
23
|
constructor(config, events, onSchemaChange) {
|
|
11
24
|
this.config = config;
|
|
12
25
|
this.events = events;
|
|
13
26
|
this.onSchemaChange = onSchemaChange;
|
|
14
27
|
}
|
|
28
|
+
/** Computes a deterministic schema signature from the configured tables and indexes. */
|
|
15
29
|
get schemaSignature() {
|
|
16
30
|
const tables = Object.keys(this.config.tables)
|
|
17
31
|
.sort()
|
|
@@ -23,9 +37,11 @@ export class StorageManager {
|
|
|
23
37
|
});
|
|
24
38
|
return JSON.stringify(tables);
|
|
25
39
|
}
|
|
40
|
+
/** Creates a transaction wrapper used by the sync engine and public facade. */
|
|
26
41
|
getTransaction() {
|
|
27
42
|
return new DbTransaction((operations) => this.executeTransaction(operations));
|
|
28
43
|
}
|
|
44
|
+
/** Opens IndexedDB and creates the configured stores when needed. */
|
|
29
45
|
async init() {
|
|
30
46
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
31
47
|
const upgradeFn = (e) => {
|
|
@@ -68,6 +84,7 @@ export class StorageManager {
|
|
|
68
84
|
req.onerror = () => reject(req.error);
|
|
69
85
|
return promise;
|
|
70
86
|
}
|
|
87
|
+
/** Executes a batch of writes inside a single IndexedDB transaction. */
|
|
71
88
|
async executeTransaction(operations) {
|
|
72
89
|
const storeNames = Array.from(new Set(operations.map((o) => o.storeName))).concat([
|
|
73
90
|
"dirtyQueue",
|
|
@@ -111,6 +128,7 @@ export class StorageManager {
|
|
|
111
128
|
});
|
|
112
129
|
return promise;
|
|
113
130
|
}
|
|
131
|
+
/** Reads a typed record by primary key from the requested store. */
|
|
114
132
|
async get(storeName, id) {
|
|
115
133
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
116
134
|
const tx = this.db.transaction(storeName, "readonly");
|
|
@@ -119,6 +137,7 @@ export class StorageManager {
|
|
|
119
137
|
req.onerror = () => reject(req.error);
|
|
120
138
|
return promise;
|
|
121
139
|
}
|
|
140
|
+
/** Returns every record from the requested store. */
|
|
122
141
|
async findAll(storeName) {
|
|
123
142
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
124
143
|
const tx = this.db.transaction(storeName, "readonly");
|
|
@@ -127,6 +146,7 @@ export class StorageManager {
|
|
|
127
146
|
req.onerror = () => reject(req.error);
|
|
128
147
|
return promise;
|
|
129
148
|
}
|
|
149
|
+
/** Clears every object store managed by the database. */
|
|
130
150
|
async clearAllStores() {
|
|
131
151
|
const tx = this.db.transaction(Array.from(this.db.objectStoreNames), "readwrite");
|
|
132
152
|
Array.from(this.db.objectStoreNames).forEach((name) => tx.objectStore(name).clear());
|
|
@@ -135,6 +155,7 @@ export class StorageManager {
|
|
|
135
155
|
tx.onerror = () => reject(tx.error);
|
|
136
156
|
});
|
|
137
157
|
}
|
|
158
|
+
/** Closes the underlying IndexedDB connection. */
|
|
138
159
|
dispose() {
|
|
139
160
|
if (this.db) {
|
|
140
161
|
this.db.close();
|
|
@@ -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;AAGlD,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"StorageManager.js","sourceRoot":"","sources":["../../src/internal/StorageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,9 @@ import type { DbSyncConfig } from "../DbSync.js";
|
|
|
3
3
|
import type { AuthManager } from "./AuthManager.js";
|
|
4
4
|
import type { EventBus } from "./EventBus.js";
|
|
5
5
|
import type { StorageManager } from "./StorageManager.js";
|
|
6
|
+
/**
|
|
7
|
+
* Coordinates periodic pull/push sync cycles against the configured backend.
|
|
8
|
+
*/
|
|
6
9
|
export declare class SyncEngine {
|
|
7
10
|
private config;
|
|
8
11
|
private syncInterval;
|
|
@@ -11,17 +14,40 @@ export declare class SyncEngine {
|
|
|
11
14
|
private auth;
|
|
12
15
|
private adapter;
|
|
13
16
|
private onSchemaChange;
|
|
17
|
+
/** The active interval handle, or `null` when sync is disabled. */
|
|
14
18
|
private syncSetInterval;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a sync engine bound to the given storage, auth, and adapter instances.
|
|
21
|
+
*
|
|
22
|
+
* @param config The active dbsync configuration.
|
|
23
|
+
* @param syncInterval The polling interval in milliseconds.
|
|
24
|
+
* @param events The event bus used for sync state notifications.
|
|
25
|
+
* @param storage The storage manager used to read and write records.
|
|
26
|
+
* @param auth The auth manager used to update authentication state.
|
|
27
|
+
* @param adapter The backend adapter used for pull and push requests.
|
|
28
|
+
* @param onSchemaChange Callback fired when schema versions diverge.
|
|
29
|
+
*/
|
|
15
30
|
constructor(config: DbSyncConfig, syncInterval: number, events: EventBus, storage: StorageManager, auth: AuthManager, adapter: BackendAdapter, onSchemaChange: () => void);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
31
|
+
/** Starts periodic synchronization if it is not already running. */
|
|
32
|
+
start(): void;
|
|
33
|
+
/** Stops periodic synchronization if it is currently running. */
|
|
34
|
+
stop(): void;
|
|
35
|
+
/** Whether the sync timer is currently active. */
|
|
36
|
+
get isStarted(): boolean;
|
|
37
|
+
/** Whether the last successful sync is still considered fresh. */
|
|
19
38
|
get isLive(): boolean;
|
|
39
|
+
/** Waits until the engine reports a live connection or rejects if disabled. */
|
|
20
40
|
waitForLive(): Promise<void>;
|
|
41
|
+
/** Triggers a single sync cycle immediately. */
|
|
21
42
|
triggerSync(): Promise<void>;
|
|
43
|
+
/** Runs one sync pass, optionally under a Web Locks leader lock. */
|
|
22
44
|
private sync;
|
|
45
|
+
/** Performs pull, push, and sync-state bookkeeping for one cycle. */
|
|
23
46
|
private performSync;
|
|
47
|
+
/** Computes the local schema signature used for version handshakes. */
|
|
24
48
|
private get schemaSignature();
|
|
49
|
+
/** Pulls remote changes and applies them to IndexedDB. */
|
|
25
50
|
private syncPull;
|
|
51
|
+
/** Pushes queued local mutations to the backend and clears the queues. */
|
|
26
52
|
private syncPush;
|
|
27
53
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { promiseWithResolvers } from "../util/promiseWithResolvers.js";
|
|
2
|
+
/**
|
|
3
|
+
* Coordinates periodic pull/push sync cycles against the configured backend.
|
|
4
|
+
*/
|
|
2
5
|
export class SyncEngine {
|
|
3
6
|
config;
|
|
4
7
|
syncInterval;
|
|
@@ -7,7 +10,19 @@ export class SyncEngine {
|
|
|
7
10
|
auth;
|
|
8
11
|
adapter;
|
|
9
12
|
onSchemaChange;
|
|
13
|
+
/** The active interval handle, or `null` when sync is disabled. */
|
|
10
14
|
syncSetInterval = null;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a sync engine bound to the given storage, auth, and adapter instances.
|
|
17
|
+
*
|
|
18
|
+
* @param config The active dbsync configuration.
|
|
19
|
+
* @param syncInterval The polling interval in milliseconds.
|
|
20
|
+
* @param events The event bus used for sync state notifications.
|
|
21
|
+
* @param storage The storage manager used to read and write records.
|
|
22
|
+
* @param auth The auth manager used to update authentication state.
|
|
23
|
+
* @param adapter The backend adapter used for pull and push requests.
|
|
24
|
+
* @param onSchemaChange Callback fired when schema versions diverge.
|
|
25
|
+
*/
|
|
11
26
|
constructor(config, syncInterval, events, storage, auth, adapter, onSchemaChange) {
|
|
12
27
|
this.config = config;
|
|
13
28
|
this.syncInterval = syncInterval;
|
|
@@ -17,29 +32,34 @@ export class SyncEngine {
|
|
|
17
32
|
this.adapter = adapter;
|
|
18
33
|
this.onSchemaChange = onSchemaChange;
|
|
19
34
|
}
|
|
20
|
-
|
|
35
|
+
/** Starts periodic synchronization if it is not already running. */
|
|
36
|
+
start() {
|
|
21
37
|
if (!this.syncSetInterval) {
|
|
22
38
|
this.syncSetInterval = setInterval(() => this.sync(), this.syncInterval);
|
|
23
39
|
}
|
|
24
40
|
}
|
|
25
|
-
|
|
41
|
+
/** Stops periodic synchronization if it is currently running. */
|
|
42
|
+
stop() {
|
|
26
43
|
if (this.syncSetInterval) {
|
|
27
44
|
clearInterval(this.syncSetInterval);
|
|
28
45
|
this.syncSetInterval = null;
|
|
29
46
|
}
|
|
30
47
|
}
|
|
31
|
-
|
|
48
|
+
/** Whether the sync timer is currently active. */
|
|
49
|
+
get isStarted() {
|
|
32
50
|
return !!this.syncSetInterval;
|
|
33
51
|
}
|
|
52
|
+
/** Whether the last successful sync is still considered fresh. */
|
|
34
53
|
get isLive() {
|
|
35
54
|
const lastSuccess = localStorage.getItem("dbsync-lastSuccessAt");
|
|
36
55
|
if (!lastSuccess)
|
|
37
56
|
return false;
|
|
38
57
|
return Date.now() - new Date(lastSuccess).getTime() < this.syncInterval * 4;
|
|
39
58
|
}
|
|
59
|
+
/** Waits until the engine reports a live connection or rejects if disabled. */
|
|
40
60
|
async waitForLive() {
|
|
41
61
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
42
|
-
if (!this.
|
|
62
|
+
if (!this.isStarted) {
|
|
43
63
|
reject(new Error("Sync disabled"));
|
|
44
64
|
return promise;
|
|
45
65
|
}
|
|
@@ -51,9 +71,11 @@ export class SyncEngine {
|
|
|
51
71
|
}, this.syncInterval);
|
|
52
72
|
return promise;
|
|
53
73
|
}
|
|
74
|
+
/** Triggers a single sync cycle immediately. */
|
|
54
75
|
async triggerSync() {
|
|
55
76
|
await this.sync();
|
|
56
77
|
}
|
|
78
|
+
/** Runs one sync pass, optionally under a Web Locks leader lock. */
|
|
57
79
|
async sync() {
|
|
58
80
|
if (typeof navigator !== "undefined" && navigator.locks) {
|
|
59
81
|
await navigator.locks.request("dbsync-leader", async () => {
|
|
@@ -64,6 +86,7 @@ export class SyncEngine {
|
|
|
64
86
|
await this.performSync();
|
|
65
87
|
}
|
|
66
88
|
}
|
|
89
|
+
/** Performs pull, push, and sync-state bookkeeping for one cycle. */
|
|
67
90
|
async performSync() {
|
|
68
91
|
this.events.setState("syncing");
|
|
69
92
|
try {
|
|
@@ -76,11 +99,12 @@ export class SyncEngine {
|
|
|
76
99
|
catch (err) {
|
|
77
100
|
if (err.status === 401) {
|
|
78
101
|
this.auth.isAuth = false;
|
|
79
|
-
this.
|
|
102
|
+
this.stop();
|
|
80
103
|
}
|
|
81
104
|
this.events.setState("error");
|
|
82
105
|
}
|
|
83
106
|
}
|
|
107
|
+
/** Computes the local schema signature used for version handshakes. */
|
|
84
108
|
get schemaSignature() {
|
|
85
109
|
const tables = Object.keys(this.config.tables)
|
|
86
110
|
.sort()
|
|
@@ -92,6 +116,7 @@ export class SyncEngine {
|
|
|
92
116
|
});
|
|
93
117
|
return JSON.stringify(tables);
|
|
94
118
|
}
|
|
119
|
+
/** Pulls remote changes and applies them to IndexedDB. */
|
|
95
120
|
async syncPull() {
|
|
96
121
|
let hasMore = true;
|
|
97
122
|
while (hasMore) {
|
|
@@ -127,6 +152,7 @@ export class SyncEngine {
|
|
|
127
152
|
hasMore = data.hasMore;
|
|
128
153
|
}
|
|
129
154
|
}
|
|
155
|
+
/** Pushes queued local mutations to the backend and clears the queues. */
|
|
130
156
|
async syncPush() {
|
|
131
157
|
const dirty = await this.storage.findAll("dirtyQueue");
|
|
132
158
|
const deleted = await this.storage.findAll("deletedQueue");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncEngine.js","sourceRoot":"","sources":["../../src/internal/SyncEngine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAKtE,MAAM,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"SyncEngine.js","sourceRoot":"","sources":["../../src/internal/SyncEngine.ts"],"names":[],"mappings":"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"}
|
package/esm/useDbQuery.js
CHANGED
|
@@ -11,7 +11,9 @@ import { useEffect, useState } from "react";
|
|
|
11
11
|
* @returns The resolved data of the `queryFn`, or `undefined` while the initial fetch evaluates.
|
|
12
12
|
*/
|
|
13
13
|
export function useDbQuery(db, stores, queryFn, deps = []) {
|
|
14
|
+
/** Holds the latest query result. */
|
|
14
15
|
const [data, setData] = useState(undefined);
|
|
16
|
+
/** Normalizes the store input into an array for matching. */
|
|
15
17
|
const storeArray = Array.isArray(stores) ? stores : [stores];
|
|
16
18
|
useEffect(() => {
|
|
17
19
|
let isMounted = true;
|
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;AAG3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CACzB,EAAU,EACV,MAAyB,EACzB,OAAyB,EACzB,OAAc,EAAE;IAEhB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAA;IAC1D,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;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;YACxD,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,IAAI,CAAA;AACZ,CAAC"}
|
|
1
|
+
{"version":3,"file":"useDbQuery.js","sourceRoot":"","sources":["../src/useDbQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CACzB,EAAU,EACV,MAAyB,EACzB,OAAyB,EACzB,OAAc,EAAE;IAEhB,qCAAqC;IACrC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAA;IAC1D,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;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;YACxD,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,IAAI,CAAA;AACZ,CAAC"}
|
|
@@ -5,8 +5,11 @@
|
|
|
5
5
|
* the built-in helper yet.
|
|
6
6
|
*/
|
|
7
7
|
export function promiseWithResolvers() {
|
|
8
|
+
/** Resolves the created promise. */
|
|
8
9
|
let resolve;
|
|
10
|
+
/** Rejects the created promise. */
|
|
9
11
|
let reject;
|
|
12
|
+
/** The promise instance returned to the caller. */
|
|
10
13
|
const promise = new Promise((res, rej) => {
|
|
11
14
|
resolve = res;
|
|
12
15
|
reject = rej;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promiseWithResolvers.js","sourceRoot":"","sources":["../../src/util/promiseWithResolvers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IACnC,IAAI,OAA6C,CAAA;IACjD,IAAI,MAA+B,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,OAAO,GAAG,GAAG,CAAA;QACb,MAAM,GAAG,GAAG,CAAA;IACb,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AACpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"promiseWithResolvers.js","sourceRoot":"","sources":["../../src/util/promiseWithResolvers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IACnC,oCAAoC;IACpC,IAAI,OAA6C,CAAA;IACjD,mCAAmC;IACnC,IAAI,MAA+B,CAAA;IACnC,mDAAmD;IACnD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,OAAO,GAAG,GAAG,CAAA;QACb,MAAM,GAAG,GAAG,CAAA;IACb,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slimr/dbsync",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"author": "Brian Dombrowski",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"private": false,
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"typecheck": "tsc -noEmit && npm run typecheck:test"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
|
+
"docs",
|
|
41
42
|
"cjs",
|
|
42
43
|
"esm"
|
|
43
44
|
]
|