prostgles-server 4.2.534 → 4.2.537

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.
Files changed (64) hide show
  1. package/dist/Auth/AuthHandler.js +1 -1
  2. package/dist/Auth/AuthHandler.js.map +1 -1
  3. package/dist/Auth/getClientAuth.js +2 -2
  4. package/dist/Auth/getClientAuth.js.map +1 -1
  5. package/dist/DboBuilder/DboBuilder.d.ts +1 -1
  6. package/dist/DboBuilder/DboBuilderTypes.d.ts +3 -1
  7. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  8. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +3 -1
  9. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  10. package/dist/DboBuilder/TableHandler/TableHandler.js +20 -6
  11. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  12. package/dist/DboBuilder/runSql/runSqlUtils.d.ts +1 -1
  13. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
  14. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.js +0 -4
  15. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.js.map +1 -1
  16. package/dist/JSONBSchemaValidation/validateJSONBSchemaSQL.d.ts +1 -1
  17. package/dist/Logging.d.ts +4 -1
  18. package/dist/Logging.d.ts.map +1 -1
  19. package/dist/PubSubManager/PubSubManager.d.ts +5 -4
  20. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  21. package/dist/PubSubManager/PubSubManager.js +4 -2
  22. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  23. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.d.ts +11 -0
  24. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.d.ts.map +1 -0
  25. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.js +25 -0
  26. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.js.map +1 -0
  27. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.d.ts +14 -0
  28. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.d.ts.map +1 -0
  29. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.js +19 -0
  30. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.js.map +1 -0
  31. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.d.ts +8 -0
  32. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.d.ts.map +1 -0
  33. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.js +9 -0
  34. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.js.map +1 -0
  35. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts +40 -0
  36. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts.map +1 -0
  37. package/dist/{SyncReplication.js → PubSubManager/SyncReplication/getSyncUtilFunctions.js} +84 -214
  38. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js.map +1 -0
  39. package/dist/{SyncReplication.d.ts → PubSubManager/SyncReplication/syncData.d.ts} +4 -4
  40. package/dist/PubSubManager/SyncReplication/syncData.d.ts.map +1 -0
  41. package/dist/PubSubManager/SyncReplication/syncData.js +131 -0
  42. package/dist/PubSubManager/SyncReplication/syncData.js.map +1 -0
  43. package/dist/PubSubManager/addSync.d.ts.map +1 -1
  44. package/dist/PubSubManager/addSync.js +15 -10
  45. package/dist/PubSubManager/addSync.js.map +1 -1
  46. package/dist/WebsocketAPI/onSocketConnected.js +1 -1
  47. package/dist/WebsocketAPI/onSocketConnected.js.map +1 -1
  48. package/lib/Auth/AuthHandler.ts +1 -1
  49. package/lib/Auth/getClientAuth.ts +2 -2
  50. package/lib/DboBuilder/DboBuilderTypes.ts +2 -1
  51. package/lib/DboBuilder/TableHandler/TableHandler.ts +26 -8
  52. package/lib/DboBuilder/schema/getTablesForSchemaPostgresSQL.ts +0 -4
  53. package/lib/Logging.ts +13 -1
  54. package/lib/PubSubManager/PubSubManager.ts +7 -5
  55. package/lib/PubSubManager/SyncReplication/fetchSyncServerData.ts +55 -0
  56. package/lib/PubSubManager/SyncReplication/getSyncBatchOptions.ts +31 -0
  57. package/lib/PubSubManager/SyncReplication/getSyncOrderByAndFields.ts +11 -0
  58. package/lib/{SyncReplication.ts → PubSubManager/SyncReplication/getSyncUtilFunctions.ts} +144 -310
  59. package/lib/PubSubManager/SyncReplication/syncData.ts +194 -0
  60. package/lib/PubSubManager/addSync.ts +19 -20
  61. package/lib/WebsocketAPI/onSocketConnected.ts +7 -7
  62. package/package.json +2 -2
  63. package/dist/SyncReplication.d.ts.map +0 -1
  64. package/dist/SyncReplication.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchSyncServerData.js","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/fetchSyncServerData.ts"],"names":[],"mappings":";;;AAIA,uEAAoE;AACpE,+DAA4D;AAErD,MAAM,mBAAmB,GAAG,KAAK,EACtC,EACE,YAAY,EACZ,MAAM,EACN,WAAW,EACX,MAAM,GAMP,EACD,EACE,MAAM,EACN,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,EACV,WAAW,GAIZ,EACD,EAAE;IACF,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,yCAAmB,EAAC;QAC9C,MAAM;QACN,SAAS;QACT,MAAM;QACN,YAAY;QACZ,UAAU;QACV,WAAW;QACX,MAAM;KACP,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CACvC,eAAe,EACf;QACE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,IAAA,iDAAuB,EAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU;QACxE,MAAM;QACN,KAAK,EAAE,UAAU;KAClB,EACD,SAAS,EACT,WAAW,EACX,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,CAC1B,CAAC;IAEF,OAAO,SAAwB,CAAC;AAClC,CAAC,CAAC;AA/CW,QAAA,mBAAmB,uBA+C9B"}
