prostgles-client 4.0.361 → 4.0.363
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/FunctionQueuer.js +51 -49
- package/dist/SyncedTable/SyncedTable.d.ts +3 -108
- package/dist/SyncedTable/SyncedTable.d.ts.map +1 -1
- package/dist/SyncedTable/SyncedTable.js +1 -628
- package/dist/SyncedTable/createSync.d.ts +3 -2
- package/dist/SyncedTable/createSync.d.ts.map +1 -1
- package/dist/SyncedTable/createSync.js +11 -8
- package/dist/SyncedTable/createSyncDataStore.js +2 -3
- package/dist/SyncedTable/createSyncStateUtils.d.ts +2 -2
- package/dist/SyncedTable/createSyncStateUtils.d.ts.map +1 -1
- package/dist/SyncedTable/createSyncStateUtils.js +31 -37
- package/dist/SyncedTable/createSyncSubscriptionManager.js +6 -10
- package/dist/auth/useAuthState.js +4 -5
- package/dist/getAuthHandler.js +7 -9
- package/dist/getDbHandler.d.ts +2 -6
- package/dist/getDbHandler.d.ts.map +1 -1
- package/dist/getDbHandler.js +37 -71
- package/dist/getMethods.js +1 -1
- package/dist/getSqlHandler.js +6 -8
- package/dist/getSubscriptionHandler.js +5 -5
- package/dist/getSyncHandlerV2.js +3 -4
- package/dist/hooks/reactImports.js +2 -3
- package/dist/hooks/useAsyncEffectQueue.js +3 -4
- package/dist/hooks/useEffectAsync.js +1 -2
- package/dist/hooks/useEffectDeep.js +1 -1
- package/dist/hooks/useFetch.js +1 -1
- package/dist/hooks/useProstglesClient.d.ts.map +1 -1
- package/dist/hooks/useProstglesClient.js +5 -8
- package/dist/hooks/useSubscribe.js +1 -1
- package/dist/hooks/useSync.js +1 -1
- package/dist/{prostgles-full.d.ts → index.d.ts} +1 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -1
- package/dist/{prostgles-full-cdn.d.ts → index.umd.d.ts} +1 -1
- package/dist/index.umd.d.ts.map +1 -0
- package/dist/index.umd.js +1 -0
- package/dist/prostgles.d.ts +3 -3
- package/dist/prostgles.d.ts.map +1 -1
- package/dist/prostgles.js +11 -13
- package/package.json +3 -4
- package/tsconfig.json +3 -3
- package/webpack.dev.js +14 -15
- package/webpack.prod.js +2 -3
- package/dist/SyncedTable/getMultiSyncSubscription.d.ts +0 -12
- package/dist/SyncedTable/getMultiSyncSubscription.d.ts.map +0 -1
- package/dist/SyncedTable/getMultiSyncSubscription.js +0 -60
- package/dist/SyncedTable/getSingleSyncSubscription.d.ts +0 -1
- package/dist/SyncedTable/getSingleSyncSubscription.d.ts.map +0 -1
- package/dist/SyncedTable/getSingleSyncSubscription.js +0 -1
- package/dist/getSyncHandler.d.ts +0 -10
- package/dist/getSyncHandler.d.ts.map +0 -1
- package/dist/getSyncHandler.js +0 -199
- package/dist/index.no-sync.js +0 -1
- package/dist/prostgles-full-cdn.d.ts.map +0 -1
- package/dist/prostgles-full-cdn.js +0 -8
- package/dist/prostgles-full.d.ts.map +0 -1
- package/dist/prostgles-full.js +0 -38
package/dist/FunctionQueuer.js
CHANGED
|
@@ -2,59 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FunctionQueuer = void 0;
|
|
4
4
|
class FunctionQueuer {
|
|
5
|
+
queue = [];
|
|
6
|
+
func;
|
|
7
|
+
groupBy;
|
|
5
8
|
constructor(func, groupBy) {
|
|
6
|
-
this.queue = [];
|
|
7
|
-
this.isRunning = false;
|
|
8
|
-
this.startQueueJob = async () => {
|
|
9
|
-
if (this.isRunning) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
this.isRunning = true;
|
|
13
|
-
const executeItem = async (item) => {
|
|
14
|
-
if (!item) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const result = await this.func(...item.arguments);
|
|
19
|
-
item.onResult(result);
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
item.onFail(error);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
if (!this.groupBy) {
|
|
26
|
-
const item = this.queue.shift();
|
|
27
|
-
await executeItem(item);
|
|
28
|
-
/** Run items in parallel for each group */
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
const groups = new Set();
|
|
32
|
-
const items = [];
|
|
33
|
-
this.queue.forEach((item) => {
|
|
34
|
-
const group = this.groupBy(item.arguments);
|
|
35
|
-
if (!groups.has(group)) {
|
|
36
|
-
groups.add(group);
|
|
37
|
-
items.push(item);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
items
|
|
41
|
-
.slice(0)
|
|
42
|
-
.reverse()
|
|
43
|
-
.forEach((item) => {
|
|
44
|
-
this.queue.splice(this.queue.indexOf(item), 1);
|
|
45
|
-
});
|
|
46
|
-
await Promise.all(items.map((item) => {
|
|
47
|
-
return executeItem(item);
|
|
48
|
-
}));
|
|
49
|
-
}
|
|
50
|
-
this.isRunning = false;
|
|
51
|
-
if (this.queue.length) {
|
|
52
|
-
this.startQueueJob();
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
9
|
this.func = func;
|
|
56
10
|
this.groupBy = groupBy;
|
|
57
11
|
}
|
|
12
|
+
isRunning = false;
|
|
58
13
|
async run(args) {
|
|
59
14
|
const result = new Promise((resolve, reject) => {
|
|
60
15
|
const item = { arguments: args, onResult: resolve, onFail: reject };
|
|
@@ -63,5 +18,52 @@ class FunctionQueuer {
|
|
|
63
18
|
this.startQueueJob();
|
|
64
19
|
return result;
|
|
65
20
|
}
|
|
21
|
+
startQueueJob = async () => {
|
|
22
|
+
if (this.isRunning) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.isRunning = true;
|
|
26
|
+
const executeItem = async (item) => {
|
|
27
|
+
if (!item) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const result = await this.func(...item.arguments);
|
|
32
|
+
item.onResult(result);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
item.onFail(error);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
if (!this.groupBy) {
|
|
39
|
+
const item = this.queue.shift();
|
|
40
|
+
await executeItem(item);
|
|
41
|
+
/** Run items in parallel for each group */
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const groups = new Set();
|
|
45
|
+
const items = [];
|
|
46
|
+
this.queue.forEach((item) => {
|
|
47
|
+
const group = this.groupBy(item.arguments);
|
|
48
|
+
if (!groups.has(group)) {
|
|
49
|
+
groups.add(group);
|
|
50
|
+
items.push(item);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
items
|
|
54
|
+
.slice(0)
|
|
55
|
+
.reverse()
|
|
56
|
+
.forEach((item) => {
|
|
57
|
+
this.queue.splice(this.queue.indexOf(item), 1);
|
|
58
|
+
});
|
|
59
|
+
await Promise.all(items.map((item) => {
|
|
60
|
+
return executeItem(item);
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
this.isRunning = false;
|
|
64
|
+
if (this.queue.length) {
|
|
65
|
+
this.startQueueJob();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
66
68
|
}
|
|
67
69
|
exports.FunctionQueuer = FunctionQueuer;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { AnyObject, EqualityFilter, FieldFilter, NormalizedRow,
|
|
1
|
+
import type { AnyObject, EqualityFilter, FieldFilter, NormalizedRow, ValidatedColumnInfo } from "prostgles-types";
|
|
2
2
|
import type { DBHandlerClient, SyncDebugEvent } from "../prostgles";
|
|
3
|
-
import { WAL } from "prostgles-types/dist/WAL";
|
|
4
3
|
type OmittedSyncProps = "onDebug" | "name" | "filter" | "db" | "onError";
|
|
5
4
|
export type SyncOptions = Partial<Omit<SyncedTableOptions, OmittedSyncProps>> & {
|
|
6
5
|
select?: FieldFilter;
|
|
@@ -19,12 +18,12 @@ export type SyncHandler<T> = {
|
|
|
19
18
|
$upsert: (newData: T[]) => void | Promise<void>;
|
|
20
19
|
getItems: () => T[];
|
|
21
20
|
};
|
|
22
|
-
export type Sync<T extends AnyObject = AnyObject> = <TD extends T, Opts extends SyncOptions>(basicFilter: EqualityFilter<TD>, options: SyncOptions, onChange: OnChange<TD, Opts
|
|
21
|
+
export type Sync<T extends AnyObject = AnyObject> = <TD extends T, Opts extends SyncOptions>(basicFilter: EqualityFilter<TD>, options: SyncOptions, onChange: OnChange<TD, Opts>) => Promise<SyncHandler<TD>>;
|
|
23
22
|
export type OnChangeOne<T extends Record<string, unknown>, Opts extends SyncOptions> = (data: SyncDataItem<T, Opts>, delta?: Partial<NormalizedRow<T>>) => void | Promise<void>;
|
|
24
23
|
/**
|
|
25
24
|
* Creates a local synchronized record
|
|
26
25
|
*/
|
|
27
|
-
export type SyncOne<T extends AnyObject = AnyObject> = <TD extends T, Opts extends SyncOneOptions>(basicFilter: Partial<TD>, options: Opts, onChange: OnChangeOne<TD, Opts
|
|
26
|
+
export type SyncOne<T extends AnyObject = AnyObject> = <TD extends T, Opts extends SyncOneOptions>(basicFilter: Partial<TD>, options: Opts, onChange: OnChangeOne<TD, Opts>) => Promise<SingleSyncHandles<TD, Opts["handlesOnData"]>>;
|
|
28
27
|
export type SyncBatchRequest = {
|
|
29
28
|
from_synced?: string | number;
|
|
30
29
|
to_synced?: string | number;
|
|
@@ -103,119 +102,15 @@ export type SyncedTableOptions = {
|
|
|
103
102
|
* Called on first sync and every time the data changes
|
|
104
103
|
*/
|
|
105
104
|
onChange?: MultiChangeListener;
|
|
106
|
-
onError?: OnErrorHandler;
|
|
107
105
|
db: DBHandlerClient | Partial<DBHandlerClient>;
|
|
108
106
|
select: FieldFilter | undefined;
|
|
109
107
|
columns: ValidatedColumnInfo[];
|
|
110
|
-
onReady: () => void;
|
|
111
108
|
onDebug?: (event: SyncDebugEvent) => Promise<void> | void;
|
|
112
109
|
};
|
|
113
110
|
export type DbTableSync = {
|
|
114
111
|
unsync: () => void;
|
|
115
112
|
syncData: (data?: AnyObject[], deleted?: AnyObject[], cb?: (err?: any) => void) => void;
|
|
116
113
|
};
|
|
117
|
-
export declare class SyncedTable {
|
|
118
|
-
db: DBHandlerClient | Partial<DBHandlerClient>;
|
|
119
|
-
name: string;
|
|
120
|
-
select?: FieldFilter;
|
|
121
|
-
filter?: EqualityFilter<AnyObject>;
|
|
122
|
-
id_fields: string[];
|
|
123
|
-
synced_field: string;
|
|
124
|
-
throttle: number;
|
|
125
|
-
batch_size: number;
|
|
126
|
-
columns: {
|
|
127
|
-
name: string;
|
|
128
|
-
data_type: string;
|
|
129
|
-
}[];
|
|
130
|
-
wal?: WAL;
|
|
131
|
-
notifyWal?: WAL;
|
|
132
|
-
_multiSubscriptions: SubscriptionMulti[];
|
|
133
|
-
_singleSubscriptions: SubscriptionSingle[];
|
|
134
|
-
/**
|
|
135
|
-
* add debug mode to fix sudden no data and sync listeners bug
|
|
136
|
-
*/
|
|
137
|
-
set multiSubscriptions(mSubs: SubscriptionMulti[]);
|
|
138
|
-
get multiSubscriptions(): SubscriptionMulti[];
|
|
139
|
-
set singleSubscriptions(sSubs: SubscriptionSingle[]);
|
|
140
|
-
get singleSubscriptions(): SubscriptionSingle[];
|
|
141
|
-
dbSync?: DbTableSync;
|
|
142
|
-
itemsMap: Map<string, AnyObject>;
|
|
143
|
-
isSynced: boolean;
|
|
144
|
-
onError: SyncedTableOptions["onError"];
|
|
145
|
-
onDebug?: (evt: Omit<SyncDebugEvent, "type" | "tableName" | "channelName" | "options">) => Promise<void> | void;
|
|
146
|
-
constructor(options: SyncedTableOptions);
|
|
147
|
-
static create(opts: Omit<SyncedTableOptions, "onReady">): Promise<SyncedTable>;
|
|
148
|
-
/**
|
|
149
|
-
* Returns a sync handler to all records within the SyncedTable instance
|
|
150
|
-
* @param onChange change listener <(items: object[], delta: object[]) => any >
|
|
151
|
-
* @param handlesOnData If true then $upsert and $unsync handles will be added on each data item. True by default;
|
|
152
|
-
*/
|
|
153
|
-
sync<T extends AnyObject = AnyObject>(onChange: MultiChangeListener<T>, handlesOnData?: boolean): MultiSyncHandles<T>;
|
|
154
|
-
makeSingleSyncHandles<T extends AnyObject = AnyObject, Full extends boolean = false>(idObj: Partial<T>, onChange: SingleChangeListener<T, Full> | MultiChangeListener<T>): SingleSyncHandles<T, Full>;
|
|
155
|
-
/**
|
|
156
|
-
* Returns a sync handler to a specific record within the SyncedTable instance
|
|
157
|
-
* @param idObj object containing the target id_fields properties
|
|
158
|
-
* @param onChange change listener <(item: object, delta: object) => any >
|
|
159
|
-
* @param handlesOnData If true then $update, $delete and $unsync handles will be added on the data item. True by default;
|
|
160
|
-
*/
|
|
161
|
-
syncOne<T extends AnyObject = AnyObject, Full extends boolean = false>(idObj: Partial<T>, onChange: SingleChangeListener<T, Full>, handlesOnData?: boolean): SingleSyncHandles<T, Full>;
|
|
162
|
-
/**
|
|
163
|
-
* Notifies multi subs with ALL data + deltas. Attaches handles on data if required
|
|
164
|
-
* @param newData -> updates. Must include id_fields + updates
|
|
165
|
-
*/
|
|
166
|
-
_notifySubscribers: (changes?: Pick<ItemUpdated, "idObj" | "newItem" | "delta">[]) => void;
|
|
167
|
-
unsubscribe: (onChange: SingleChangeListener | MultiChangeListener) => string;
|
|
168
|
-
getIdStr(d: AnyObject): string;
|
|
169
|
-
getIdObj(d: AnyObject): AnyObject;
|
|
170
|
-
getRowSyncObj(d: AnyObject): AnyObject;
|
|
171
|
-
unsync: () => void;
|
|
172
|
-
destroy: () => void;
|
|
173
|
-
matchesFilter(item: AnyObject | undefined): boolean;
|
|
174
|
-
matchesIdObj(a: AnyObject | undefined, b: AnyObject | undefined): boolean;
|
|
175
|
-
/**
|
|
176
|
-
* Returns properties that are present in {n} and are different to {o}
|
|
177
|
-
* @param o current full data item
|
|
178
|
-
* @param n new data item
|
|
179
|
-
*/
|
|
180
|
-
getDelta(o: AnyObject, n: AnyObject): AnyObject;
|
|
181
|
-
deleteAll(): void;
|
|
182
|
-
get tableHandler(): Pick<TableHandler, "update" | "updateBatch" | "delete"> | undefined;
|
|
183
|
-
delete: (item: AnyObject, from_server?: boolean) => Promise<boolean>;
|
|
184
|
-
/**
|
|
185
|
-
* Ensures that all object keys match valid column names
|
|
186
|
-
*/
|
|
187
|
-
checkItemCols: (item: AnyObject) => void;
|
|
188
|
-
/**
|
|
189
|
-
* Upserts data locally -> notify subs -> sends to server if required
|
|
190
|
-
* synced_field is populated if data is not from server
|
|
191
|
-
* @param items <{ idObj: object, delta: object }[]> Data items that changed
|
|
192
|
-
* @param from_server : <boolean> If false then updates will be sent to server
|
|
193
|
-
*/
|
|
194
|
-
upsert: (items: ItemUpdate[], from_server?: boolean) => Promise<void>;
|
|
195
|
-
getItem<T = AnyObject>(idObj: Partial<T>): T | undefined;
|
|
196
|
-
/**
|
|
197
|
-
*
|
|
198
|
-
* @param item data to be inserted/updated/deleted. Must include id_fields
|
|
199
|
-
* @param index (optional) index within array
|
|
200
|
-
* @param isFullData
|
|
201
|
-
* @param deleteItem
|
|
202
|
-
*/
|
|
203
|
-
setItem(_item: AnyObject, isFullData?: boolean, deleteItem?: boolean): void;
|
|
204
|
-
/**
|
|
205
|
-
* Sets the current data
|
|
206
|
-
*/
|
|
207
|
-
setItems: (_items: AnyObject[]) => void;
|
|
208
|
-
/**
|
|
209
|
-
* Returns the current data ordered by synced_field ASC and matching the main filter;
|
|
210
|
-
*/
|
|
211
|
-
getItems: <T extends AnyObject = AnyObject>() => T[];
|
|
212
|
-
/**
|
|
213
|
-
* Sync data request
|
|
214
|
-
*/
|
|
215
|
-
getBatch: ({ from_synced, to_synced, offset, limit }?: SyncBatchParams) => {
|
|
216
|
-
[x: string]: any;
|
|
217
|
-
}[];
|
|
218
|
-
}
|
|
219
114
|
export declare const mergeDeep: (_target: Record<string, unknown> | undefined, _source: Record<string, unknown> | undefined) => {
|
|
220
115
|
[x: string]: unknown;
|
|
221
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncedTable.d.ts","sourceRoot":"","sources":["../../lib/SyncedTable/SyncedTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,
|
|
1
|
+
{"version":3,"file":"SyncedTable.d.ts","sourceRoot":"","sources":["../../lib/SyncedTable/SyncedTable.ts"],"names":[],"mappings":"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"}
|