prostgles-client 4.0.357 → 4.0.359
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/SyncedTable.d.ts +15 -46
- package/dist/SyncedTable/SyncedTable.d.ts.map +1 -1
- package/dist/SyncedTable/SyncedTable.js +59 -223
- package/dist/SyncedTable/createSync.d.ts +9 -0
- package/dist/SyncedTable/createSync.d.ts.map +1 -0
- package/dist/SyncedTable/createSync.js +190 -0
- package/dist/SyncedTable/createSyncDataStore.d.ts +19 -0
- package/dist/SyncedTable/createSyncDataStore.d.ts.map +1 -0
- package/dist/SyncedTable/createSyncDataStore.js +127 -0
- package/dist/SyncedTable/createSyncStateUtils.d.ts +25 -0
- package/dist/SyncedTable/createSyncStateUtils.d.ts.map +1 -0
- package/dist/SyncedTable/createSyncStateUtils.js +146 -0
- package/dist/SyncedTable/createSyncSubscriptionManager.d.ts +11 -0
- package/dist/SyncedTable/createSyncSubscriptionManager.d.ts.map +1 -0
- package/dist/SyncedTable/createSyncSubscriptionManager.js +230 -0
- package/dist/getDbHandler.d.ts.map +1 -1
- package/dist/getDbHandler.js +13 -26
- package/dist/getSyncHandler.d.ts +2 -2
- package/dist/getSyncHandler.d.ts.map +1 -1
- package/dist/getSyncHandler.js +31 -20
- package/dist/getSyncHandlerV2.d.ts +14 -0
- package/dist/getSyncHandlerV2.d.ts.map +1 -0
- package/dist/getSyncHandlerV2.js +41 -0
- package/dist/index.js +1 -1
- package/dist/index.no-sync.js +1 -1
- package/dist/prostgles.d.ts +13 -7
- package/dist/prostgles.d.ts.map +1 -1
- package/dist/prostgles.js +0 -1
- package/package.json +2 -2
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { WAL } from "prostgles-types";
|
|
1
|
+
import type { AnyObject, EqualityFilter, FieldFilter, NormalizedRow, SyncBatchParams, TableHandler, ValidatedColumnInfo } from "prostgles-types";
|
|
3
2
|
import type { DBHandlerClient, SyncDebugEvent } from "../prostgles";
|
|
4
|
-
|
|
3
|
+
import { WAL } from "prostgles-types/dist/WAL";
|
|
5
4
|
type OmittedSyncProps = "onDebug" | "name" | "filter" | "db" | "onError";
|
|
6
5
|
export type SyncOptions = Partial<Omit<SyncedTableOptions, OmittedSyncProps>> & {
|
|
7
6
|
select?: FieldFilter;
|
|
@@ -14,18 +13,18 @@ export type OnErrorHandler = (error: any) => void;
|
|
|
14
13
|
/**
|
|
15
14
|
* Creates a local synchronized table
|
|
16
15
|
*/
|
|
17
|
-
export type OnChange<T extends Record<string, unknown>, Opts extends SyncOptions> = (data: SyncDataItem<T, Opts>[], delta?: Partial<T
|
|
16
|
+
export type OnChange<T extends Record<string, unknown>, Opts extends SyncOptions> = (data: SyncDataItem<T, Opts>[], delta?: Partial<NormalizedRow<T>>[]) => any;
|
|
18
17
|
export type SyncHandler<T> = {
|
|
19
18
|
$unsync: () => void;
|
|
20
19
|
$upsert: (newData: T[]) => void | Promise<void>;
|
|
21
20
|
getItems: () => T[];
|
|
22
21
|
};
|
|
23
22
|
export type Sync<T extends AnyObject = AnyObject> = <TD extends T, Opts extends SyncOptions>(basicFilter: EqualityFilter<TD>, options: SyncOptions, onChange: OnChange<TD, Opts>, onError?: OnErrorHandler) => Promise<SyncHandler<TD>>;
|
|
24
|
-
export type
|
|
23
|
+
export type OnChangeOne<T extends Record<string, unknown>, Opts extends SyncOptions> = (data: SyncDataItem<T, Opts>, delta?: Partial<NormalizedRow<T>>) => void | Promise<void>;
|
|
25
24
|
/**
|
|
26
25
|
* Creates a local synchronized record
|
|
27
26
|
*/
|
|
28
|
-
export type SyncOne<T extends AnyObject = AnyObject> = <TD extends T, Opts extends
|
|
27
|
+
export type SyncOne<T extends AnyObject = AnyObject> = <TD extends T, Opts extends SyncOneOptions>(basicFilter: Partial<TD>, options: Opts, onChange: OnChangeOne<TD, Opts>, onError?: OnErrorHandler) => Promise<SingleSyncHandles<TD, Opts["handlesOnData"]>>;
|
|
29
28
|
export type SyncBatchRequest = {
|
|
30
29
|
from_synced?: string | number;
|
|
31
30
|
to_synced?: string | number;
|
|
@@ -74,7 +73,7 @@ export type MultiSyncHandles<T extends AnyObject> = {
|
|
|
74
73
|
};
|
|
75
74
|
export type SubscriptionSingle<T extends AnyObject = AnyObject, Full extends boolean = false> = {
|
|
76
75
|
_onChange: SingleChangeListener<T, Full>;
|
|
77
|
-
notify: (data: T, delta?: DeepPartial<T
|
|
76
|
+
notify: (data: T, delta?: DeepPartial<NormalizedRow<T>>) => void | Promise<void>;
|
|
78
77
|
idObj: Partial<T>;
|
|
79
78
|
handlesOnData?: boolean;
|
|
80
79
|
handles?: SingleSyncHandles<T, Full>;
|
|
@@ -86,15 +85,10 @@ export type SubscriptionMulti<T extends AnyObject = AnyObject> = {
|
|
|
86
85
|
handlesOnData?: boolean;
|
|
87
86
|
handles?: MultiSyncHandles<T>;
|
|
88
87
|
};
|
|
89
|
-
declare const STORAGE_TYPES: {
|
|
90
|
-
readonly map: "map";
|
|
91
|
-
readonly localStorage: "localStorage";
|
|
92
|
-
};
|
|
93
88
|
export type MultiChangeListener<T extends AnyObject = AnyObject> = (items: NormalizedRow<T>[], delta: DeepPartial<T>[]) => any;
|
|
94
89
|
export type SingleChangeListener<T extends AnyObject = AnyObject, Full extends boolean | undefined = false> = (item: SyncDataItem<T, {
|
|
95
90
|
handlesOnData: Full;
|
|
96
|
-
}>, delta?: DeepPartial<T
|
|
97
|
-
type StorageType = keyof typeof STORAGE_TYPES;
|
|
91
|
+
}>, delta?: DeepPartial<NormalizedRow<T>>) => void | Promise<void>;
|
|
98
92
|
export type SyncedTableOptions = {
|
|
99
93
|
/**
|
|
100
94
|
* Table name
|
|
@@ -103,7 +97,7 @@ export type SyncedTableOptions = {
|
|
|
103
97
|
/**
|
|
104
98
|
* Basic filter
|
|
105
99
|
*/
|
|
106
|
-
filter
|
|
100
|
+
filter: undefined | EqualityFilter<AnyObject>;
|
|
107
101
|
/**
|
|
108
102
|
* Data change listener.
|
|
109
103
|
* Called on first sync and every time the data changes
|
|
@@ -111,24 +105,10 @@ export type SyncedTableOptions = {
|
|
|
111
105
|
onChange?: MultiChangeListener;
|
|
112
106
|
onError?: OnErrorHandler;
|
|
113
107
|
db: DBHandlerClient | Partial<DBHandlerClient>;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
*/
|
|
117
|
-
skipFirstTrigger?: boolean;
|
|
118
|
-
select?: "*" | AnyObject;
|
|
119
|
-
/**
|
|
120
|
-
* Default is "object".
|
|
121
|
-
* "localStorage" will persist the data
|
|
122
|
-
*/
|
|
123
|
-
storageType?: StorageType;
|
|
124
|
-
/**
|
|
125
|
-
* If true then only the delta of the text field is sent to server.
|
|
126
|
-
* Full text is sent if an error occurs
|
|
127
|
-
*/
|
|
128
|
-
patchText?: boolean;
|
|
129
|
-
patchJSON?: boolean;
|
|
108
|
+
select: FieldFilter | undefined;
|
|
109
|
+
columns: ValidatedColumnInfo[];
|
|
130
110
|
onReady: () => void;
|
|
131
|
-
onDebug?: (event: SyncDebugEvent
|
|
111
|
+
onDebug?: (event: SyncDebugEvent) => Promise<void> | void;
|
|
132
112
|
};
|
|
133
113
|
export type DbTableSync = {
|
|
134
114
|
unsync: () => void;
|
|
@@ -137,14 +117,12 @@ export type DbTableSync = {
|
|
|
137
117
|
export declare class SyncedTable {
|
|
138
118
|
db: DBHandlerClient | Partial<DBHandlerClient>;
|
|
139
119
|
name: string;
|
|
140
|
-
select?:
|
|
141
|
-
filter?: AnyObject
|
|
142
|
-
onChange?: MultiChangeListener;
|
|
120
|
+
select?: FieldFilter;
|
|
121
|
+
filter?: EqualityFilter<AnyObject>;
|
|
143
122
|
id_fields: string[];
|
|
144
123
|
synced_field: string;
|
|
145
124
|
throttle: number;
|
|
146
125
|
batch_size: number;
|
|
147
|
-
skipFirstTrigger: boolean;
|
|
148
126
|
columns: {
|
|
149
127
|
name: string;
|
|
150
128
|
data_type: string;
|
|
@@ -161,20 +139,11 @@ export declare class SyncedTable {
|
|
|
161
139
|
set singleSubscriptions(sSubs: SubscriptionSingle[]);
|
|
162
140
|
get singleSubscriptions(): SubscriptionSingle[];
|
|
163
141
|
dbSync?: DbTableSync;
|
|
164
|
-
storageType?: StorageType;
|
|
165
142
|
itemsMap: Map<string, AnyObject>;
|
|
166
|
-
patchText: boolean;
|
|
167
|
-
patchJSON: boolean;
|
|
168
143
|
isSynced: boolean;
|
|
169
144
|
onError: SyncedTableOptions["onError"];
|
|
170
|
-
onDebug?: (evt: Omit<SyncDebugEvent, "type" | "tableName" | "channelName" | "
|
|
171
|
-
constructor(
|
|
172
|
-
/**
|
|
173
|
-
* Will update text/json fields through patching method
|
|
174
|
-
* This will send less data to server
|
|
175
|
-
* @param walData
|
|
176
|
-
*/
|
|
177
|
-
updatePatches: (walData: WALItem[]) => Promise<any[]>;
|
|
145
|
+
onDebug?: (evt: Omit<SyncDebugEvent, "type" | "tableName" | "channelName" | "options">) => Promise<void> | void;
|
|
146
|
+
constructor(options: SyncedTableOptions);
|
|
178
147
|
static create(opts: Omit<SyncedTableOptions, "onReady">): Promise<SyncedTable>;
|
|
179
148
|
/**
|
|
180
149
|
* Returns a sync handler to all records within the SyncedTable instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncedTable.d.ts","sourceRoot":"","sources":["../../lib/SyncedTable/SyncedTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"SyncedTable.d.ts","sourceRoot":"","sources":["../../lib/SyncedTable/SyncedTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,103 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.quickClone = exports.mergeDeep = exports.SyncedTable =
|
|
3
|
+
exports.quickClone = exports.mergeDeep = exports.SyncedTable = void 0;
|
|
4
4
|
const prostgles_types_1 = require("prostgles-types");
|
|
5
5
|
const getMultiSyncSubscription_1 = require("./getMultiSyncSubscription");
|
|
6
|
-
const
|
|
6
|
+
const WAL_1 = require("prostgles-types/dist/WAL");
|
|
7
7
|
const hasWnd = typeof window !== "undefined";
|
|
8
|
-
const debug = function (...args) {
|
|
9
|
-
if (hasWnd && window[DEBUG_KEY]) {
|
|
10
|
-
window[DEBUG_KEY](...args);
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
exports.debug = debug;
|
|
14
|
-
const STORAGE_TYPES = {
|
|
15
|
-
map: "map",
|
|
16
|
-
localStorage: "localStorage",
|
|
17
|
-
// object: "object",
|
|
18
|
-
};
|
|
19
8
|
class SyncedTable {
|
|
20
9
|
/**
|
|
21
10
|
* add debug mode to fix sudden no data and sync listeners bug
|
|
22
11
|
*/
|
|
23
12
|
set multiSubscriptions(mSubs) {
|
|
24
|
-
(0, exports.debug)(mSubs, this._multiSubscriptions);
|
|
25
13
|
this._multiSubscriptions = mSubs.slice(0);
|
|
26
14
|
}
|
|
27
15
|
get multiSubscriptions() {
|
|
28
16
|
return this._multiSubscriptions;
|
|
29
17
|
}
|
|
30
18
|
set singleSubscriptions(sSubs) {
|
|
31
|
-
(0, exports.debug)(sSubs, this._singleSubscriptions);
|
|
32
19
|
this._singleSubscriptions = sSubs.slice(0);
|
|
33
20
|
}
|
|
34
21
|
get singleSubscriptions() {
|
|
35
22
|
return this._singleSubscriptions;
|
|
36
23
|
}
|
|
37
|
-
constructor(
|
|
24
|
+
constructor(options) {
|
|
25
|
+
var _a;
|
|
38
26
|
this.throttle = 100;
|
|
39
27
|
this.batch_size = 50;
|
|
40
|
-
this.skipFirstTrigger = false;
|
|
41
28
|
this.columns = [];
|
|
42
29
|
this._multiSubscriptions = [];
|
|
43
30
|
this._singleSubscriptions = [];
|
|
44
31
|
this.itemsMap = new Map();
|
|
45
32
|
this.isSynced = false;
|
|
46
|
-
/**
|
|
47
|
-
* Will update text/json fields through patching method
|
|
48
|
-
* This will send less data to server
|
|
49
|
-
* @param walData
|
|
50
|
-
*/
|
|
51
|
-
this.updatePatches = async (walData) => {
|
|
52
|
-
var _a, _b;
|
|
53
|
-
let remaining = walData.map((d) => d.current);
|
|
54
|
-
const patched = [], patchedItems = [];
|
|
55
|
-
if (this.columns.length &&
|
|
56
|
-
((_a = this.tableHandler) === null || _a === void 0 ? void 0 : _a.updateBatch) &&
|
|
57
|
-
(this.patchText || this.patchJSON)) {
|
|
58
|
-
// const jCols = this.columns.filter(c => c.data_type === "json")
|
|
59
|
-
const txtCols = this.columns.filter((c) => c.data_type === "text");
|
|
60
|
-
if (this.patchText && txtCols.length) {
|
|
61
|
-
remaining = [];
|
|
62
|
-
const id_keys = [this.synced_field, ...this.id_fields];
|
|
63
|
-
await Promise.all(walData.slice(0).map(async (d, i) => {
|
|
64
|
-
const { current, initial } = { ...d };
|
|
65
|
-
let patchedDelta;
|
|
66
|
-
if (initial) {
|
|
67
|
-
txtCols.map((c) => {
|
|
68
|
-
if (!id_keys.includes(c.name) && c.name in current) {
|
|
69
|
-
patchedDelta !== null && patchedDelta !== void 0 ? patchedDelta : (patchedDelta = { ...current });
|
|
70
|
-
patchedDelta[c.name] = (0, prostgles_types_1.getTextPatch)(initial[c.name], current[c.name]);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
if (patchedDelta && this.wal) {
|
|
74
|
-
patchedItems.push(patchedDelta);
|
|
75
|
-
patched.push([this.wal.getIdObj(patchedDelta), this.wal.getDeltaObj(patchedDelta)]);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// console.log("json-stable-stringify ???")
|
|
79
|
-
if (!patchedDelta) {
|
|
80
|
-
remaining.push(current);
|
|
81
|
-
}
|
|
82
|
-
}));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* There is a decent chance the patch update will fail.
|
|
87
|
-
* As such, to prevent sync batch update failures, the patched updates are updated separately.
|
|
88
|
-
* If patch update fails then sync batch normally without patch.
|
|
89
|
-
*/
|
|
90
|
-
if (patched.length) {
|
|
91
|
-
try {
|
|
92
|
-
await ((_b = this.tableHandler) === null || _b === void 0 ? void 0 : _b.updateBatch(patched));
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
console.log("failed to patch update", e);
|
|
96
|
-
remaining = remaining.concat(patchedItems);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return remaining.filter((d) => d);
|
|
100
|
-
};
|
|
101
33
|
/**
|
|
102
34
|
* Notifies multi subs with ALL data + deltas. Attaches handles on data if required
|
|
103
35
|
* @param newData -> updates. Must include id_fields + updates
|
|
@@ -132,22 +64,13 @@ class SyncedTable {
|
|
|
132
64
|
ids.push(idObj);
|
|
133
65
|
}
|
|
134
66
|
});
|
|
135
|
-
if (this.
|
|
67
|
+
if (this.multiSubscriptions.length) {
|
|
136
68
|
const allItems = [], allDeltas = [];
|
|
137
69
|
this.getItems().map((d) => {
|
|
138
70
|
allItems.push({ ...d });
|
|
139
71
|
const dIdx = items.findIndex((_d) => this.matchesIdObj(d, _d));
|
|
140
72
|
allDeltas.push(deltas[dIdx]);
|
|
141
73
|
});
|
|
142
|
-
/* Notify main subscription */
|
|
143
|
-
if (this.onChange) {
|
|
144
|
-
try {
|
|
145
|
-
this.onChange(allItems, allDeltas);
|
|
146
|
-
}
|
|
147
|
-
catch (e) {
|
|
148
|
-
console.error("SyncedTable failed to notify onChange: ", e);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
74
|
/* Multisubs must not forget about the original filter */
|
|
152
75
|
this.multiSubscriptions.map(async (s) => {
|
|
153
76
|
try {
|
|
@@ -162,7 +85,6 @@ class SyncedTable {
|
|
|
162
85
|
this.unsubscribe = (onChange) => {
|
|
163
86
|
this.singleSubscriptions = this.singleSubscriptions.filter((s) => s._onChange !== onChange);
|
|
164
87
|
this.multiSubscriptions = this.multiSubscriptions.filter((s) => s._onChange !== onChange);
|
|
165
|
-
(0, exports.debug)("unsubscribe", this);
|
|
166
88
|
return "ok";
|
|
167
89
|
};
|
|
168
90
|
this.unsync = () => {
|
|
@@ -174,7 +96,6 @@ class SyncedTable {
|
|
|
174
96
|
this.multiSubscriptions = [];
|
|
175
97
|
this.singleSubscriptions = [];
|
|
176
98
|
this.itemsMap.clear();
|
|
177
|
-
this.onChange = undefined;
|
|
178
99
|
};
|
|
179
100
|
this.delete = async (item, from_server = false) => {
|
|
180
101
|
var _a;
|
|
@@ -318,53 +239,27 @@ class SyncedTable {
|
|
|
318
239
|
*/
|
|
319
240
|
this.setItems = (_items) => {
|
|
320
241
|
const items = (0, exports.quickClone)(_items);
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
else if (this.storageType === STORAGE_TYPES.map) {
|
|
327
|
-
this.itemsMap = new Map(items.map((item) => {
|
|
328
|
-
const id = this.getIdStr(item);
|
|
329
|
-
return [id, { ...item }];
|
|
330
|
-
}));
|
|
331
|
-
}
|
|
242
|
+
this.itemsMap = new Map(items.map((item) => {
|
|
243
|
+
const id = this.getIdStr(item);
|
|
244
|
+
return [id, { ...item }];
|
|
245
|
+
}));
|
|
332
246
|
};
|
|
333
247
|
/**
|
|
334
248
|
* Returns the current data ordered by synced_field ASC and matching the main filter;
|
|
335
249
|
*/
|
|
336
250
|
this.getItems = () => {
|
|
337
251
|
let items = [];
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
else if (this.storageType === STORAGE_TYPES.map) {
|
|
352
|
-
items = Array.from(this.itemsMap.values()).map((d) => ({ ...d }));
|
|
353
|
-
}
|
|
354
|
-
if (this.id_fields.length && this.synced_field) {
|
|
355
|
-
const s_fields = [this.synced_field, ...this.id_fields.sort()];
|
|
356
|
-
items = items
|
|
357
|
-
.filter((d) => {
|
|
358
|
-
return !this.filter || !(0, prostgles_types_1.getKeys)(this.filter).find((key) => d[key] !== this.filter[key]);
|
|
359
|
-
})
|
|
360
|
-
.sort((a, b) => s_fields
|
|
361
|
-
.map((key) => (a[key] < b[key] ? -1
|
|
362
|
-
: a[key] > b[key] ? 1
|
|
363
|
-
: 0))
|
|
364
|
-
.find((v) => v));
|
|
365
|
-
}
|
|
366
|
-
else
|
|
367
|
-
throw "id_fields AND/OR synced_field missing";
|
|
252
|
+
items = Array.from(this.itemsMap.values()).map((d) => ({ ...d }));
|
|
253
|
+
const syncFields = [this.synced_field, ...this.id_fields.sort()];
|
|
254
|
+
items = items
|
|
255
|
+
.filter((d) => {
|
|
256
|
+
return !this.filter || !(0, prostgles_types_1.getKeys)(this.filter).find((key) => d[key] !== this.filter[key]);
|
|
257
|
+
})
|
|
258
|
+
.sort((a, b) => syncFields
|
|
259
|
+
.map((key) => (a[key] < b[key] ? -1
|
|
260
|
+
: a[key] > b[key] ? 1
|
|
261
|
+
: 0))
|
|
262
|
+
.find((v) => v));
|
|
368
263
|
return (0, exports.quickClone)(items);
|
|
369
264
|
};
|
|
370
265
|
/**
|
|
@@ -376,42 +271,42 @@ class SyncedTable {
|
|
|
376
271
|
.map((c) => ({ ...c }))
|
|
377
272
|
.filter((c) => (!Number.isFinite(from_synced) || +c[this.synced_field] >= +from_synced) &&
|
|
378
273
|
(!Number.isFinite(to_synced) || +c[this.synced_field] <= +to_synced));
|
|
379
|
-
if (offset || limit)
|
|
274
|
+
if (offset || limit) {
|
|
380
275
|
res = res.splice(offset !== null && offset !== void 0 ? offset : 0, limit || res.length);
|
|
276
|
+
}
|
|
381
277
|
return res;
|
|
382
278
|
};
|
|
279
|
+
const { name, filter = {}, onReady, onDebug, db, select = "*", onError } = options;
|
|
383
280
|
this.name = name;
|
|
384
281
|
this.filter = filter;
|
|
385
282
|
this.select = select;
|
|
386
|
-
this.onChange = onChange;
|
|
387
283
|
if (onDebug) {
|
|
388
|
-
this.onDebug = (evt) => onDebug({
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
284
|
+
this.onDebug = (evt) => onDebug({
|
|
285
|
+
...evt,
|
|
286
|
+
type: "sync",
|
|
287
|
+
tableName: name,
|
|
288
|
+
channelName: (0, prostgles_types_1.getSyncChannelName)({ filter, select, tableName: name }),
|
|
289
|
+
options,
|
|
290
|
+
});
|
|
291
|
+
this.onDebug({ command: "create", data: { name, filter, select } });
|
|
396
292
|
}
|
|
397
|
-
this.storageType = storageType;
|
|
398
|
-
this.patchText = patchText;
|
|
399
|
-
this.patchJSON = patchJSON;
|
|
400
293
|
const tableHandler = db[name];
|
|
401
|
-
if (!tableHandler)
|
|
294
|
+
if (!tableHandler) {
|
|
402
295
|
throw `${name} table not found in db`;
|
|
296
|
+
}
|
|
403
297
|
this.db = db;
|
|
404
298
|
const { _sync, _syncInfo } = tableHandler;
|
|
405
|
-
if (!_sync || !_syncInfo)
|
|
299
|
+
if (!_sync || !_syncInfo) {
|
|
406
300
|
throw `${name} table does not support sync`;
|
|
301
|
+
}
|
|
407
302
|
const { id_fields, synced_field, throttle = 100, batch_size = 50 } = _syncInfo;
|
|
408
|
-
if (!id_fields.length || !synced_field)
|
|
303
|
+
if (!id_fields.length || !synced_field) {
|
|
409
304
|
throw "id_fields/synced_field missing";
|
|
305
|
+
}
|
|
410
306
|
this.id_fields = id_fields;
|
|
411
307
|
this.synced_field = synced_field;
|
|
412
308
|
this.batch_size = batch_size;
|
|
413
309
|
this.throttle = throttle;
|
|
414
|
-
this.skipFirstTrigger = skipFirstTrigger;
|
|
415
310
|
this.multiSubscriptions = [];
|
|
416
311
|
this.singleSubscriptions = [];
|
|
417
312
|
this.onError =
|
|
@@ -484,7 +379,7 @@ class SyncedTable {
|
|
|
484
379
|
/**
|
|
485
380
|
* Some syncs can be read only. Any changes are local
|
|
486
381
|
*/
|
|
487
|
-
this.wal = new
|
|
382
|
+
this.wal = new WAL_1.WAL({
|
|
488
383
|
...opts,
|
|
489
384
|
batch_size,
|
|
490
385
|
onSendStart: () => {
|
|
@@ -492,32 +387,21 @@ class SyncedTable {
|
|
|
492
387
|
window.onbeforeunload = confirmExit;
|
|
493
388
|
},
|
|
494
389
|
onSend: async (data, walData) => {
|
|
495
|
-
|
|
496
|
-
// const textCols = this.columns.filter(c => c.data_type.toLowerCase().startsWith("text"));
|
|
497
|
-
// data = await Promise.all(data.map(d => {
|
|
498
|
-
// const dataTextCols = Object.keys(d).filter(k => textCols.find(tc => tc.name === k));
|
|
499
|
-
// if(dataTextCols.length){
|
|
500
|
-
// /* Create text patches and update separately */
|
|
501
|
-
// dada
|
|
502
|
-
// }
|
|
503
|
-
// return d;
|
|
504
|
-
// }))
|
|
505
|
-
// }
|
|
506
|
-
const _data = await this.updatePatches(walData);
|
|
390
|
+
const _data = walData.map((d) => d.current);
|
|
507
391
|
if (!_data.length)
|
|
508
392
|
return [];
|
|
509
|
-
return
|
|
393
|
+
return s.syncData(data);
|
|
510
394
|
}, //, deletedData);,
|
|
511
395
|
onSendEnd: () => {
|
|
512
396
|
if (hasWnd)
|
|
513
397
|
window.onbeforeunload = null;
|
|
514
398
|
},
|
|
515
399
|
});
|
|
516
|
-
this.notifyWal = new
|
|
400
|
+
this.notifyWal = new WAL_1.WAL({
|
|
517
401
|
...opts,
|
|
518
402
|
batch_size: Infinity,
|
|
519
403
|
throttle: 5,
|
|
520
|
-
onSend: async (
|
|
404
|
+
onSend: async (_, fullItems) => {
|
|
521
405
|
this._notifySubscribers(fullItems.map((d) => {
|
|
522
406
|
var _a;
|
|
523
407
|
return ({
|
|
@@ -530,15 +414,9 @@ class SyncedTable {
|
|
|
530
414
|
});
|
|
531
415
|
onReady();
|
|
532
416
|
});
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
});
|
|
537
|
-
}
|
|
538
|
-
if (this.onChange && !this.skipFirstTrigger) {
|
|
539
|
-
setTimeout(this.onChange, 0);
|
|
540
|
-
}
|
|
541
|
-
(0, exports.debug)(this);
|
|
417
|
+
(_a = tableHandler.getColumns) === null || _a === void 0 ? void 0 : _a.call(tableHandler).then((cols) => {
|
|
418
|
+
this.columns = cols;
|
|
419
|
+
});
|
|
542
420
|
}
|
|
543
421
|
static create(opts) {
|
|
544
422
|
return new Promise((resolve, reject) => {
|
|
@@ -550,6 +428,10 @@ class SyncedTable {
|
|
|
550
428
|
resolve(res);
|
|
551
429
|
}, 0);
|
|
552
430
|
},
|
|
431
|
+
onError: (err) => {
|
|
432
|
+
console.error("Sync internal error: ", err);
|
|
433
|
+
reject(err);
|
|
434
|
+
},
|
|
553
435
|
});
|
|
554
436
|
}
|
|
555
437
|
catch (err) {
|
|
@@ -568,18 +450,13 @@ class SyncedTable {
|
|
|
568
450
|
handlesOnData,
|
|
569
451
|
});
|
|
570
452
|
this.multiSubscriptions.push(sub);
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
}, 0);
|
|
576
|
-
}
|
|
453
|
+
setTimeout(() => {
|
|
454
|
+
const items = this.getItems();
|
|
455
|
+
sub.notify(items, items);
|
|
456
|
+
}, 0);
|
|
577
457
|
return Object.freeze({ ...handles });
|
|
578
458
|
}
|
|
579
459
|
makeSingleSyncHandles(idObj, onChange) {
|
|
580
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
581
|
-
if (!idObj || !onChange)
|
|
582
|
-
throw `syncOne(idObj, onChange) -> MISSING idObj or onChange`;
|
|
583
460
|
const handles = {
|
|
584
461
|
$get: () => this.getItem(idObj),
|
|
585
462
|
$find: (idObject) => this.getItem(idObject),
|
|
@@ -593,7 +470,6 @@ class SyncedTable {
|
|
|
593
470
|
/* DROPPED SYNC BUG */
|
|
594
471
|
if (!this.singleSubscriptions.length && !this.multiSubscriptions.length) {
|
|
595
472
|
console.warn("No sync listeners");
|
|
596
|
-
(0, exports.debug)("nosync", this._singleSubscriptions, this._multiSubscriptions);
|
|
597
473
|
}
|
|
598
474
|
return this.upsert([{ idObj, delta: newData, opts }]);
|
|
599
475
|
},
|
|
@@ -730,14 +606,7 @@ class SyncedTable {
|
|
|
730
606
|
}
|
|
731
607
|
/* Returns an item by idObj from the local store */
|
|
732
608
|
getItem(idObj) {
|
|
733
|
-
|
|
734
|
-
if (this.storageType === STORAGE_TYPES.localStorage) {
|
|
735
|
-
const items = this.getItems();
|
|
736
|
-
d = items.find((d) => this.matchesIdObj(d, idObj));
|
|
737
|
-
}
|
|
738
|
-
else {
|
|
739
|
-
d = this.itemsMap.get(this.getIdStr(idObj));
|
|
740
|
-
}
|
|
609
|
+
const d = this.itemsMap.get(this.getIdStr(idObj));
|
|
741
610
|
return (0, exports.quickClone)(d);
|
|
742
611
|
}
|
|
743
612
|
/**
|
|
@@ -750,37 +619,13 @@ class SyncedTable {
|
|
|
750
619
|
setItem(_item, isFullData = false, deleteItem = false) {
|
|
751
620
|
var _a;
|
|
752
621
|
const item = (0, exports.quickClone)(_item);
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
items = items.filter((d) => !this.matchesIdObj(d, item));
|
|
757
|
-
}
|
|
758
|
-
else {
|
|
759
|
-
let exists = false;
|
|
760
|
-
items = items.map((d) => {
|
|
761
|
-
if (this.matchesIdObj(d, item)) {
|
|
762
|
-
exists = true;
|
|
763
|
-
return isFullData ? { ...item } : { ...d, ...item };
|
|
764
|
-
}
|
|
765
|
-
return d;
|
|
766
|
-
});
|
|
767
|
-
if (!exists) {
|
|
768
|
-
items.push(item);
|
|
769
|
-
}
|
|
770
|
-
}
|
|
771
|
-
if (hasWnd) {
|
|
772
|
-
window.localStorage.setItem(this.name, JSON.stringify(items));
|
|
773
|
-
}
|
|
622
|
+
const id = this.getIdStr(item);
|
|
623
|
+
if (deleteItem) {
|
|
624
|
+
this.itemsMap.delete(id);
|
|
774
625
|
}
|
|
775
626
|
else {
|
|
776
|
-
const
|
|
777
|
-
|
|
778
|
-
this.itemsMap.delete(id);
|
|
779
|
-
}
|
|
780
|
-
else {
|
|
781
|
-
const existing = (_a = this.itemsMap.get(id)) !== null && _a !== void 0 ? _a : {};
|
|
782
|
-
this.itemsMap.set(id, isFullData ? { ...item } : { ...existing, ...item });
|
|
783
|
-
}
|
|
627
|
+
const existing = (_a = this.itemsMap.get(id)) !== null && _a !== void 0 ? _a : {};
|
|
628
|
+
this.itemsMap.set(id, isFullData ? { ...item } : { ...existing, ...item });
|
|
784
629
|
}
|
|
785
630
|
}
|
|
786
631
|
}
|
|
@@ -821,12 +666,3 @@ const quickClone = (obj) => {
|
|
|
821
666
|
return obj;
|
|
822
667
|
};
|
|
823
668
|
exports.quickClone = quickClone;
|
|
824
|
-
/**
|
|
825
|
-
* Type tests
|
|
826
|
-
*/
|
|
827
|
-
const typeTest = async () => {
|
|
828
|
-
const s = 1;
|
|
829
|
-
const sh = s({ a: 1 }, {}, (d) => { });
|
|
830
|
-
const syncTyped = 1;
|
|
831
|
-
// const sUntyped: Sync<AnyObject, any> = syncTyped;
|
|
832
|
-
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WAL } from "prostgles-types/dist/WAL";
|
|
2
|
+
import { type SyncedTableOptions } from "./SyncedTable";
|
|
3
|
+
import type { Socket } from "socket.io-client";
|
|
4
|
+
export declare const createSync: (socket: Socket, options: Omit<SyncedTableOptions, "onReady">) => Promise<{
|
|
5
|
+
sync: <T extends import("prostgles-types").AnyObject = import("prostgles-types").AnyObject>(onChange: import("./SyncedTable").MultiChangeListener<T>, handlesOnData?: boolean) => import("./SyncedTable").MultiSyncHandles<T>;
|
|
6
|
+
syncOne: <T extends import("prostgles-types").AnyObject = import("prostgles-types").AnyObject, Full extends boolean = false>(idObj: Partial<T>, onChange: import("./SyncedTable").SingleChangeListener<T, Full>, handlesOnData?: boolean) => import("./SyncedTable").SingleSyncHandles<T, Full>;
|
|
7
|
+
notifyWal: WAL;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=createSync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSync.d.ts","sourceRoot":"","sources":["../../lib/SyncedTable/createSync.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAgB,MAAM,0BAA0B,CAAC;AAI7D,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,eAAO,MAAM,UAAU,GAAU,QAAQ,MAAM,EAAE,SAAS,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC;;;;EA0N5F,CAAC"}
|