@@ -0,0 +1,14 @@
1
+ import type { SyncParams } from "../PubSubManager";
2
+ export declare const getSyncBatchOptions: ({ from_synced, offset, filter, id_fields, params, synced_field, batch_size, }: Pick<SyncParams, "filter" | "params" | "id_fields" | "synced_field" | "batch_size"> & {
3
+ from_synced: number | undefined;
4
+ offset: number | undefined;
5
+ }) => {
6
+ select: import("prostgles-types").FieldFilter;
7
+ orderBy: {
8
+ [x: string]: import("prostgles-types").AscOrDesc;
9
+ };
10
+ offset: number;
11
+ limit: number;
12
+ syncBatchFilter: import("prostgles-types").EqualityFilter<import("prostgles-types").AnyObject>;
13
+ };
14
+ //# sourceMappingURL=getSyncBatchOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncBatchOptions.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncBatchOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,eAAO,MAAM,mBAAmB,GAAI,+EAQjC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,GAAG,YAAY,CAAC,GAAG;IACvF,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;;;;;;;;CAgBA,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSyncBatchOptions = void 0;
4
+ const getSyncOrderByAndFields_1 = require("./getSyncOrderByAndFields");
5
+ const getSyncBatchOptions = ({ from_synced, offset = 0, filter, id_fields, params, synced_field, batch_size, }) => {
6
+ const syncBatchFilter = from_synced === undefined ? filter : ({
7
+ ...filter,
8
+ [synced_field]: { $gte: from_synced },
9
+ });
10
+ return {
11
+ select: params.select,
12
+ orderBy: (0, getSyncOrderByAndFields_1.getSyncOrderByAndFields)({ synced_field, id_fields }).orderByAsc,
13
+ offset,
14
+ limit: batch_size,
15
+ syncBatchFilter,
16
+ };
17
+ };
18
+ exports.getSyncBatchOptions = getSyncBatchOptions;
19
+ //# sourceMappingURL=getSyncBatchOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncBatchOptions.js","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncBatchOptions.ts"],"names":[],"mappings":";;;AACA,uEAAoE;AAE7D,MAAM,mBAAmB,GAAG,CAAC,EAClC,WAAW,EACX,MAAM,GAAG,CAAC,EACV,MAAM,EACN,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,GAIX,EAAE,EAAE;IACH,MAAM,eAAe,GACnB,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CACnC;QACE,GAAG,MAAM;QACT,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACtC,CACF,CAAC;IAEJ,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,IAAA,iDAAuB,EAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU;QACxE,MAAM;QACN,KAAK,EAAE,UAAU;QACjB,eAAe;KAChB,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,mBAAmB,uBA2B9B"}
@@ -0,0 +1,8 @@
1
+ import type { SyncParams } from "../PubSubManager";
2
+ export declare const getSyncOrderByAndFields: ({ synced_field, id_fields, }: Pick<SyncParams, "id_fields" | "synced_field">) => {
3
+ orderByAsc: {
4
+ [x: string]: import("prostgles-types").AscOrDesc;
5
+ };
6
+ sync_fields: string[];
7
+ };
8
+ //# sourceMappingURL=getSyncOrderByAndFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncOrderByAndFields.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncOrderByAndFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,uBAAuB,GAAI,8BAGrC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,cAAc,CAAC;;;;;CAIhD,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSyncOrderByAndFields = void 0;
4
+ const getSyncOrderByAndFields = ({ synced_field, id_fields, }) => {
5
+ const sync_fields = [synced_field, ...id_fields.sort()], orderByAsc = sync_fields.reduce((a, v) => ({ ...a, [v]: true }), {});
6
+ return { orderByAsc, sync_fields };
7
+ };
8
+ exports.getSyncOrderByAndFields = getSyncOrderByAndFields;
9
+ //# sourceMappingURL=getSyncOrderByAndFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncOrderByAndFields.js","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncOrderByAndFields.ts"],"names":[],"mappings":";;;AAGO,MAAM,uBAAuB,GAAG,CAAC,EACtC,YAAY,EACZ,SAAS,GACsC,EAAE,EAAE;IACnD,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EACrD,UAAU,GAAY,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC,CAAC;AAPW,QAAA,uBAAuB,2BAOlC"}
@@ -0,0 +1,40 @@
1
+ import { type AnyObject, type SyncBatchParams } from "prostgles-types";
2
+ import type { PRGLIOSocket } from "../../DboBuilder/DboBuilder";
3
+ import type { TableHandler } from "../../DboBuilder/TableHandler/TableHandler";
4
+ import type { PubSubManager, SyncParams } from "../PubSubManager";
5
+ import type { ClientSyncInfo, ServerSyncInfo, SyncBatchInfo } from "./syncData";
6
+ type Args = {
7
+ socket: PRGLIOSocket;
8
+ tableHandler: TableHandler;
9
+ sync: SyncParams;
10
+ pubSubManager: PubSubManager;
11
+ };
12
+ export declare const getSyncUtilFunctions: ({ socket, tableHandler, sync, pubSubManager }: Args) => {
13
+ rowsIdsMatch: (a?: AnyObject, b?: AnyObject) => boolean | undefined;
14
+ rowsFullyMatch: (a?: AnyObject, b?: AnyObject) => boolean | undefined;
15
+ getServerRowInfo: (args?: SyncBatchParams) => Promise<ServerSyncInfo>;
16
+ getClientRowInfo: (args?: SyncBatchInfo) => Promise<Partial<{
17
+ c_fr: AnyObject;
18
+ c_lr: AnyObject;
19
+ c_count: number | string;
20
+ }>>;
21
+ getClientData: (from_synced?: number, offset?: number) => Promise<AnyObject[]>;
22
+ getServerData: (from_synced?: number, offset?: number) => Promise<AnyObject[]>;
23
+ deleteData: (deleted: AnyObject[]) => Promise<void>;
24
+ upsertData: (data: AnyObject[]) => Promise<{
25
+ inserted: number;
26
+ updated: number;
27
+ total: number;
28
+ }>;
29
+ pushData: (data: AnyObject[], isSynced?: boolean) => Promise<{
30
+ pushed: number;
31
+ resp: {
32
+ ok: boolean;
33
+ };
34
+ }>;
35
+ getLastSynced: (clientSyncInfo?: ClientSyncInfo) => Promise<number | null>;
36
+ updateSyncLR: (data: AnyObject[]) => void;
37
+ syncBatch: (from_synced: SyncBatchInfo["from_synced"]) => Promise<boolean>;
38
+ };
39
+ export {};
40
+ //# sourceMappingURL=getSyncUtilFunctions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncUtilFunctions.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncUtilFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EACV,cAAc,EAEd,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,+CAA+C,IAAI;uBAchE,SAAS,MAAM,SAAS;yBAGtB,SAAS,MAAM,SAAS;8BAGd,eAAe,KAAQ,OAAO,CAAC,cAAc,CAAC;8BA6BpD,aAAa;;;;;8DAoBQ,OAAO,CAAC,SAAS,EAAE,CAAC;8DAmCd,OAAO,CAAC,SAAS,EAAE,CAAC;0BAM5C,SAAS,EAAE;uBA4Bd,SAAS,EAAE;;;;;qBA8Fb,SAAS,EAAE;gBAGvB,MAAM;cACR;YACJ,EAAE,EAAE,OAAO,CAAC;SACb;;qCAiCmC,cAAc,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;yBA4EzD,SAAS,EAAE;6BAmBD,aAAa,CAAC,aAAa,CAAC;CA8F/D,CAAC"}
@@ -1,57 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.syncData = syncData;
3
+ exports.getSyncUtilFunctions = void 0;
4
4
  const prostgles_types_1 = require("prostgles-types");
