velocious 1.0.510 → 1.0.512
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 +1 -0
- package/build/database/advisory-lock-runner.js +192 -0
- package/build/database/drivers/mysql/index.js +3 -0
- package/build/database/live-query.js +244 -0
- package/build/database/record/index.js +48 -111
- package/build/database/record-changes.js +135 -0
- package/build/database/use-live-query.js +118 -0
- package/build/src/configuration-types.d.ts +1 -1
- package/build/src/configuration.d.ts +1 -1
- package/build/src/database/advisory-lock-runner.d.ts +124 -0
- package/build/src/database/advisory-lock-runner.d.ts.map +1 -0
- package/build/src/database/advisory-lock-runner.js +176 -0
- package/build/src/database/drivers/mysql/index.d.ts +2 -2
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +3 -1
- package/build/src/database/live-query.d.ts +168 -0
- package/build/src/database/live-query.d.ts.map +1 -0
- package/build/src/database/live-query.js +211 -0
- package/build/src/database/record/attachments/handle.d.ts +1 -1
- package/build/src/database/record/index.d.ts +24 -61
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +46 -108
- package/build/src/database/record-changes.d.ts +111 -0
- package/build/src/database/record-changes.d.ts.map +1 -0
- package/build/src/database/record-changes.js +115 -0
- package/build/src/database/use-live-query.d.ts +44 -0
- package/build/src/database/use-live-query.d.ts.map +1 -0
- package/build/src/database/use-live-query.js +97 -0
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +17 -10
- package/build/src/sync/sync-envelope-replay-service.d.ts +1 -1
- package/build/src/sync/sync-realtime-bridge.d.ts.map +1 -1
- package/build/src/sync/sync-realtime-bridge.js +9 -5
- package/build/src/sync/sync-replay-upsert-applier.d.ts +2 -2
- package/build/sync/sync-api-client.js +19 -11
- package/build/sync/sync-realtime-bridge.js +9 -4
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/database/advisory-lock-runner.js +192 -0
- package/src/database/drivers/mysql/index.js +3 -0
- package/src/database/live-query.js +244 -0
- package/src/database/record/index.js +48 -111
- package/src/database/record-changes.js +135 -0
- package/src/database/use-live-query.js +118 -0
- package/src/sync/sync-api-client.js +19 -11
- package/src/sync/sync-realtime-bridge.js +9 -4
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export default recordChanges;
|
|
2
|
+
/**
|
|
3
|
+
* RecordModelClass type.
|
|
4
|
+
*/
|
|
5
|
+
export type RecordModelClass = typeof import("./record/index.js").default;
|
|
6
|
+
/**
|
|
7
|
+
* RecordChangeOperation type.
|
|
8
|
+
*/
|
|
9
|
+
export type RecordChangeOperation = "create" | "update" | "destroy";
|
|
10
|
+
/**
|
|
11
|
+
* RecordChangeEvent type.
|
|
12
|
+
*/
|
|
13
|
+
export type RecordChangeEvent = {
|
|
14
|
+
/**
|
|
15
|
+
* - Model class whose row changed.
|
|
16
|
+
*/
|
|
17
|
+
modelClass: RecordModelClass;
|
|
18
|
+
/**
|
|
19
|
+
* - The committed operation.
|
|
20
|
+
*/
|
|
21
|
+
operation: RecordChangeOperation;
|
|
22
|
+
/**
|
|
23
|
+
* - The committed record instance.
|
|
24
|
+
*/
|
|
25
|
+
record: InstanceType<RecordModelClass>;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* RecordChangeListener type.
|
|
29
|
+
*/
|
|
30
|
+
export type RecordChangeListener = (event: RecordChangeEvent) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Shared singleton so record commits and live queries meet on one bus.
|
|
33
|
+
* @type {RecordChanges} */
|
|
34
|
+
declare const recordChanges: RecordChanges;
|
|
35
|
+
/**
|
|
36
|
+
* RecordModelClass type.
|
|
37
|
+
* @typedef {typeof import("./record/index.js").default} RecordModelClass */
|
|
38
|
+
/**
|
|
39
|
+
* RecordChangeOperation type.
|
|
40
|
+
* @typedef {"create" | "update" | "destroy"} RecordChangeOperation */
|
|
41
|
+
/**
|
|
42
|
+
* RecordChangeEvent type.
|
|
43
|
+
* @typedef {object} RecordChangeEvent
|
|
44
|
+
* @property {RecordModelClass} modelClass - Model class whose row changed.
|
|
45
|
+
* @property {RecordChangeOperation} operation - The committed operation.
|
|
46
|
+
* @property {InstanceType<RecordModelClass>} record - The committed record instance.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* RecordChangeListener type.
|
|
50
|
+
* @typedef {(event: RecordChangeEvent) => void} RecordChangeListener */
|
|
51
|
+
/**
|
|
52
|
+
* Framework-level bus for committed local model changes. Records emit here once
|
|
53
|
+
* per commit (see `VelociousDatabaseRecord.save`/`destroy`), so local writes,
|
|
54
|
+
* pull applies, and realtime applies converge on one uniform signal that live
|
|
55
|
+
* queries subscribe to. Emission is keyed by model name; a `batch(...)` window
|
|
56
|
+
* coalesces a burst of commits into a single event per model class.
|
|
57
|
+
*/
|
|
58
|
+
export class RecordChanges {
|
|
59
|
+
/**
|
|
60
|
+
* Underlying event bus keyed by model name.
|
|
61
|
+
* @type {import("eventemitter3").EventEmitter} */
|
|
62
|
+
_emitter: import("eventemitter3").EventEmitter;
|
|
63
|
+
/**
|
|
64
|
+
* Number of open batch windows; while positive, emits buffer instead of dispatching.
|
|
65
|
+
* @type {number} */
|
|
66
|
+
_batchDepth: number;
|
|
67
|
+
/**
|
|
68
|
+
* Latest buffered event per model name, dispatched once when the outermost batch ends.
|
|
69
|
+
* @type {Map<string, RecordChangeEvent>} */
|
|
70
|
+
_bufferedEvents: Map<string, RecordChangeEvent>;
|
|
71
|
+
/**
|
|
72
|
+
* Subscribes a listener to committed changes of a model class.
|
|
73
|
+
* @param {RecordModelClass} modelClass - Model class to observe.
|
|
74
|
+
* @param {RecordChangeListener} listener - Listener called with each change event.
|
|
75
|
+
* @returns {() => void} Unsubscribe callback.
|
|
76
|
+
*/
|
|
77
|
+
subscribe(modelClass: RecordModelClass, listener: RecordChangeListener): () => void;
|
|
78
|
+
/**
|
|
79
|
+
* Whether any listener is currently observing the given model class. Callers on
|
|
80
|
+
* the write path use this to skip emitting entirely when nothing is watching,
|
|
81
|
+
* keeping server-side saves free of live-query overhead.
|
|
82
|
+
* @param {RecordModelClass} modelClass - Model class to check.
|
|
83
|
+
* @returns {boolean} Whether listeners exist for the model class.
|
|
84
|
+
*/
|
|
85
|
+
hasListeners(modelClass: RecordModelClass): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Emits a committed change. While a batch window is open the event is buffered
|
|
88
|
+
* and deduplicated by model class, so a batch of N commits dispatches a single
|
|
89
|
+
* event per model class when the outermost batch ends.
|
|
90
|
+
* @param {RecordChangeEvent} event - Change event to dispatch.
|
|
91
|
+
* @returns {void}
|
|
92
|
+
*/
|
|
93
|
+
emit(event: RecordChangeEvent): void;
|
|
94
|
+
/**
|
|
95
|
+
* Runs a callback with change dispatch coalesced: every change committed while
|
|
96
|
+
* the callback runs buffers, and the outermost batch flushes a single event per
|
|
97
|
+
* changed model class after it resolves. Nested batches share one flush. Sync
|
|
98
|
+
* appliers wrap their per-row apply loop in this so a large pull or realtime
|
|
99
|
+
* push triggers one re-run per live query instead of one per applied row.
|
|
100
|
+
* @template T
|
|
101
|
+
* @param {() => Promise<T> | T} callback - Work whose committed changes should coalesce.
|
|
102
|
+
* @returns {Promise<T>} The callback result.
|
|
103
|
+
*/
|
|
104
|
+
batch<T>(callback: () => Promise<T> | T): Promise<T>;
|
|
105
|
+
/**
|
|
106
|
+
* Dispatches and clears the buffered per-model events collected during a batch.
|
|
107
|
+
* @returns {void}
|
|
108
|
+
*/
|
|
109
|
+
_flushBufferedEvents(): void;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=record-changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-changes.d.ts","sourceRoot":"","sources":["../../../src/database/record-changes.js"],"names":[],"mappings":";;;;+BAMa,cAAc,mBAAmB,EAAE,OAAO;;;;oCAI1C,QAAQ,GAAG,QAAQ,GAAG,SAAS;;;;;;;;gBAK9B,gBAAgB;;;;eAChB,qBAAqB;;;;YACrB,YAAY,CAAC,gBAAgB,CAAC;;;;;mCAK/B,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI;AA0G/C;;2BAE2B;AAC3B,6BADU,aAAa,CACkB;AA/HzC;;4EAE4E;AAE5E;;sEAEsE;AAEtE;;;;;;GAMG;AAEH;;wEAEwE;AAExE;;;;;;GAMG;AACH;IACE;;sDAEkD;IAClD,UADU,OAAO,eAAe,EAAE,YAAY,CACjB;IAE7B;;wBAEoB;IACpB,aADU,MAAM,CACD;IAEf;;gDAE4C;IAC5C,iBADU,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CACb;IAE3B;;;;;OAKG;IACH,sBAJW,gBAAgB,YAChB,oBAAoB,GAClB,MAAM,IAAI,CAUtB;IAED;;;;;;OAMG;IACH,yBAHW,gBAAgB,GACd,OAAO,CAInB;IAED;;;;;;OAMG;IACH,YAHW,iBAAiB,GACf,IAAI,CAUhB;IAED;;;;;;;;;OASG;IACH,MAJa,CAAC,YACH,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CAYtB;IAED;;;OAGG;IACH,wBAFa,IAAI,CAUhB;CACF"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import EventEmitter from "../utils/event-emitter.js";
|
|
3
|
+
/**
|
|
4
|
+
* RecordModelClass type.
|
|
5
|
+
* @typedef {typeof import("./record/index.js").default} RecordModelClass */
|
|
6
|
+
/**
|
|
7
|
+
* RecordChangeOperation type.
|
|
8
|
+
* @typedef {"create" | "update" | "destroy"} RecordChangeOperation */
|
|
9
|
+
/**
|
|
10
|
+
* RecordChangeEvent type.
|
|
11
|
+
* @typedef {object} RecordChangeEvent
|
|
12
|
+
* @property {RecordModelClass} modelClass - Model class whose row changed.
|
|
13
|
+
* @property {RecordChangeOperation} operation - The committed operation.
|
|
14
|
+
* @property {InstanceType<RecordModelClass>} record - The committed record instance.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* RecordChangeListener type.
|
|
18
|
+
* @typedef {(event: RecordChangeEvent) => void} RecordChangeListener */
|
|
19
|
+
/**
|
|
20
|
+
* Framework-level bus for committed local model changes. Records emit here once
|
|
21
|
+
* per commit (see `VelociousDatabaseRecord.save`/`destroy`), so local writes,
|
|
22
|
+
* pull applies, and realtime applies converge on one uniform signal that live
|
|
23
|
+
* queries subscribe to. Emission is keyed by model name; a `batch(...)` window
|
|
24
|
+
* coalesces a burst of commits into a single event per model class.
|
|
25
|
+
*/
|
|
26
|
+
class RecordChanges {
|
|
27
|
+
/**
|
|
28
|
+
* Underlying event bus keyed by model name.
|
|
29
|
+
* @type {import("eventemitter3").EventEmitter} */
|
|
30
|
+
_emitter = new EventEmitter();
|
|
31
|
+
/**
|
|
32
|
+
* Number of open batch windows; while positive, emits buffer instead of dispatching.
|
|
33
|
+
* @type {number} */
|
|
34
|
+
_batchDepth = 0;
|
|
35
|
+
/**
|
|
36
|
+
* Latest buffered event per model name, dispatched once when the outermost batch ends.
|
|
37
|
+
* @type {Map<string, RecordChangeEvent>} */
|
|
38
|
+
_bufferedEvents = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Subscribes a listener to committed changes of a model class.
|
|
41
|
+
* @param {RecordModelClass} modelClass - Model class to observe.
|
|
42
|
+
* @param {RecordChangeListener} listener - Listener called with each change event.
|
|
43
|
+
* @returns {() => void} Unsubscribe callback.
|
|
44
|
+
*/
|
|
45
|
+
subscribe(modelClass, listener) {
|
|
46
|
+
const eventName = modelClass.getModelName();
|
|
47
|
+
this._emitter.on(eventName, listener);
|
|
48
|
+
return () => {
|
|
49
|
+
this._emitter.off(eventName, listener);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Whether any listener is currently observing the given model class. Callers on
|
|
54
|
+
* the write path use this to skip emitting entirely when nothing is watching,
|
|
55
|
+
* keeping server-side saves free of live-query overhead.
|
|
56
|
+
* @param {RecordModelClass} modelClass - Model class to check.
|
|
57
|
+
* @returns {boolean} Whether listeners exist for the model class.
|
|
58
|
+
*/
|
|
59
|
+
hasListeners(modelClass) {
|
|
60
|
+
return this._emitter.listenerCount(modelClass.getModelName()) > 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Emits a committed change. While a batch window is open the event is buffered
|
|
64
|
+
* and deduplicated by model class, so a batch of N commits dispatches a single
|
|
65
|
+
* event per model class when the outermost batch ends.
|
|
66
|
+
* @param {RecordChangeEvent} event - Change event to dispatch.
|
|
67
|
+
* @returns {void}
|
|
68
|
+
*/
|
|
69
|
+
emit(event) {
|
|
70
|
+
if (this._batchDepth > 0) {
|
|
71
|
+
this._bufferedEvents.set(event.modelClass.getModelName(), event);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this._emitter.emit(event.modelClass.getModelName(), event);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Runs a callback with change dispatch coalesced: every change committed while
|
|
78
|
+
* the callback runs buffers, and the outermost batch flushes a single event per
|
|
79
|
+
* changed model class after it resolves. Nested batches share one flush. Sync
|
|
80
|
+
* appliers wrap their per-row apply loop in this so a large pull or realtime
|
|
81
|
+
* push triggers one re-run per live query instead of one per applied row.
|
|
82
|
+
* @template T
|
|
83
|
+
* @param {() => Promise<T> | T} callback - Work whose committed changes should coalesce.
|
|
84
|
+
* @returns {Promise<T>} The callback result.
|
|
85
|
+
*/
|
|
86
|
+
async batch(callback) {
|
|
87
|
+
this._batchDepth++;
|
|
88
|
+
try {
|
|
89
|
+
return await callback();
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
this._batchDepth--;
|
|
93
|
+
if (this._batchDepth === 0)
|
|
94
|
+
this._flushBufferedEvents();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Dispatches and clears the buffered per-model events collected during a batch.
|
|
99
|
+
* @returns {void}
|
|
100
|
+
*/
|
|
101
|
+
_flushBufferedEvents() {
|
|
102
|
+
const bufferedEvents = this._bufferedEvents;
|
|
103
|
+
this._bufferedEvents = new Map();
|
|
104
|
+
for (const event of bufferedEvents.values()) {
|
|
105
|
+
this._emitter.emit(event.modelClass.getModelName(), event);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Shared singleton so record commits and live queries meet on one bus.
|
|
111
|
+
* @type {RecordChanges} */
|
|
112
|
+
const recordChanges = new RecordChanges();
|
|
113
|
+
export default recordChanges;
|
|
114
|
+
export { RecordChanges };
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2UvcmVjb3JkLWNoYW5nZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBRXBEOzs0RUFFNEU7QUFFNUU7O3NFQUVzRTtBQUV0RTs7Ozs7O0dBTUc7QUFFSDs7d0VBRXdFO0FBRXhFOzs7Ozs7R0FNRztBQUNILE1BQU0sYUFBYTtJQUNqQjs7c0RBRWtEO0lBQ2xELFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBRTdCOzt3QkFFb0I7SUFDcEIsV0FBVyxHQUFHLENBQUMsQ0FBQTtJQUVmOztnREFFNEM7SUFDNUMsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFM0I7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVE7UUFDNUIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRTNDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUVyQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN4QyxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUFDLFVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksQ0FBQyxLQUFLO1FBQ1IsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFFaEUsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7UUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBRWxCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtRQUN6QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFFbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUM7Z0JBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0I7UUFDbEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQTtRQUUzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFFaEMsS0FBSyxNQUFNLEtBQUssSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzVELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7MkJBRTJCO0FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUE7QUFFekMsZUFBZSxhQUFhLENBQUE7QUFDNUIsT0FBTyxFQUFDLGFBQWEsRUFBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuXG4vKipcbiAqIFJlY29yZE1vZGVsQ2xhc3MgdHlwZS5cbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gUmVjb3JkTW9kZWxDbGFzcyAqL1xuXG4vKipcbiAqIFJlY29yZENoYW5nZU9wZXJhdGlvbiB0eXBlLlxuICogQHR5cGVkZWYge1wiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCJ9IFJlY29yZENoYW5nZU9wZXJhdGlvbiAqL1xuXG4vKipcbiAqIFJlY29yZENoYW5nZUV2ZW50IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWNvcmRDaGFuZ2VFdmVudFxuICogQHByb3BlcnR5IHtSZWNvcmRNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3Mgd2hvc2Ugcm93IGNoYW5nZWQuXG4gKiBAcHJvcGVydHkge1JlY29yZENoYW5nZU9wZXJhdGlvbn0gb3BlcmF0aW9uIC0gVGhlIGNvbW1pdHRlZCBvcGVyYXRpb24uXG4gKiBAcHJvcGVydHkge0luc3RhbmNlVHlwZTxSZWNvcmRNb2RlbENsYXNzPn0gcmVjb3JkIC0gVGhlIGNvbW1pdHRlZCByZWNvcmQgaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmRDaGFuZ2VMaXN0ZW5lciB0eXBlLlxuICogQHR5cGVkZWYgeyhldmVudDogUmVjb3JkQ2hhbmdlRXZlbnQpID0+IHZvaWR9IFJlY29yZENoYW5nZUxpc3RlbmVyICovXG5cbi8qKlxuICogRnJhbWV3b3JrLWxldmVsIGJ1cyBmb3IgY29tbWl0dGVkIGxvY2FsIG1vZGVsIGNoYW5nZXMuIFJlY29yZHMgZW1pdCBoZXJlIG9uY2VcbiAqIHBlciBjb21taXQgKHNlZSBgVmVsb2Npb3VzRGF0YWJhc2VSZWNvcmQuc2F2ZWAvYGRlc3Ryb3lgKSwgc28gbG9jYWwgd3JpdGVzLFxuICogcHVsbCBhcHBsaWVzLCBhbmQgcmVhbHRpbWUgYXBwbGllcyBjb252ZXJnZSBvbiBvbmUgdW5pZm9ybSBzaWduYWwgdGhhdCBsaXZlXG4gKiBxdWVyaWVzIHN1YnNjcmliZSB0by4gRW1pc3Npb24gaXMga2V5ZWQgYnkgbW9kZWwgbmFtZTsgYSBgYmF0Y2goLi4uKWAgd2luZG93XG4gKiBjb2FsZXNjZXMgYSBidXJzdCBvZiBjb21taXRzIGludG8gYSBzaW5nbGUgZXZlbnQgcGVyIG1vZGVsIGNsYXNzLlxuICovXG5jbGFzcyBSZWNvcmRDaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFVuZGVybHlpbmcgZXZlbnQgYnVzIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCJldmVudGVtaXR0ZXIzXCIpLkV2ZW50RW1pdHRlcn0gKi9cbiAgX2VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICAvKipcbiAgICogTnVtYmVyIG9mIG9wZW4gYmF0Y2ggd2luZG93czsgd2hpbGUgcG9zaXRpdmUsIGVtaXRzIGJ1ZmZlciBpbnN0ZWFkIG9mIGRpc3BhdGNoaW5nLlxuICAgKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBfYmF0Y2hEZXB0aCA9IDBcblxuICAvKipcbiAgICogTGF0ZXN0IGJ1ZmZlcmVkIGV2ZW50IHBlciBtb2RlbCBuYW1lLCBkaXNwYXRjaGVkIG9uY2Ugd2hlbiB0aGUgb3V0ZXJtb3N0IGJhdGNoIGVuZHMuXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBSZWNvcmRDaGFuZ2VFdmVudD59ICovXG4gIF9idWZmZXJlZEV2ZW50cyA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIGEgbGlzdGVuZXIgdG8gY29tbWl0dGVkIGNoYW5nZXMgb2YgYSBtb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtSZWNvcmRNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdG8gb2JzZXJ2ZS5cbiAgICogQHBhcmFtIHtSZWNvcmRDaGFuZ2VMaXN0ZW5lcn0gbGlzdGVuZXIgLSBMaXN0ZW5lciBjYWxsZWQgd2l0aCBlYWNoIGNoYW5nZSBldmVudC5cbiAgICogQHJldHVybnMgeygpID0+IHZvaWR9IFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgKi9cbiAgc3Vic2NyaWJlKG1vZGVsQ2xhc3MsIGxpc3RlbmVyKSB7XG4gICAgY29uc3QgZXZlbnROYW1lID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuXG4gICAgdGhpcy5fZW1pdHRlci5vbihldmVudE5hbWUsIGxpc3RlbmVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuX2VtaXR0ZXIub2ZmKGV2ZW50TmFtZSwgbGlzdGVuZXIpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW55IGxpc3RlbmVyIGlzIGN1cnJlbnRseSBvYnNlcnZpbmcgdGhlIGdpdmVuIG1vZGVsIGNsYXNzLiBDYWxsZXJzIG9uXG4gICAqIHRoZSB3cml0ZSBwYXRoIHVzZSB0aGlzIHRvIHNraXAgZW1pdHRpbmcgZW50aXJlbHkgd2hlbiBub3RoaW5nIGlzIHdhdGNoaW5nLFxuICAgKiBrZWVwaW5nIHNlcnZlci1zaWRlIHNhdmVzIGZyZWUgb2YgbGl2ZS1xdWVyeSBvdmVyaGVhZC5cbiAgICogQHBhcmFtIHtSZWNvcmRNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGxpc3RlbmVycyBleGlzdCBmb3IgdGhlIG1vZGVsIGNsYXNzLlxuICAgKi9cbiAgaGFzTGlzdGVuZXJzKG1vZGVsQ2xhc3MpIHtcbiAgICByZXR1cm4gdGhpcy5fZW1pdHRlci5saXN0ZW5lckNvdW50KG1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCkpID4gMFxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgY29tbWl0dGVkIGNoYW5nZS4gV2hpbGUgYSBiYXRjaCB3aW5kb3cgaXMgb3BlbiB0aGUgZXZlbnQgaXMgYnVmZmVyZWRcbiAgICogYW5kIGRlZHVwbGljYXRlZCBieSBtb2RlbCBjbGFzcywgc28gYSBiYXRjaCBvZiBOIGNvbW1pdHMgZGlzcGF0Y2hlcyBhIHNpbmdsZVxuICAgKiBldmVudCBwZXIgbW9kZWwgY2xhc3Mgd2hlbiB0aGUgb3V0ZXJtb3N0IGJhdGNoIGVuZHMuXG4gICAqIEBwYXJhbSB7UmVjb3JkQ2hhbmdlRXZlbnR9IGV2ZW50IC0gQ2hhbmdlIGV2ZW50IHRvIGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGVtaXQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fYmF0Y2hEZXB0aCA+IDApIHtcbiAgICAgIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnNldChldmVudC5tb2RlbENsYXNzLmdldE1vZGVsTmFtZSgpLCBldmVudClcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KGV2ZW50Lm1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCksIGV2ZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBjYWxsYmFjayB3aXRoIGNoYW5nZSBkaXNwYXRjaCBjb2FsZXNjZWQ6IGV2ZXJ5IGNoYW5nZSBjb21taXR0ZWQgd2hpbGVcbiAgICogdGhlIGNhbGxiYWNrIHJ1bnMgYnVmZmVycywgYW5kIHRoZSBvdXRlcm1vc3QgYmF0Y2ggZmx1c2hlcyBhIHNpbmdsZSBldmVudCBwZXJcbiAgICogY2hhbmdlZCBtb2RlbCBjbGFzcyBhZnRlciBpdCByZXNvbHZlcy4gTmVzdGVkIGJhdGNoZXMgc2hhcmUgb25lIGZsdXNoLiBTeW5jXG4gICAqIGFwcGxpZXJzIHdyYXAgdGhlaXIgcGVyLXJvdyBhcHBseSBsb29wIGluIHRoaXMgc28gYSBsYXJnZSBwdWxsIG9yIHJlYWx0aW1lXG4gICAqIHB1c2ggdHJpZ2dlcnMgb25lIHJlLXJ1biBwZXIgbGl2ZSBxdWVyeSBpbnN0ZWFkIG9mIG9uZSBwZXIgYXBwbGllZCByb3cuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPiB8IFR9IGNhbGxiYWNrIC0gV29yayB3aG9zZSBjb21taXR0ZWQgY2hhbmdlcyBzaG91bGQgY29hbGVzY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSBUaGUgY2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgYmF0Y2goY2FsbGJhY2spIHtcbiAgICB0aGlzLl9iYXRjaERlcHRoKytcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9iYXRjaERlcHRoLS1cblxuICAgICAgaWYgKHRoaXMuX2JhdGNoRGVwdGggPT09IDApIHRoaXMuX2ZsdXNoQnVmZmVyZWRFdmVudHMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlcmVkIHBlci1tb2RlbCBldmVudHMgY29sbGVjdGVkIGR1cmluZyBhIGJhdGNoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9mbHVzaEJ1ZmZlcmVkRXZlbnRzKCkge1xuICAgIGNvbnN0IGJ1ZmZlcmVkRXZlbnRzID0gdGhpcy5fYnVmZmVyZWRFdmVudHNcblxuICAgIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGJ1ZmZlcmVkRXZlbnRzLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9lbWl0dGVyLmVtaXQoZXZlbnQubW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKSwgZXZlbnQpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2hhcmVkIHNpbmdsZXRvbiBzbyByZWNvcmQgY29tbWl0cyBhbmQgbGl2ZSBxdWVyaWVzIG1lZXQgb24gb25lIGJ1cy5cbiAqIEB0eXBlIHtSZWNvcmRDaGFuZ2VzfSAqL1xuY29uc3QgcmVjb3JkQ2hhbmdlcyA9IG5ldyBSZWNvcmRDaGFuZ2VzKClcblxuZXhwb3J0IGRlZmF1bHQgcmVjb3JkQ2hhbmdlc1xuZXhwb3J0IHtSZWNvcmRDaGFuZ2VzfVxuIl19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React hook declaring what a screen shows and keeping it current from committed
|
|
3
|
+
* local model changes. Runs `query.toArray()` once, subscribes to the query's
|
|
4
|
+
* model class(es) on the record-change bus, and re-runs (coalesced, stale-safe)
|
|
5
|
+
* whenever a watched model commits — so local writes, pull applies, and realtime
|
|
6
|
+
* applies all refresh the results without any manual refresh plumbing.
|
|
7
|
+
* @template T
|
|
8
|
+
* @param {(LiveQuerySource<T> & {toSql?: () => ?}) | null | undefined} query - Query source, e.g. `Model.where({...})`.
|
|
9
|
+
* @param {UseLiveQueryOptions} [options] - Hook options.
|
|
10
|
+
* @returns {LiveQueryState<T>} Current results, loading, and last error.
|
|
11
|
+
*/
|
|
12
|
+
export default function useLiveQuery<T>(query: (LiveQuerySource<T> & {
|
|
13
|
+
toSql?: () => unknown;
|
|
14
|
+
}) | null | undefined, options?: UseLiveQueryOptions): LiveQueryState<T>;
|
|
15
|
+
/**
|
|
16
|
+
* RecordModelClass type.
|
|
17
|
+
*/
|
|
18
|
+
export type RecordModelClass = typeof import("./record/index.js").default;
|
|
19
|
+
/**
|
|
20
|
+
* LiveQuerySource type.
|
|
21
|
+
*/
|
|
22
|
+
export type LiveQuerySource<T> = import("./live-query.js").LiveQuerySource<T>;
|
|
23
|
+
/**
|
|
24
|
+
* LiveQueryState type.
|
|
25
|
+
*/
|
|
26
|
+
export type LiveQueryState<T> = import("./live-query.js").LiveQueryState<T>;
|
|
27
|
+
/**
|
|
28
|
+
* UseLiveQueryOptions type.
|
|
29
|
+
*/
|
|
30
|
+
export type UseLiveQueryOptions = {
|
|
31
|
+
/**
|
|
32
|
+
* - Whether the query is active. Default true; pass false to pause and return the empty state.
|
|
33
|
+
*/
|
|
34
|
+
active?: boolean | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* - Trailing debounce in ms for re-runs. Defaults to microtask coalescing.
|
|
37
|
+
*/
|
|
38
|
+
debounce?: number | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* - Model classes to observe. Defaults to the query's model class; pass this to also react to joined models.
|
|
41
|
+
*/
|
|
42
|
+
models?: typeof import("./record/index.js").default[] | undefined;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=use-live-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-live-query.d.ts","sourceRoot":"","sources":["../../../src/database/use-live-query.js"],"names":[],"mappings":"AAoEA;;;;;;;;;;GAUG;AACH,qCALa,CAAC,SACH,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG;IAAC,KAAK,CAAC,EAAE,MAAM,OAAC,CAAA;CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,YAC3D,mBAAmB,GACjB,cAAc,CAAC,CAAC,CAAC,CAwC7B;;;;+BA7GY,cAAc,mBAAmB,EAAE,OAAO;;;;4BAI1C,CAAC,IACD,OAAO,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;;;;2BAI5C,CAAC,IACD,OAAO,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from "react";
|
|
3
|
+
import LiveQuery from "./live-query.js";
|
|
4
|
+
/**
|
|
5
|
+
* RecordModelClass type.
|
|
6
|
+
* @typedef {typeof import("./record/index.js").default} RecordModelClass */
|
|
7
|
+
/**
|
|
8
|
+
* LiveQuerySource type.
|
|
9
|
+
* @template T
|
|
10
|
+
* @typedef {import("./live-query.js").LiveQuerySource<T>} LiveQuerySource */
|
|
11
|
+
/**
|
|
12
|
+
* LiveQueryState type.
|
|
13
|
+
* @template T
|
|
14
|
+
* @typedef {import("./live-query.js").LiveQueryState<T>} LiveQueryState */
|
|
15
|
+
/**
|
|
16
|
+
* UseLiveQueryOptions type.
|
|
17
|
+
* @typedef {object} UseLiveQueryOptions
|
|
18
|
+
* @property {boolean} [active] - Whether the query is active. Default true; pass false to pause and return the empty state.
|
|
19
|
+
* @property {number} [debounce] - Trailing debounce in ms for re-runs. Defaults to microtask coalescing.
|
|
20
|
+
* @property {RecordModelClass[]} [models] - Model classes to observe. Defaults to the query's model class; pass this to also react to joined models.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Stable empty state returned while there is no active query, so a paused hook
|
|
24
|
+
* keeps a referentially stable snapshot for `useSyncExternalStore`.
|
|
25
|
+
* @type {LiveQueryState<?>} */
|
|
26
|
+
const EMPTY_STATE = { error: null, loading: false, results: [] };
|
|
27
|
+
/**
|
|
28
|
+
* Assigns and stores a stable identity key for query sources without a `toSql`.
|
|
29
|
+
* @type {WeakMap<object, string>} */
|
|
30
|
+
const queryIdentityKeys = new WeakMap();
|
|
31
|
+
/**
|
|
32
|
+
* Monotonic counter backing the queryIdentityKeys registry.
|
|
33
|
+
* @type {number} */
|
|
34
|
+
let nextQueryIdentity = 0;
|
|
35
|
+
/**
|
|
36
|
+
* Builds a dependency key identifying a query's semantics so the underlying
|
|
37
|
+
* controller is rebuilt when they change. Model-class queries expose `toSql`, so
|
|
38
|
+
* distinct conditions yield distinct keys; other sources fall back to a stable
|
|
39
|
+
* per-object identity (such sources must be memoized by the caller).
|
|
40
|
+
* @param {LiveQuerySource<?> & {toSql?: () => ?}} query - Query source.
|
|
41
|
+
* @param {RecordModelClass[] | undefined} models - Explicit model classes to observe.
|
|
42
|
+
* @returns {string} Dependency key.
|
|
43
|
+
*/
|
|
44
|
+
function liveQueryDependencyKey(query, models) {
|
|
45
|
+
const modelNames = (models ?? [query.getModelClass()]).map((modelClass) => modelClass.getModelName()).join(",");
|
|
46
|
+
if (typeof query.toSql === "function")
|
|
47
|
+
return `${modelNames}::${String(query.toSql())}`;
|
|
48
|
+
let identityKey = queryIdentityKeys.get(query);
|
|
49
|
+
if (identityKey === undefined) {
|
|
50
|
+
identityKey = `#${++nextQueryIdentity}`;
|
|
51
|
+
queryIdentityKeys.set(query, identityKey);
|
|
52
|
+
}
|
|
53
|
+
return `${modelNames}::${identityKey}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* React hook declaring what a screen shows and keeping it current from committed
|
|
57
|
+
* local model changes. Runs `query.toArray()` once, subscribes to the query's
|
|
58
|
+
* model class(es) on the record-change bus, and re-runs (coalesced, stale-safe)
|
|
59
|
+
* whenever a watched model commits — so local writes, pull applies, and realtime
|
|
60
|
+
* applies all refresh the results without any manual refresh plumbing.
|
|
61
|
+
* @template T
|
|
62
|
+
* @param {(LiveQuerySource<T> & {toSql?: () => ?}) | null | undefined} query - Query source, e.g. `Model.where({...})`.
|
|
63
|
+
* @param {UseLiveQueryOptions} [options] - Hook options.
|
|
64
|
+
* @returns {LiveQueryState<T>} Current results, loading, and last error.
|
|
65
|
+
*/
|
|
66
|
+
export default function useLiveQuery(query, options = {}) {
|
|
67
|
+
const { active = true, debounce, models } = options;
|
|
68
|
+
const enabled = active && Boolean(query);
|
|
69
|
+
const dependencyKey = enabled && query ? liveQueryDependencyKey(query, models) : "disabled";
|
|
70
|
+
const queryRef = useRef(query);
|
|
71
|
+
const modelsRef = useRef(models);
|
|
72
|
+
queryRef.current = query;
|
|
73
|
+
modelsRef.current = models;
|
|
74
|
+
const liveQuery = useMemo(() => {
|
|
75
|
+
if (!enabled || !queryRef.current)
|
|
76
|
+
return null;
|
|
77
|
+
return new LiveQuery({ debounce, models: modelsRef.current, query: queryRef.current });
|
|
78
|
+
}, [dependencyKey, debounce, enabled]);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (!liveQuery)
|
|
81
|
+
return undefined;
|
|
82
|
+
liveQuery.start();
|
|
83
|
+
return () => liveQuery.close();
|
|
84
|
+
}, [liveQuery]);
|
|
85
|
+
const subscribe = useCallback((/** @type {() => void} */ listener) => {
|
|
86
|
+
if (!liveQuery)
|
|
87
|
+
return () => { };
|
|
88
|
+
return liveQuery.subscribe(listener);
|
|
89
|
+
}, [liveQuery]);
|
|
90
|
+
const getSnapshot = useCallback(() => {
|
|
91
|
+
if (!liveQuery)
|
|
92
|
+
return /** @type {LiveQueryState<T>} */ (EMPTY_STATE);
|
|
93
|
+
return liveQuery.getState();
|
|
94
|
+
}, [liveQuery]);
|
|
95
|
+
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxpdmUtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2UvdXNlLWxpdmUtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFFbkYsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkM7OzRFQUU0RTtBQUU1RTs7OzZFQUc2RTtBQUU3RTs7OzJFQUcyRTtBQUUzRTs7Ozs7O0dBTUc7QUFFSDs7OytCQUcrQjtBQUMvQixNQUFNLFdBQVcsR0FBRyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFDLENBQUE7QUFFOUQ7O3FDQUVxQztBQUNyQyxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFdkM7O29CQUVvQjtBQUNwQixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQTtBQUV6Qjs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU07SUFDM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRS9HLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxPQUFPLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBRXZGLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU5QyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixXQUFXLEdBQUcsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUE7UUFDdkMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsT0FBTyxHQUFHLFVBQVUsS0FBSyxXQUFXLEVBQUUsQ0FBQTtBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsRUFBRTtJQUN0RCxNQUFNLEVBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLEdBQUcsT0FBTyxDQUFBO0lBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUE7SUFFM0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVoQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUN4QixTQUFTLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtJQUUxQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQzdCLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRTlDLE9BQU8sSUFBSSxTQUFTLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3RGLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUV0QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUVoQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7UUFFakIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDaEMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUVmLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ25FLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7UUFFL0IsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3RDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFFZixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ25DLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxnQ0FBZ0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXJFLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzdCLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFFZixPQUFPLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3luY0V4dGVybmFsU3RvcmV9IGZyb20gXCJyZWFjdFwiXG5cbmltcG9ydCBMaXZlUXVlcnkgZnJvbSBcIi4vbGl2ZS1xdWVyeS5qc1wiXG5cbi8qKlxuICogUmVjb3JkTW9kZWxDbGFzcyB0eXBlLlxuICogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBSZWNvcmRNb2RlbENsYXNzICovXG5cbi8qKlxuICogTGl2ZVF1ZXJ5U291cmNlIHR5cGUuXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vbGl2ZS1xdWVyeS5qc1wiKS5MaXZlUXVlcnlTb3VyY2U8VD59IExpdmVRdWVyeVNvdXJjZSAqL1xuXG4vKipcbiAqIExpdmVRdWVyeVN0YXRlIHR5cGUuXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vbGl2ZS1xdWVyeS5qc1wiKS5MaXZlUXVlcnlTdGF0ZTxUPn0gTGl2ZVF1ZXJ5U3RhdGUgKi9cblxuLyoqXG4gKiBVc2VMaXZlUXVlcnlPcHRpb25zIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBVc2VMaXZlUXVlcnlPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthY3RpdmVdIC0gV2hldGhlciB0aGUgcXVlcnkgaXMgYWN0aXZlLiBEZWZhdWx0IHRydWU7IHBhc3MgZmFsc2UgdG8gcGF1c2UgYW5kIHJldHVybiB0aGUgZW1wdHkgc3RhdGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2RlYm91bmNlXSAtIFRyYWlsaW5nIGRlYm91bmNlIGluIG1zIGZvciByZS1ydW5zLiBEZWZhdWx0cyB0byBtaWNyb3Rhc2sgY29hbGVzY2luZy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkTW9kZWxDbGFzc1tdfSBbbW9kZWxzXSAtIE1vZGVsIGNsYXNzZXMgdG8gb2JzZXJ2ZS4gRGVmYXVsdHMgdG8gdGhlIHF1ZXJ5J3MgbW9kZWwgY2xhc3M7IHBhc3MgdGhpcyB0byBhbHNvIHJlYWN0IHRvIGpvaW5lZCBtb2RlbHMuXG4gKi9cblxuLyoqXG4gKiBTdGFibGUgZW1wdHkgc3RhdGUgcmV0dXJuZWQgd2hpbGUgdGhlcmUgaXMgbm8gYWN0aXZlIHF1ZXJ5LCBzbyBhIHBhdXNlZCBob29rXG4gKiBrZWVwcyBhIHJlZmVyZW50aWFsbHkgc3RhYmxlIHNuYXBzaG90IGZvciBgdXNlU3luY0V4dGVybmFsU3RvcmVgLlxuICogQHR5cGUge0xpdmVRdWVyeVN0YXRlPD8+fSAqL1xuY29uc3QgRU1QVFlfU1RBVEUgPSB7ZXJyb3I6IG51bGwsIGxvYWRpbmc6IGZhbHNlLCByZXN1bHRzOiBbXX1cblxuLyoqXG4gKiBBc3NpZ25zIGFuZCBzdG9yZXMgYSBzdGFibGUgaWRlbnRpdHkga2V5IGZvciBxdWVyeSBzb3VyY2VzIHdpdGhvdXQgYSBgdG9TcWxgLlxuICogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBzdHJpbmc+fSAqL1xuY29uc3QgcXVlcnlJZGVudGl0eUtleXMgPSBuZXcgV2Vha01hcCgpXG5cbi8qKlxuICogTW9ub3RvbmljIGNvdW50ZXIgYmFja2luZyB0aGUgcXVlcnlJZGVudGl0eUtleXMgcmVnaXN0cnkuXG4gKiBAdHlwZSB7bnVtYmVyfSAqL1xubGV0IG5leHRRdWVyeUlkZW50aXR5ID0gMFxuXG4vKipcbiAqIEJ1aWxkcyBhIGRlcGVuZGVuY3kga2V5IGlkZW50aWZ5aW5nIGEgcXVlcnkncyBzZW1hbnRpY3Mgc28gdGhlIHVuZGVybHlpbmdcbiAqIGNvbnRyb2xsZXIgaXMgcmVidWlsdCB3aGVuIHRoZXkgY2hhbmdlLiBNb2RlbC1jbGFzcyBxdWVyaWVzIGV4cG9zZSBgdG9TcWxgLCBzb1xuICogZGlzdGluY3QgY29uZGl0aW9ucyB5aWVsZCBkaXN0aW5jdCBrZXlzOyBvdGhlciBzb3VyY2VzIGZhbGwgYmFjayB0byBhIHN0YWJsZVxuICogcGVyLW9iamVjdCBpZGVudGl0eSAoc3VjaCBzb3VyY2VzIG11c3QgYmUgbWVtb2l6ZWQgYnkgdGhlIGNhbGxlcikuXG4gKiBAcGFyYW0ge0xpdmVRdWVyeVNvdXJjZTw/PiAmIHt0b1NxbD86ICgpID0+ID99fSBxdWVyeSAtIFF1ZXJ5IHNvdXJjZS5cbiAqIEBwYXJhbSB7UmVjb3JkTW9kZWxDbGFzc1tdIHwgdW5kZWZpbmVkfSBtb2RlbHMgLSBFeHBsaWNpdCBtb2RlbCBjbGFzc2VzIHRvIG9ic2VydmUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZXBlbmRlbmN5IGtleS5cbiAqL1xuZnVuY3Rpb24gbGl2ZVF1ZXJ5RGVwZW5kZW5jeUtleShxdWVyeSwgbW9kZWxzKSB7XG4gIGNvbnN0IG1vZGVsTmFtZXMgPSAobW9kZWxzID8/IFtxdWVyeS5nZXRNb2RlbENsYXNzKCldKS5tYXAoKG1vZGVsQ2xhc3MpID0+IG1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCkpLmpvaW4oXCIsXCIpXG5cbiAgaWYgKHR5cGVvZiBxdWVyeS50b1NxbCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gYCR7bW9kZWxOYW1lc306OiR7U3RyaW5nKHF1ZXJ5LnRvU3FsKCkpfWBcblxuICBsZXQgaWRlbnRpdHlLZXkgPSBxdWVyeUlkZW50aXR5S2V5cy5nZXQocXVlcnkpXG5cbiAgaWYgKGlkZW50aXR5S2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGl0eUtleSA9IGAjJHsrK25leHRRdWVyeUlkZW50aXR5fWBcbiAgICBxdWVyeUlkZW50aXR5S2V5cy5zZXQocXVlcnksIGlkZW50aXR5S2V5KVxuICB9XG5cbiAgcmV0dXJuIGAke21vZGVsTmFtZXN9Ojoke2lkZW50aXR5S2V5fWBcbn1cblxuLyoqXG4gKiBSZWFjdCBob29rIGRlY2xhcmluZyB3aGF0IGEgc2NyZWVuIHNob3dzIGFuZCBrZWVwaW5nIGl0IGN1cnJlbnQgZnJvbSBjb21taXR0ZWRcbiAqIGxvY2FsIG1vZGVsIGNoYW5nZXMuIFJ1bnMgYHF1ZXJ5LnRvQXJyYXkoKWAgb25jZSwgc3Vic2NyaWJlcyB0byB0aGUgcXVlcnknc1xuICogbW9kZWwgY2xhc3MoZXMpIG9uIHRoZSByZWNvcmQtY2hhbmdlIGJ1cywgYW5kIHJlLXJ1bnMgKGNvYWxlc2NlZCwgc3RhbGUtc2FmZSlcbiAqIHdoZW5ldmVyIGEgd2F0Y2hlZCBtb2RlbCBjb21taXRzIOKAlCBzbyBsb2NhbCB3cml0ZXMsIHB1bGwgYXBwbGllcywgYW5kIHJlYWx0aW1lXG4gKiBhcHBsaWVzIGFsbCByZWZyZXNoIHRoZSByZXN1bHRzIHdpdGhvdXQgYW55IG1hbnVhbCByZWZyZXNoIHBsdW1iaW5nLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7KExpdmVRdWVyeVNvdXJjZTxUPiAmIHt0b1NxbD86ICgpID0+ID99KSB8IG51bGwgfCB1bmRlZmluZWR9IHF1ZXJ5IC0gUXVlcnkgc291cmNlLCBlLmcuIGBNb2RlbC53aGVyZSh7Li4ufSlgLlxuICogQHBhcmFtIHtVc2VMaXZlUXVlcnlPcHRpb25zfSBbb3B0aW9uc10gLSBIb29rIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7TGl2ZVF1ZXJ5U3RhdGU8VD59IEN1cnJlbnQgcmVzdWx0cywgbG9hZGluZywgYW5kIGxhc3QgZXJyb3IuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxpdmVRdWVyeShxdWVyeSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBkZWJvdW5jZSwgbW9kZWxzfSA9IG9wdGlvbnNcbiAgY29uc3QgZW5hYmxlZCA9IGFjdGl2ZSAmJiBCb29sZWFuKHF1ZXJ5KVxuICBjb25zdCBkZXBlbmRlbmN5S2V5ID0gZW5hYmxlZCAmJiBxdWVyeSA/IGxpdmVRdWVyeURlcGVuZGVuY3lLZXkocXVlcnksIG1vZGVscykgOiBcImRpc2FibGVkXCJcblxuICBjb25zdCBxdWVyeVJlZiA9IHVzZVJlZihxdWVyeSlcbiAgY29uc3QgbW9kZWxzUmVmID0gdXNlUmVmKG1vZGVscylcblxuICBxdWVyeVJlZi5jdXJyZW50ID0gcXVlcnlcbiAgbW9kZWxzUmVmLmN1cnJlbnQgPSBtb2RlbHNcblxuICBjb25zdCBsaXZlUXVlcnkgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWVuYWJsZWQgfHwgIXF1ZXJ5UmVmLmN1cnJlbnQpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gbmV3IExpdmVRdWVyeSh7ZGVib3VuY2UsIG1vZGVsczogbW9kZWxzUmVmLmN1cnJlbnQsIHF1ZXJ5OiBxdWVyeVJlZi5jdXJyZW50fSlcbiAgfSwgW2RlcGVuZGVuY3lLZXksIGRlYm91bmNlLCBlbmFibGVkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGl2ZVF1ZXJ5KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsaXZlUXVlcnkuc3RhcnQoKVxuXG4gICAgcmV0dXJuICgpID0+IGxpdmVRdWVyeS5jbG9zZSgpXG4gIH0sIFtsaXZlUXVlcnldKVxuXG4gIGNvbnN0IHN1YnNjcmliZSA9IHVzZUNhbGxiYWNrKCgvKiogQHR5cGUgeygpID0+IHZvaWR9ICovIGxpc3RlbmVyKSA9PiB7XG4gICAgaWYgKCFsaXZlUXVlcnkpIHJldHVybiAoKSA9PiB7fVxuXG4gICAgcmV0dXJuIGxpdmVRdWVyeS5zdWJzY3JpYmUobGlzdGVuZXIpXG4gIH0sIFtsaXZlUXVlcnldKVxuXG4gIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbGl2ZVF1ZXJ5KSByZXR1cm4gLyoqIEB0eXBlIHtMaXZlUXVlcnlTdGF0ZTxUPn0gKi8gKEVNUFRZX1NUQVRFKVxuXG4gICAgcmV0dXJuIGxpdmVRdWVyeS5nZXRTdGF0ZSgpXG4gIH0sIFtsaXZlUXVlcnldKVxuXG4gIHJldHVybiB1c2VTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTbmFwc2hvdClcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-api-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync-api-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-api-client.js"],"names":[],"mappings":"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"}
|