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.
@@ -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 "./prostgles";
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: keyof typeof STORAGE_TYPES;
142
+ storageType?: StorageType;
142
143
 
143
144
  /* If true then only the delta of text field is sent to server */
144
- patchText: boolean;
145
- patchJSON: boolean;
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: string;
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
- private updatePatches = async (walData: WALItem[]) => {
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: MultiSyncHandles<T> = {
457
- $unsync: () => {
458
- return this.unsubscribe(onChange)
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
- private makeSingleSyncHandles<T extends AnyObject = AnyObject, Full extends boolean = false>(idObj: Partial<T>, onChange: SingleChangeListener<T, Full> | MultiChangeListener<T>): SingleSyncHandles<T, Full> {
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
- private _notifySubscribers = (changes: Pick<ItemUpdated, "idObj" | "newItem" | "delta">[] = []) => {
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
- private getIdStr(d: AnyObject) {
616
+ getIdStr(d: AnyObject) {
666
617
  return this.id_fields.sort().map(key => `${d[key] || ""}`).join(".");
667
618
  }
668
- private getIdObj(d: AnyObject) {
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
- private getRowSyncObj(d: AnyObject): AnyObject {
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
- private matchesFilter(item: AnyObject) {
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
- private matchesIdObj(a: AnyObject, b: AnyObject) {
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
- // private setDeleted(idObj, fullArray){
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
- // private getDeleted(){
672
+ // getDeleted(){
722
673
  // const delStr = if(hasWnd) window.localStorage.getItem(this.name + "_$$psql$$_deleted") || '[]';
723
674
  // return JSON.parse(delStr);
724
675
  // }
725
- // private syncDeleted = async () => {
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
- private getDelta(o: AnyObject, n: AnyObject): AnyObject {
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
- private get tableHandler(): Pick<TableHandler, "update" | "updateBatch" | "delete"> | undefined {
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
- private delete = async (item: AnyObject, from_server = false) => {
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
- private checkItemCols = (item: AnyObject) => {
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
@@ -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
  export function prostgles (params: InitOptions) {
4
4
  return pgls(params as any, SyncedTable);
5
5
  }
@@ -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: any) {
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
- JSON.stringify(s.param1 || {}) === JSON.stringify(param1 || {}) &&
476
- JSON.stringify(s.param2 || {}) === JSON.stringify(param2 || {})
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, synced_field, id_fields } = sync_info;
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({ name: tableName, onDebug, filter, db: dbo, ...params });
903
+ return syncedTable.create({
904
+ name: tableName,
905
+ onDebug: onDebug as any,
906
+ filter,
907
+ db: dbo,
908
+ ...params
909
+ });
901
910
  }
902
- const upsertSTable = async (basicFilter = {}, options = {}, onError) => {
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({ ...options, onDebug, name: tableName, filter: basicFilter, db: dbo, onError });
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 upsertSTable(basicFilter, options, onError);
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 upsertSTable(basicFilter, options, onError);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-client",
3
- "version": "4.0.94",
3
+ "version": "4.0.95",
4
4
  "description": "Reactive client for Postgres",
5
5
  "main": "dist/prostgles-full.js",
6
6
  "types": "dist/prostgles-full.d.ts",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "..": {
19
19
  "name": "prostgles-client",
20
- "version": "4.0.93",
20
+ "version": "4.0.94",
21
21
  "license": "MIT",
22
22
  "dependencies": {
23
23
  "prostgles-types": "^4.0.73"
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncedTable.d.ts","sourceRoot":"","sources":["../lib/SyncedTable.ts"],"names":[],"mappings":"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"}