5
- const PubSubManagerUtils_1 = require("./PubSubManager/PubSubManagerUtils");
6
- function getNumbers(numberArr) {
7
- return numberArr.filter((v) => v !== null && v !== undefined && Number.isFinite(+v));
8
- }
9
- /**
10
- * Server or client requested data sync
11
- */
12
- async function syncData(sync, clientData, source) {
13
- await this._log({
14
- type: "sync",
15
- command: "syncData",
16
- tableName: sync.table_name,
17
- sid: sync.sid,
18
- source,
19
- ...(0, prostgles_types_1.pickKeys)(sync, ["socket_id", "condition", "last_synced", "is_syncing"]),
20
- lr: JSON.stringify(sync.lr),
21
- connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
22
- localParams: undefined,
23
- duration: -1,
24
- socketId: sync.socket_id,
25
- });
26
- const { socket_id, channel_name, table_name, filter, table_rules, params, synced_field, id_fields = [], batch_size, wal, throttle = 0, } = sync;
27
- const socket = this.sockets[socket_id];
28
- if (!socket) {
29
- return;
30
- }
31
- const tableHandler = this.dbo[table_name];
32
- if (!tableHandler?.find) {
33
- throw `dbo.${table_name}.find missing or not allowed`;
34
- }
35
- const sync_fields = [synced_field, ...id_fields.sort()], orderByAsc = sync_fields.reduce((a, v) => ({ ...a, [v]: true }), {}), rowsIdsMatch = (a, b) => {
5
+ const getSyncOrderByAndFields_1 = require("./getSyncOrderByAndFields");
6
+ const fetchSyncServerData_1 = require("./fetchSyncServerData");
7
+ const PubSubManagerUtils_1 = require("../PubSubManagerUtils");
8
+ const getSyncUtilFunctions = ({ socket, tableHandler, sync, pubSubManager }) => {
9
+ const { synced_field, socket_id, id_fields, filter, table_rules, batch_size, channel_name, table_name, params, } = sync;
10
+ const { orderByAsc, sync_fields } = (0, getSyncOrderByAndFields_1.getSyncOrderByAndFields)({ synced_field, id_fields }), rowsIdsMatch = (a, b) => {
36
11
  return a && b && !id_fields.find((key) => a[key].toString() !== b[key].toString());
37
12
  }, rowsFullyMatch = (a, b) => {
38
13
  return rowsIdsMatch(a, b) && a?.[synced_field].toString() === b?.[synced_field].toString();
39
14
  }, getServerRowInfo = async (args = {}) => {
40
- const { from_synced = null, to_synced = null, offset = 0, limit } = args;
41
- const _filter = { ...filter };
42
- if (from_synced || to_synced) {
43
- _filter[synced_field] = {
44
- ...(from_synced ? { $gte: from_synced } : {}),
45
- ...(to_synced ? { $lte: to_synced } : {}),
15
+ const { from_synced, to_synced, offset = 0, limit } = args;
16
+ const batchFilter = { ...filter };
17
+ if ((0, prostgles_types_1.isDefined)(from_synced) || (0, prostgles_types_1.isDefined)(to_synced)) {
18
+ batchFilter[synced_field] = {
19
+ ...((0, prostgles_types_1.isDefined)(from_synced) ? { $gte: from_synced } : {}),
20
+ ...((0, prostgles_types_1.isDefined)(to_synced) ? { $lte: to_synced } : {}),
46
21
  };
47
22
  }
48
- const first_rows = await tableHandler.find(_filter, { orderBy: orderByAsc, select: sync_fields, limit, offset }, undefined, table_rules, { clientReq: { socket } });
23
+ const first_rows = (await tableHandler.find(batchFilter, { orderBy: orderByAsc, select: sync_fields, limit, offset }, undefined, table_rules, { clientReq: { socket } }));
49
24
  const last_rows = first_rows.slice(-1); // Why not logic below?
50
25
  // const last_rows = await _this?.dbo[table_name]?.find?.(_filter, { orderBy: (orderByDesc as OrderBy), select: sync_fields, limit: 1, offset: -offset || 0 }, null, table_rules);
51
- const count = await tableHandler.count(_filter, undefined, undefined, table_rules);
26
+ const count = await tableHandler.count(batchFilter, undefined, undefined, table_rules);
52
27
  return {
53
- s_fr: first_rows[0] || null,
54
- s_lr: last_rows[0] || null,
28
+ s_fr: first_rows[0],
29
+ s_lr: last_rows[0],
55
30
  s_count: count,
56
31
  };
57
32
  }, getClientRowInfo = (args = {}) => {
@@ -101,23 +76,7 @@ async function syncData(sync, clientData, source) {
101
76
  });
102
77
  }
103
78
  }, getServerData = async (from_synced = 0, offset = 0) => {
104
- const _filter = {
105
- ...filter,
106
- [synced_field]: { $gte: from_synced || 0 },
107
- };
108
- try {
109
- const res = await tableHandler.find(_filter, {
110
- select: params.select,
111
- orderBy: orderByAsc,
112
- offset: offset || 0,
113
- limit: batch_size,
114
- }, undefined, table_rules, { clientReq: { socket } });
115
- return res;
116
- }
117
- catch (e) {
118
- console.error("Sync getServerData failed: ", e);
119
- throw "INTERNAL ERROR";
120
- }
79
+ return (0, fetchSyncServerData_1.fetchSyncServerData)({ tableHandler, socket, from_synced, offset }, { filter, id_fields, params, synced_field, batch_size, table_rules });
121
80
  }, deleteData = async (deleted) => {
122
81
  // console.log("deleteData deleteData deleteData " + deleted.length);
123
82
  // if (allow_delete) {
@@ -125,7 +84,7 @@ async function syncData(sync, clientData, source) {
125
84
  // deleted.map(async (d) => {
126
85
  // const id_filter = pickKeys(d, id_fields);
127
86
  // try {
128
- // await (this.dbo[table_name] as TableHandler).delete(
87
+ // await (pubSubManager.dbo[table_name] as TableHandler).delete(
129
88
  // id_filter,
130
89
  // undefined,
131
90
  // undefined,
@@ -148,44 +107,35 @@ async function syncData(sync, clientData, source) {
148
107
  */
149
108
  upsertData = async (data) => {
150
109
  const start = Date.now();
151
- const result = await this.dboBuilder
110
+ const result = await pubSubManager.dboBuilder
152
111
  .getTX(async (dbTX) => {
153
112
  const tableHandlerTx = dbTX[table_name];
154
113
  const existingData = await tableHandlerTx.find({ $or: data.map((d) => (0, prostgles_types_1.pickKeys)(d, id_fields)) }, {
155
114
  select: [synced_field, ...id_fields],
156
115
  orderBy: orderByAsc,
157
116
  }, undefined, table_rules, { clientReq: { socket } });
158
- let inserts = data.filter((d) => !existingData.find((ed) => rowsIdsMatch(ed, d)));
159
- let updates = data.filter((d) => existingData.find((ed) => rowsIdsMatch(ed, d) && +ed[synced_field] < +d[synced_field]));
160
- try {
161
- if (!table_rules)
162
- throw "table_rules missing";
163
- if (table_rules.update && updates.length) {
164
- const updateData = [];
165
- await Promise.all(updates.map((upd) => {
166
- const id_filter = (0, prostgles_types_1.pickKeys)(upd, id_fields);
167
- const syncSafeFilter = {
168
- $and: [id_filter, { [synced_field]: { "<": upd[synced_field] } }],
169
- };
170
- updateData.push([syncSafeFilter, (0, prostgles_types_1.omitKeys)(upd, id_fields)]);
171
- }));
172
- await tableHandlerTx.updateBatch(updateData, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
173
- }
174
- else {
175
- updates = [];
176
- }
177
- if (table_rules.insert && inserts.length) {
178
- await tableHandlerTx.insert(inserts, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
179
- }
180
- else {
181
- inserts = [];
182
- }
183
- return { inserts, updates };
117
+ let rowsToInsert = data.filter((d) => !existingData.find((ed) => rowsIdsMatch(ed, d)));
118
+ let rowsToUpdate = data.filter((d) => existingData.find((ed) => rowsIdsMatch(ed, d) && Number(ed[synced_field]) < Number(d[synced_field])));
119
+ if (table_rules.update && rowsToUpdate.length) {
120
+ const batchUpdates = rowsToUpdate.map((rowToUpdate) => {
121
+ const id_filter = (0, prostgles_types_1.pickKeys)(rowToUpdate, id_fields);
122
+ const syncSafeFilter = {
123
+ $and: [id_filter, { [synced_field]: { "<": rowToUpdate[synced_field] } }],
124
+ };
125
+ return [syncSafeFilter, (0, prostgles_types_1.omitKeys)(rowToUpdate, id_fields)];
126
+ });
127
+ await tableHandlerTx.updateBatch(batchUpdates, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
184
128
  }
185
- catch (e) {
186
- console.trace(e);
187
- throw e;
129
+ else {
130
+ rowsToUpdate = [];
131
+ }
132
+ if (table_rules.insert && rowsToInsert.length) {
133
+ await tableHandlerTx.insert(rowsToInsert, { removeDisallowedFields: true }, undefined, table_rules, { clientReq: { socket } });
188
134
  }
135
+ else {
136
+ rowsToInsert = [];
137
+ }
138
+ return { inserts: rowsToInsert, updates: rowsToUpdate };
189
139
  })
190
140
  .then(({ inserts, updates }) => {
191
141
  (0, PubSubManagerUtils_1.log)(`upsertData: inserted( ${inserts.length} ) updated( ${updates.length} ) total( ${data.length} ) \n last insert ${JSON.stringify(inserts.at(-1))} \n last update ${JSON.stringify(updates.at(-1))}`);
@@ -199,15 +149,17 @@ async function syncData(sync, clientData, source) {
199
149
  console.trace("Something went wrong with syncing to server: " + err.message, data.length, id_fields);
200
150
  return Promise.reject(new Error("Something went wrong with syncing to server: "));
201
151
  });
202
- await this._log({
152
+ await pubSubManager._log({
203
153
  type: "sync",
204
154
  command: "upsertData",
155
+ channelName: channel_name,
205
156
  tableName: sync.table_name,
206
157
  rows: data.length,
207
158
  socketId: socket_id,
208
159
  sid: sync.sid,
209
160
  duration: Date.now() - start,
210
- connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
161
+ connectedSocketIds: pubSubManager.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
162
+ syncParams: sync,
211
163
  });
212
164
  return result;
213
165
  },
@@ -215,13 +167,13 @@ async function syncData(sync, clientData, source) {
215
167
  * Pushes the given data to client
216
168
  * @param isSynced = true if
217
169
  */
218
- pushData = async (data, isSynced = false, err = null) => {
170
+ pushData = async (data, isSynced = false) => {
219
171
  const start = Date.now();
220
172
  const result = await new Promise((resolve, reject) => {
221
173
  socket.emit(channel_name, { data, isSynced }, (resp) => {
222
174
  if (resp && resp.ok) {
223
175
  // console.log("PUSHED to client: fr/lr", data[0], data[data.length - 1]);
224
- resolve({ pushed: data?.length, resp });
176
+ resolve({ pushed: data.length, resp });
225
177
  }
226
178
  else {
227
179
  reject(resp);
@@ -229,15 +181,17 @@ async function syncData(sync, clientData, source) {
229
181
  }
230
182
  });
231
183
  });
232
- await this._log({
184
+ await pubSubManager._log({
233
185
  type: "sync",
234
186
  command: "pushData",
235
187
  tableName: sync.table_name,
236
- rows: data?.length ?? 0,
188
+ rows: data.length,
237
189
  socketId: socket_id,
238
190
  duration: Date.now() - start,
239
191
  sid: sync.sid,
240
- connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
192
+ connectedSocketIds: pubSubManager.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
193
+ channelName: channel_name,
194
+ syncParams: sync,
241
195
  });
242
196
  return result;
243
197
  },
@@ -291,7 +245,7 @@ async function syncData(sync, clientData, source) {
291
245
  sync_fields.map((key) => {
292
246
  _filter[key] = c_lr[key];
293
247
  });
294
- server_row = await this.dbo[table_name]?.find(_filter, { select: sync_fields, limit: 1 }, undefined, table_rules, { clientReq: { socket } });
248
+ server_row = await tableHandler.find(_filter, { select: sync_fields, limit: 1 }, undefined, table_rules, { clientReq: { socket } });
295
249
  }
296
250
  // if(rowsFullyMatch(c_lr, s_lr)){ //c_count === s_count &&
297
251
  if (server_row && server_row.length) {
@@ -309,23 +263,24 @@ async function syncData(sync, clientData, source) {
309
263
  }
310
264
  return result;
311
265
  }, updateSyncLR = (data) => {
312
- if (data.length) {
313
- const lastRow = data[data.length - 1];
314
- if (sync.lr?.[synced_field] && +sync.lr[synced_field] > +lastRow[synced_field]) {
315
- console.error({
316
- syncIssue: "sync.lr[synced_field] is greater than lastRow[synced_field]",
317
- }, sync.table_name);
318
- }
319
- sync.lr = lastRow;
320
- sync.last_synced = +sync.lr?.[synced_field];
266
+ const lastRow = data.at(-1);
267
+ if (!lastRow) {
268
+ return;
269
+ }
270
+ if (sync.lr?.[synced_field] && +sync.lr[synced_field] > +lastRow[synced_field]) {
271
+ console.error({
272
+ syncIssue: "sync.lr[synced_field] is greater than lastRow[synced_field]",
273
+ }, sync.table_name);
321
274
  }
275
+ sync.lr = lastRow;
276
+ sync.last_synced = +sync.lr[synced_field];
322
277
  },
323
278
  /**
324
279
  * Will push pull sync between client and server from a given from_synced value
325
280
  */
326
281
  syncBatch = async (from_synced) => {
327
282
  let offset = 0, canContinue = true;
328
- const limit = batch_size, min_synced = from_synced || 0, max_synced = from_synced;
283
+ const limit = batch_size, min_synced = from_synced || 0;
329
284
  let inserted = 0, updated = 0, pushed = 0, total = 0;
330
285
  const deleted = 0;
331
286
  // console.log("syncBatch", from_synced)
@@ -342,7 +297,7 @@ async function syncData(sync, clientData, source) {
342
297
  }
343
298
  catch (e) {
344
299
  console.trace("sync getServerData err", e);
345
- await pushData(undefined, undefined, "Internal error. Check server logs");
300
+ // await pushData(undefined, undefined, "Internal error. Check server logs");
346
301
  throw " d";
347
302
  }
348
303
  // TODO: Implement delete ensuring:
@@ -354,7 +309,7 @@ async function syncData(sync, clientData, source) {
354
309
  // await Promise.all(
355
310
  // to_delete.map((d) => {
356
311
  // deleted++;
357
- // return (this.dbo[table_name] as TableHandler).delete(
312
+ // return (pubSubManager.dbo[table_name] as TableHandler).delete(
358
313
  // pickKeys(d, id_fields),
359
314
  // {},
360
315
  // undefined,
@@ -376,113 +331,28 @@ async function syncData(sync, clientData, source) {
376
331
  total += serverData.length;
377
332
  }
378
333
  offset += serverData.length;
379
- // canContinue = offset >= limit;
380
334
  canContinue = serverData.length >= limit;
381
- // console.log(`sData ${sData.length} limit ${limit}`);
382
335
  }
383
336
  (0, PubSubManagerUtils_1.log)(`server.syncBatch ${table_name}: inserted( ${inserted} ) updated( ${updated} ) deleted( ${deleted} ) pushed to client( ${pushed} ) total( ${total} )`, socket._user);
384
337
  return true;
385
338
  };
386
- if (!wal) {
387
- /* Used to throttle and merge incomming updates */
388
- sync.wal = new prostgles_types_1.WAL({
389
- id_fields,
390
- synced_field,
391
- throttle,
392
- batch_size,
393
- DEBUG_MODE: this.dboBuilder.prostgles.opts.DEBUG_MODE,
394
- onSendStart: () => {
395
- sync.is_syncing = true;
396
- },
397
- onSend: async (data) => {
398
- // console.log("WAL upsertData START", data)
399
- const res = await upsertData(data);
400
- // const max_incoming_synced = Math.max(...data.map(d => +d[synced_field]));
401
- // if(Number.isFinite(max_incoming_synced) && max_incoming_synced > +sync.last_synced){
402
- // sync.last_synced = max_incoming_synced;
403
- // }
404
- // console.log("WAL upsertData END")
405
- /******** */
406
- /* TO DO -> Store and push patch updates instead of full data if and where possible */
407
- /******** */
408
- // 1. Store successfully upserted wal items for a couple of seconds
409
- // 2. When pushing data to clients check if any matching wal items exist
410
- // 3. Replace text fields with matching patched data
411
- return res;
412
- },
413
- onSendEnd: (batch) => {
414
- updateSyncLR(batch);
415
- sync.is_syncing = false;
416
- // console.log("syncData from WAL.onSendEnd")
417
- /**
418
- * After all data was inserted request SyncInfo from client and sync again if necessary
419
- */
420
- void this.syncData(sync, undefined, source);
421
- },
422
- });
423
- }
424
- /* Debounce sync requests */
425
- if (!sync.wal)
426
- throw "sync.wal missing";
427
- if (!sync.wal.isSending() && sync.is_syncing) {
428
- if (!this.syncTimeout) {
429
- this.syncTimeout = setTimeout(() => {
430
- this.syncTimeout = undefined;
431
- // console.log("SYNC FROM TIMEOUT")
432
- void this.syncData(sync, undefined, source);
433
- }, throttle);
434
- }
435
- // console.log("SYNC THROTTLE")
436
- return;
437
- }
438
- // console.log("syncData", clientData)
439
- /**
440
- * Express data sent from a client that has already been synced
441
- * Add to WAL manager which will sync at the end
442
- */
443
- if (clientData) {
444
- if (clientData.data && Array.isArray(clientData.data) && clientData.data.length) {
445
- return sync.wal.addData(clientData.data.map((d) => ({ current: d })));
446
- // await upsertData(clientData.data, true);
447
- /* Not expecting this anymore. use normal db.table.delete channel */
448
- }
449
- else if (clientData.deleted &&
450
- Array.isArray(clientData.deleted) &&
451
- clientData.deleted.length) {
452
- await deleteData(clientData.deleted);
453
- }
454
- }
455
- else {
456
- // do nothing
457
- }
458
- if (sync.wal.isSending())
459
- return;
460
- sync.is_syncing = true;
461
- // from synced does not make sense. It should be sync.lr only!!!
462
- let from_synced = null;
463
- /** Sync was already synced */
464
- if (sync.lr) {
465
- const { s_lr } = await getServerRowInfo();
466
- /* Make sure trigger is not firing on freshly synced data */
467
- if (!rowsFullyMatch(sync.lr, s_lr)) {
468
- from_synced = sync.last_synced;
469
- }
470
- else {
471
- // console.log("rowsFullyMatch")
472
- }
473
- // console.log(table_name, sync.lr[synced_field])
474
- }
475
- else {
476
- from_synced = await getLastSynced(clientData);
477
- }
478
- if (from_synced !== null) {
479
- await syncBatch(from_synced);
480
- }
481
- else {
482
- // console.log("from_synced is null")
483
- }
484
- await pushData([], true);
485
- sync.is_syncing = false;
486
- // console.log(`Finished sync for ${table_name}`, socket._user);
339
+ return {
340
+ rowsIdsMatch,
341
+ rowsFullyMatch,
342
+ getServerRowInfo,
343
+ getClientRowInfo,
344
+ getClientData,
345
+ getServerData,
346
+ deleteData,
347
+ upsertData,
348
+ pushData,
349
+ getLastSynced,
350
+ updateSyncLR,
351
+ syncBatch,
352
+ };
353
+ };
354
+ exports.getSyncUtilFunctions = getSyncUtilFunctions;
355
+ function getNumbers(numberArr) {
356
+ return numberArr.filter((v) => v !== null && v !== undefined && Number.isFinite(+v));
487
357
  }
488
- //# sourceMappingURL=SyncReplication.js.map
358
+ //# sourceMappingURL=getSyncUtilFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSyncUtilFunctions.js","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/getSyncUtilFunctions.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import type { AnyObject } from "prostgles-types";
2
- import type { PubSubManager, SyncParams } from "./PubSubManager/PubSubManager";
2
+ import type { PubSubManager, SyncParams } from "../PubSubManager";
3
3
  export type ClientSyncInfo = Partial<{
4
4
  c_fr: AnyObject;
5
5
  c_lr: AnyObject;
6
6
  /**
7
- * PG count is ussually string due to bigint
7
+ * PG count is usually string due to bigint
8
8
  */
9
9
  c_count: number | string;
10
10
  }>;
@@ -12,7 +12,7 @@ export type ServerSyncInfo = Partial<{
12
12
  s_fr: AnyObject;
13
13
  s_lr: AnyObject;
14
14
  /**
15
- * PG count is ussually string due to bigint
15
+ * PG count is usually string due to bigint
16
16
  */
17
17
  s_count: number | string;
18
18
  }>;
@@ -34,4 +34,4 @@ export type ClientExpressData = ClientSyncInfo & {
34
34
  * Server or client requested data sync
35
35
  */
36
36
  export declare function syncData(this: PubSubManager, sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"): Promise<void>;
37
- //# sourceMappingURL=SyncReplication.d.ts.map
37
+ //# sourceMappingURL=syncData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncData.d.ts","sourceRoot":"","sources":["../../../lib/PubSubManager/SyncReplication/syncData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIlE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAC7B;IACE,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC,GACD;IACE,GAAG,EAAE,SAAS,GAAG,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,MAAM,EAAE,SAAS,GAAG,QAAQ,iBA8I7B"}