prostgles-client 4.0.94 → 4.0.95
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/dist/{SyncedTable.d.ts → SyncedTable/SyncedTable.d.ts} +21 -20
- package/dist/SyncedTable/SyncedTable.d.ts.map +1 -0
- package/dist/{SyncedTable.js → SyncedTable/SyncedTable.js} +8 -53
- package/dist/SyncedTable/getMultiSyncSubscription.d.ts +12 -0
- package/dist/SyncedTable/getMultiSyncSubscription.d.ts.map +1 -0
- package/dist/SyncedTable/getMultiSyncSubscription.js +58 -0
- package/dist/SyncedTable/getSingleSyncSubscription.d.ts +1 -0
- package/dist/SyncedTable/getSingleSyncSubscription.d.ts.map +1 -0
- package/dist/SyncedTable/getSingleSyncSubscription.js +1 -0
- package/dist/index.js +1 -1
- package/dist/index.no-sync.js +1 -1
- package/dist/prostgles-full-cdn.js +1 -1
- package/dist/prostgles-full.d.ts +1 -1
- package/dist/prostgles-full.js +1 -1
- package/dist/prostgles.d.ts +2 -2
- package/dist/prostgles.d.ts.map +1 -1
- package/dist/prostgles.js +25 -10
- package/lib/{SyncedTable.ts → SyncedTable/SyncedTable.ts} +28 -77
- package/lib/SyncedTable/getMultiSyncSubscription.ts +67 -0
- package/lib/SyncedTable/getSingleSyncSubscription.ts +0 -0
- package/lib/prostgles-full-cdn.ts +1 -1
- package/lib/prostgles-full.ts +1 -1
- package/lib/prostgles.ts +29 -13
- package/package.json +1 -1
- package/tests/package-lock.json +1 -1
- package/dist/SyncedTable.d.ts.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FieldFilter, getTextPatch, isEmpty, WAL, WALItem, AnyObject, ClientSyncHandles, SyncBatchParams, ClientSyncInfo, getKeys, isObject, TableHandler, EqualityFilter } from "prostgles-types";
|
|
2
|
-
import { DBHandlerClient } from "
|
|
2
|
+
import { DBHandlerClient } from "../prostgles";
|
|
3
|
+
import { getMultiSyncSubscription } from "./getMultiSyncSubscription";
|
|
3
4
|
|
|
4
5
|
const DEBUG_KEY = "DEBUG_SYNCEDTABLE";
|
|
5
6
|
const hasWnd = typeof window !== "undefined";
|
|
@@ -77,7 +78,7 @@ export type CloneMultiSync<T extends AnyObject> = (
|
|
|
77
78
|
onError?: (error: any) => void
|
|
78
79
|
) => MultiSyncHandles<T>;
|
|
79
80
|
|
|
80
|
-
type $UpdateOpts = {
|
|
81
|
+
export type $UpdateOpts = {
|
|
81
82
|
deepMerge: boolean
|
|
82
83
|
}
|
|
83
84
|
type DeepPartial<T> = T extends Array<any> ? T : T extends object ? {
|
|
@@ -128,7 +129,7 @@ const STORAGE_TYPES = {
|
|
|
128
129
|
|
|
129
130
|
export type MultiChangeListener<T extends AnyObject = AnyObject> = (items: SyncDataItem<T>[], delta: DeepPartial<T>[]) => any;
|
|
130
131
|
export type SingleChangeListener<T extends AnyObject = AnyObject, Full extends boolean = false> = (item: SyncDataItem<T, Full>, delta?: DeepPartial<T>) => any;
|
|
131
|
-
|
|
132
|
+
type StorageType = keyof typeof STORAGE_TYPES;
|
|
132
133
|
export type SyncedTableOptions = {
|
|
133
134
|
name: string;
|
|
134
135
|
filter?: AnyObject;
|
|
@@ -138,11 +139,11 @@ export type SyncedTableOptions = {
|
|
|
138
139
|
pushDebounce?: number;
|
|
139
140
|
skipFirstTrigger?: boolean;
|
|
140
141
|
select?: "*" | {};
|
|
141
|
-
storageType
|
|
142
|
+
storageType?: StorageType;
|
|
142
143
|
|
|
143
144
|
/* If true then only the delta of text field is sent to server */
|
|
144
|
-
patchText
|
|
145
|
-
patchJSON
|
|
145
|
+
patchText?: boolean;
|
|
146
|
+
patchJSON?: boolean;
|
|
146
147
|
onReady: () => any;
|
|
147
148
|
skipIncomingDeltaCheck?: boolean;
|
|
148
149
|
onDebug?: (event: SyncDebugEvent, tbl: SyncedTable) => Promise<void>;
|
|
@@ -196,7 +197,7 @@ export class SyncedTable {
|
|
|
196
197
|
|
|
197
198
|
dbSync?: DbTableSync;
|
|
198
199
|
items: AnyObject[] = [];
|
|
199
|
-
storageType
|
|
200
|
+
storageType?: StorageType;
|
|
200
201
|
itemsObj: AnyObject = {};
|
|
201
202
|
patchText: boolean;
|
|
202
203
|
patchJSON: boolean;
|
|
@@ -371,7 +372,7 @@ export class SyncedTable {
|
|
|
371
372
|
* This will send less data to server
|
|
372
373
|
* @param walData
|
|
373
374
|
*/
|
|
374
|
-
|
|
375
|
+
updatePatches = async (walData: WALItem[]) => {
|
|
375
376
|
let remaining: any[] = walData.map(d => d.current);
|
|
376
377
|
let patched: [any, any][] = [],
|
|
377
378
|
patchedItems: any[] = [];
|
|
@@ -430,7 +431,7 @@ export class SyncedTable {
|
|
|
430
431
|
return remaining.filter(d => d);
|
|
431
432
|
}
|
|
432
433
|
|
|
433
|
-
static create(opts: SyncedTableOptions): Promise<SyncedTable> {
|
|
434
|
+
static create(opts: Omit<SyncedTableOptions, "onReady">): Promise<SyncedTable> {
|
|
434
435
|
return new Promise((resolve, reject) => {
|
|
435
436
|
try {
|
|
436
437
|
const res = new SyncedTable({
|
|
@@ -453,60 +454,10 @@ export class SyncedTable {
|
|
|
453
454
|
* @param handlesOnData If true then $upsert and $unsync handles will be added on each data item. True by default;
|
|
454
455
|
*/
|
|
455
456
|
sync<T extends AnyObject = AnyObject>(onChange: MultiChangeListener<T>, handlesOnData = true): MultiSyncHandles<T> {
|
|
456
|
-
const handles
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
getItems: () => { return this.getItems(); },
|
|
461
|
-
$upsert: (newData) => {
|
|
462
|
-
if (newData) {
|
|
463
|
-
const prepareOne = (d: AnyObject) => {
|
|
464
|
-
return ({
|
|
465
|
-
idObj: this.getIdObj(d),
|
|
466
|
-
delta: d
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
if (Array.isArray(newData)) {
|
|
471
|
-
this.upsert(newData.map(d => prepareOne(d)));
|
|
472
|
-
} else {
|
|
473
|
-
this.upsert([prepareOne(newData)]);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
// this.upsert(newData, newData)
|
|
478
|
-
}
|
|
479
|
-
},
|
|
480
|
-
sub: SubscriptionMulti<T> = {
|
|
481
|
-
_onChange: onChange,
|
|
482
|
-
handlesOnData,
|
|
483
|
-
handles,
|
|
484
|
-
notify: (_allItems, _allDeltas) => {
|
|
485
|
-
let allItems = [..._allItems],
|
|
486
|
-
allDeltas = [..._allDeltas];
|
|
487
|
-
if (handlesOnData) {
|
|
488
|
-
allItems = allItems.map((item, i) => {
|
|
489
|
-
|
|
490
|
-
const getItem = (d: AnyObject, idObj: Partial<T>) => ({
|
|
491
|
-
...d,
|
|
492
|
-
...this.makeSingleSyncHandles(idObj, onChange),
|
|
493
|
-
$get: () => getItem(this.getItem(idObj).data!, idObj),
|
|
494
|
-
$find: (idObject: Partial<T>) => getItem(this.getItem(idObject).data!, idObject),
|
|
495
|
-
$update: (newData: AnyObject, opts: $UpdateOpts): Promise<boolean> => {
|
|
496
|
-
return this.upsert([{ idObj, delta: newData, opts }]).then(r => true);
|
|
497
|
-
},
|
|
498
|
-
$delete: async (): Promise<boolean> => {
|
|
499
|
-
return this.delete(idObj);
|
|
500
|
-
},
|
|
501
|
-
$cloneMultiSync: (onChange: MultiChangeListener) => this.sync(onChange, handlesOnData)
|
|
502
|
-
})
|
|
503
|
-
const idObj = this.getIdObj(item) as Partial<T>;
|
|
504
|
-
return getItem(item, idObj);
|
|
505
|
-
}) as any;
|
|
506
|
-
}
|
|
507
|
-
return onChange(allItems, allDeltas)
|
|
508
|
-
}
|
|
509
|
-
};
|
|
457
|
+
const { sub, handles } = getMultiSyncSubscription.bind(this)({
|
|
458
|
+
onChange: onChange as MultiChangeListener<AnyObject>,
|
|
459
|
+
handlesOnData
|
|
460
|
+
});
|
|
510
461
|
|
|
511
462
|
this.multiSubscriptions.push(sub as any);
|
|
512
463
|
if (!this.skipFirstTrigger) {
|
|
@@ -518,7 +469,7 @@ export class SyncedTable {
|
|
|
518
469
|
return Object.freeze({ ...handles });
|
|
519
470
|
}
|
|
520
471
|
|
|
521
|
-
|
|
472
|
+
makeSingleSyncHandles<T extends AnyObject = AnyObject, Full extends boolean = false>(idObj: Partial<T>, onChange: SingleChangeListener<T, Full> | MultiChangeListener<T>): SingleSyncHandles<T, Full> {
|
|
522
473
|
if (!idObj || !onChange) throw `syncOne(idObj, onChange) -> MISSING idObj or onChange`;
|
|
523
474
|
|
|
524
475
|
const handles: SingleSyncHandles<T, Full> = {
|
|
@@ -598,7 +549,7 @@ export class SyncedTable {
|
|
|
598
549
|
* Notifies multi subs with ALL data + deltas. Attaches handles on data if required
|
|
599
550
|
* @param newData -> updates. Must include id_fields + updates
|
|
600
551
|
*/
|
|
601
|
-
|
|
552
|
+
_notifySubscribers = (changes: Pick<ItemUpdated, "idObj" | "newItem" | "delta">[] = []) => {
|
|
602
553
|
if (!this.isSynced) return;
|
|
603
554
|
|
|
604
555
|
/* Deleted items (changes = []) do not trigger singleSubscriptions notify because it might break things */
|
|
@@ -662,17 +613,17 @@ export class SyncedTable {
|
|
|
662
613
|
return "ok";
|
|
663
614
|
}
|
|
664
615
|
|
|
665
|
-
|
|
616
|
+
getIdStr(d: AnyObject) {
|
|
666
617
|
return this.id_fields.sort().map(key => `${d[key] || ""}`).join(".");
|
|
667
618
|
}
|
|
668
|
-
|
|
619
|
+
getIdObj(d: AnyObject) {
|
|
669
620
|
let res: AnyObject = {};
|
|
670
621
|
this.id_fields.sort().map(key => {
|
|
671
622
|
res[key] = d[key];
|
|
672
623
|
});
|
|
673
624
|
return res;
|
|
674
625
|
}
|
|
675
|
-
|
|
626
|
+
getRowSyncObj(d: AnyObject): AnyObject {
|
|
676
627
|
let res: AnyObject = {};
|
|
677
628
|
[this.synced_field, ...this.id_fields].sort().map(key => {
|
|
678
629
|
res[key] = d[key];
|
|
@@ -693,7 +644,7 @@ export class SyncedTable {
|
|
|
693
644
|
this.onChange = undefined;
|
|
694
645
|
}
|
|
695
646
|
|
|
696
|
-
|
|
647
|
+
matchesFilter(item: AnyObject) {
|
|
697
648
|
return Boolean(
|
|
698
649
|
item &&
|
|
699
650
|
(
|
|
@@ -703,12 +654,12 @@ export class SyncedTable {
|
|
|
703
654
|
)
|
|
704
655
|
);
|
|
705
656
|
}
|
|
706
|
-
|
|
657
|
+
matchesIdObj(a: AnyObject, b: AnyObject) {
|
|
707
658
|
return Boolean(a && b && !this.id_fields.sort().find(k => a[k] !== b[k]));
|
|
708
659
|
}
|
|
709
660
|
|
|
710
661
|
// TODO: offline-first deletes if allow_delete = true
|
|
711
|
-
//
|
|
662
|
+
// setDeleted(idObj, fullArray){
|
|
712
663
|
// let deleted: object[] = [];
|
|
713
664
|
|
|
714
665
|
// if(fullArray) deleted = fullArray;
|
|
@@ -718,11 +669,11 @@ export class SyncedTable {
|
|
|
718
669
|
// }
|
|
719
670
|
// if(hasWnd) window.localStorage.setItem(this.name + "_$$psql$$_deleted", <any>deleted);
|
|
720
671
|
// }
|
|
721
|
-
//
|
|
672
|
+
// getDeleted(){
|
|
722
673
|
// const delStr = if(hasWnd) window.localStorage.getItem(this.name + "_$$psql$$_deleted") || '[]';
|
|
723
674
|
// return JSON.parse(delStr);
|
|
724
675
|
// }
|
|
725
|
-
//
|
|
676
|
+
// syncDeleted = async () => {
|
|
726
677
|
// try {
|
|
727
678
|
// await Promise.all(this.getDeleted().map(async idObj => {
|
|
728
679
|
// return this.db[this.name].delete(idObj);
|
|
@@ -739,7 +690,7 @@ export class SyncedTable {
|
|
|
739
690
|
* @param o current full data item
|
|
740
691
|
* @param n new data item
|
|
741
692
|
*/
|
|
742
|
-
|
|
693
|
+
getDelta(o: AnyObject, n: AnyObject): AnyObject {
|
|
743
694
|
if (isEmpty(o)) return { ...n };
|
|
744
695
|
return Object.keys({ ...o, ...n })
|
|
745
696
|
.filter(k => !this.id_fields.includes(k))
|
|
@@ -765,7 +716,7 @@ export class SyncedTable {
|
|
|
765
716
|
this.getItems().map(d => this.delete(d));
|
|
766
717
|
}
|
|
767
718
|
|
|
768
|
-
|
|
719
|
+
get tableHandler(): Pick<TableHandler, "update" | "updateBatch" | "delete"> | undefined {
|
|
769
720
|
const tblHandler = this.db[this.name];
|
|
770
721
|
if(tblHandler?.update && tblHandler.updateBatch){
|
|
771
722
|
return tblHandler as any;
|
|
@@ -774,7 +725,7 @@ export class SyncedTable {
|
|
|
774
725
|
return undefined;
|
|
775
726
|
}
|
|
776
727
|
|
|
777
|
-
|
|
728
|
+
delete = async (item: AnyObject, from_server = false) => {
|
|
778
729
|
|
|
779
730
|
const idObj = this.getIdObj(item);
|
|
780
731
|
this.setItem(idObj, undefined, true, true);
|
|
@@ -788,7 +739,7 @@ export class SyncedTable {
|
|
|
788
739
|
/**
|
|
789
740
|
* Ensures that all object keys match valid column names
|
|
790
741
|
*/
|
|
791
|
-
|
|
742
|
+
checkItemCols = (item: AnyObject) => {
|
|
792
743
|
if (this.columns && this.columns.length) {
|
|
793
744
|
const badCols = Object.keys({ ...item })
|
|
794
745
|
.filter(k =>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AnyObject } from "prostgles-types";
|
|
2
|
+
import { $UpdateOpts, MultiChangeListener, MultiSyncHandles, SubscriptionMulti, SyncedTable } from "./SyncedTable";
|
|
3
|
+
|
|
4
|
+
type Args = {
|
|
5
|
+
onChange: MultiChangeListener<AnyObject>;
|
|
6
|
+
handlesOnData: boolean;
|
|
7
|
+
}
|
|
8
|
+
export function getMultiSyncSubscription(this: SyncedTable, { onChange, handlesOnData }: Args){
|
|
9
|
+
|
|
10
|
+
const handles: MultiSyncHandles<AnyObject> = {
|
|
11
|
+
$unsync: () => {
|
|
12
|
+
return this.unsubscribe(onChange)
|
|
13
|
+
},
|
|
14
|
+
getItems: () => { return this.getItems(); },
|
|
15
|
+
$upsert: (newData) => {
|
|
16
|
+
if (!newData) {
|
|
17
|
+
throw "No data provided for upsert";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const prepareOne = (d: AnyObject) => {
|
|
21
|
+
return ({
|
|
22
|
+
idObj: this.getIdObj(d),
|
|
23
|
+
delta: d
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (Array.isArray(newData)) {
|
|
28
|
+
this.upsert(newData.map(d => prepareOne(d)));
|
|
29
|
+
} else {
|
|
30
|
+
this.upsert([prepareOne(newData)]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const sub: SubscriptionMulti<AnyObject> = {
|
|
36
|
+
_onChange: onChange,
|
|
37
|
+
handlesOnData,
|
|
38
|
+
handles,
|
|
39
|
+
notify: (_allItems, _allDeltas) => {
|
|
40
|
+
let allItems = [..._allItems],
|
|
41
|
+
allDeltas = [..._allDeltas];
|
|
42
|
+
if (handlesOnData) {
|
|
43
|
+
allItems = allItems.map((item, i) => {
|
|
44
|
+
|
|
45
|
+
const getItem = (d: AnyObject, idObj: Partial<AnyObject>) => ({
|
|
46
|
+
...d,
|
|
47
|
+
...this.makeSingleSyncHandles(idObj, onChange),
|
|
48
|
+
$get: () => getItem(this.getItem(idObj).data!, idObj),
|
|
49
|
+
$find: (idObject: Partial<AnyObject>) => getItem(this.getItem(idObject).data!, idObject),
|
|
50
|
+
$update: (newData: AnyObject, opts: $UpdateOpts): Promise<boolean> => {
|
|
51
|
+
return this.upsert([{ idObj, delta: newData, opts }]).then(r => true);
|
|
52
|
+
},
|
|
53
|
+
$delete: async (): Promise<boolean> => {
|
|
54
|
+
return this.delete(idObj);
|
|
55
|
+
},
|
|
56
|
+
$cloneMultiSync: (onChange: MultiChangeListener) => this.sync(onChange, handlesOnData)
|
|
57
|
+
})
|
|
58
|
+
const idObj = this.getIdObj(item) as Partial<AnyObject>;
|
|
59
|
+
return getItem(item, idObj);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return onChange(allItems, allDeltas)
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return { sub, handles }
|
|
67
|
+
}
|
|
File without changes
|
package/lib/prostgles-full.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { prostgles as pgls, InitOptions } from "./prostgles";
|
|
2
|
-
import { SyncedTable } from "./SyncedTable";
|
|
2
|
+
import { SyncedTable } from "./SyncedTable/SyncedTable";
|
|
3
3
|
function prostgles<DBSchema = void>(params: InitOptions<DBSchema>) {
|
|
4
4
|
return pgls(params as any, SyncedTable);
|
|
5
5
|
}
|
package/lib/prostgles.ts
CHANGED
|
@@ -36,11 +36,12 @@ import {
|
|
|
36
36
|
asName,
|
|
37
37
|
getJoinHandlers,
|
|
38
38
|
getKeys,
|
|
39
|
-
isObject
|
|
39
|
+
isObject,
|
|
40
|
+
omitKeys
|
|
40
41
|
} from "prostgles-types";
|
|
41
42
|
|
|
42
|
-
import { SyncDataItem, SyncOneOptions, SyncOptions, SyncedTable, type DbTableSync, type Sync, type SyncOne } from "./SyncedTable";
|
|
43
|
-
import { getReact, useAsyncEffectQueue, useFetch, useIsMounted, useSubscribe, useSync } from "./react-hooks";
|
|
43
|
+
import { SyncDataItem, SyncOneOptions, SyncOptions, SyncedTable, type DbTableSync, type Sync, type SyncOne } from "./SyncedTable/SyncedTable";
|
|
44
|
+
import { getReact, isEqual, useAsyncEffectQueue, useFetch, useIsMounted, useSubscribe, useSync } from "./react-hooks";
|
|
44
45
|
|
|
45
46
|
const DEBUG_KEY = "DEBUG_SYNCEDTABLE";
|
|
46
47
|
const hasWnd = typeof window !== "undefined";
|
|
@@ -245,7 +246,7 @@ type SyncConfig = CoreParams & {
|
|
|
245
246
|
type Syncs = {
|
|
246
247
|
[channelName: string]: SyncConfig;
|
|
247
248
|
};
|
|
248
|
-
export function prostgles<DBSchema>(initOpts: InitOptions<DBSchema>, syncedTable:
|
|
249
|
+
export function prostgles<DBSchema>(initOpts: InitOptions<DBSchema>, syncedTable: typeof SyncedTable) {
|
|
249
250
|
const { socket, onReady, onDisconnect, onReconnect, onSchemaChange = true, onReload, onDebug } = initOpts;
|
|
250
251
|
let schemaAge: { origin: "onReady" | "onReconnect"; date: Date; } | undefined;
|
|
251
252
|
debug("prostgles", { initOpts })
|
|
@@ -472,8 +473,10 @@ export function prostgles<DBSchema>(initOpts: InitOptions<DBSchema>, syncedTable
|
|
|
472
473
|
s &&
|
|
473
474
|
s.tableName === tableName &&
|
|
474
475
|
s.command === command &&
|
|
475
|
-
|
|
476
|
-
|
|
476
|
+
isEqual(s.param1, param1) &&
|
|
477
|
+
isEqual(s.param2, param2)
|
|
478
|
+
// JSON.stringify(s.param1 || {}) === JSON.stringify(param1 || {}) &&
|
|
479
|
+
// JSON.stringify(s.param2 || {}) === JSON.stringify(param2 || {})
|
|
477
480
|
// s.triggers.find(tr => (
|
|
478
481
|
// tr.onPullRequest === triggers.onPullRequest &&
|
|
479
482
|
// tr.onSyncRequest === triggers.onSyncRequest &&
|
|
@@ -487,7 +490,7 @@ export function prostgles<DBSchema>(initOpts: InitOptions<DBSchema>, syncedTable
|
|
|
487
490
|
return makeHandler(existingChannel);
|
|
488
491
|
} else {
|
|
489
492
|
const sync_info = await addServerSync({ tableName, command, param1, param2 }, onSyncRequest);
|
|
490
|
-
const { channelName
|
|
493
|
+
const { channelName } = sync_info;
|
|
491
494
|
function onCall(data: any | undefined, cb: Function) {
|
|
492
495
|
/*
|
|
493
496
|
Client will:
|
|
@@ -897,25 +900,38 @@ export function prostgles<DBSchema>(initOpts: InitOptions<DBSchema>, syncedTable
|
|
|
897
900
|
if (syncedTable) {
|
|
898
901
|
dboTable.getSync = async (filter, params = {}) => {
|
|
899
902
|
await onDebug?.({ type: "table", command: "getSync", tableName, data: { filter, params } });
|
|
900
|
-
return syncedTable.create({
|
|
903
|
+
return syncedTable.create({
|
|
904
|
+
name: tableName,
|
|
905
|
+
onDebug: onDebug as any,
|
|
906
|
+
filter,
|
|
907
|
+
db: dbo,
|
|
908
|
+
...params
|
|
909
|
+
});
|
|
901
910
|
}
|
|
902
|
-
const
|
|
903
|
-
const syncName = `${tableName}.${JSON.stringify(basicFilter)}.${JSON.stringify(options)}`
|
|
911
|
+
const upsertSyncTable = async (basicFilter = {}, options: SyncOptions = {}, onError) => {
|
|
912
|
+
const syncName = `${tableName}.${JSON.stringify(basicFilter)}.${JSON.stringify(omitKeys(options, ["handlesOnData"]))}`
|
|
904
913
|
if (!syncedTables[syncName]) {
|
|
905
|
-
syncedTables[syncName] = await syncedTable.create({
|
|
914
|
+
syncedTables[syncName] = await syncedTable.create({
|
|
915
|
+
...options,
|
|
916
|
+
onDebug: onDebug as any,
|
|
917
|
+
name: tableName,
|
|
918
|
+
filter: basicFilter,
|
|
919
|
+
db: dbo,
|
|
920
|
+
onError
|
|
921
|
+
});
|
|
906
922
|
}
|
|
907
923
|
return syncedTables[syncName]
|
|
908
924
|
}
|
|
909
925
|
const sync: Sync<AnyObject> = async (basicFilter, options = { handlesOnData: true, select: "*" }, onChange, onError) => {
|
|
910
926
|
await onDebug?.({ type: "table", command: "sync", tableName, data: { basicFilter, options } });
|
|
911
927
|
checkSubscriptionArgs(basicFilter, options, onChange, onError);
|
|
912
|
-
const s = await
|
|
928
|
+
const s = await upsertSyncTable(basicFilter, options, onError);
|
|
913
929
|
return await s.sync(onChange, options.handlesOnData);
|
|
914
930
|
}
|
|
915
931
|
const syncOne: SyncOne<AnyObject> = async (basicFilter, options = { handlesOnData: true }, onChange, onError) => {
|
|
916
932
|
await onDebug?.({ type: "table", command: "syncOne", tableName, data: { basicFilter, options } });
|
|
917
933
|
checkSubscriptionArgs(basicFilter, options, onChange, onError);
|
|
918
|
-
const s = await
|
|
934
|
+
const s = await upsertSyncTable(basicFilter, options, onError);
|
|
919
935
|
return await s.syncOne(basicFilter, onChange, options.handlesOnData);
|
|
920
936
|
}
|
|
921
937
|
dboTable.sync = sync;
|
package/package.json
CHANGED
package/tests/package-lock.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyncedTable.d.ts","sourceRoot":"","sources":["../lib/SyncedTable.ts"],"names":[],"mappings":"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"}
|