@prestizni-software/client-dem 0.7.4 → 0.7.6
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/AutoUpdateClientManagerClass.d.ts +141 -0
- package/{dist/AutoUpdateClientManagerClass.js → AutoUpdateClientManagerClass.js} +103 -12
- package/AutoUpdateClientManagerClass.js.map +1 -0
- package/AutoUpdateManagerClass.d.ts +102 -0
- package/{dist/AutoUpdateManagerClass.js → AutoUpdateManagerClass.js} +37 -0
- package/AutoUpdateManagerClass.js.map +1 -0
- package/{dist/AutoUpdatedClientObjectClass.d.ts → AutoUpdatedClientObjectClass.d.ts} +114 -0
- package/{dist/AutoUpdatedClientObjectClass.js → AutoUpdatedClientObjectClass.js} +108 -0
- package/AutoUpdatedClientObjectClass.js.map +1 -0
- package/{dist/CommonTypes.d.ts → CommonTypes.d.ts} +48 -9
- package/{dist/CommonTypes.js → CommonTypes.js} +52 -22
- package/CommonTypes.js.map +1 -0
- package/{dist/DEMErrors.d.ts → DEMErrors.d.ts} +22 -2
- package/{dist/DEMErrors.js → DEMErrors.js} +22 -2
- package/{dist/DEMErrors.js.map → DEMErrors.js.map} +1 -1
- package/package.json +20 -40
- package/{dist/sync → sync}/ClientStateReconciler.d.ts +20 -0
- package/{dist/sync → sync}/ClientStateReconciler.js +20 -0
- package/sync/ClientStateReconciler.js.map +1 -0
- package/{dist/sync → sync}/ServerChangeTracker.d.ts +46 -0
- package/{dist/sync → sync}/ServerChangeTracker.js +46 -0
- package/sync/ServerChangeTracker.js.map +1 -0
- package/sync/storage/IndexedDbStorageAdapter.d.ts +53 -0
- package/{dist/sync → sync}/storage/IndexedDbStorageAdapter.js +31 -0
- package/sync/storage/IndexedDbStorageAdapter.js.map +1 -0
- package/sync/storage/LocalStorageAdapter.d.ts +59 -0
- package/{dist/sync → sync}/storage/LocalStorageAdapter.js +32 -0
- package/sync/storage/LocalStorageAdapter.js.map +1 -0
- package/sync/storage/MemoryStorageAdapter.d.ts +34 -0
- package/sync/storage/MemoryStorageAdapter.js +45 -0
- package/sync/storage/MemoryStorageAdapter.js.map +1 -0
- package/version.d.ts +21 -0
- package/version.js +22 -0
- package/version.js.map +1 -0
- package/README.md +0 -18
- package/dist/AutoUpdateClientManagerClass.d.ts +0 -51
- package/dist/AutoUpdateClientManagerClass.js.map +0 -1
- package/dist/AutoUpdateManagerClass.d.ts +0 -37
- package/dist/AutoUpdateManagerClass.js.map +0 -1
- package/dist/AutoUpdatedClientObjectClass.js.map +0 -1
- package/dist/CommonTypes.js.map +0 -1
- package/dist/sync/ClientStateReconciler.js.map +0 -1
- package/dist/sync/ServerChangeTracker.js.map +0 -1
- package/dist/sync/storage/IndexedDbStorageAdapter.d.ts +0 -22
- package/dist/sync/storage/IndexedDbStorageAdapter.js.map +0 -1
- package/dist/sync/storage/LocalStorageAdapter.d.ts +0 -27
- package/dist/sync/storage/LocalStorageAdapter.js.map +0 -1
- package/dist/sync/storage/MemoryStorageAdapter.d.ts +0 -13
- package/dist/sync/storage/MemoryStorageAdapter.js +0 -25
- package/dist/sync/storage/MemoryStorageAdapter.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/{dist/client.d.ts → client.d.ts} +0 -0
- /package/{dist/client.js → client.js} +0 -0
- /package/{dist/client.js.map → client.js.map} +0 -0
- /package/{dist/sync → sync}/index.d.ts +0 -0
- /package/{dist/sync → sync}/index.js +0 -0
- /package/{dist/sync → sync}/index.js.map +0 -0
- /package/{dist/sync → sync}/storage/IClientStorageAdapter.d.ts +0 -0
- /package/{dist/sync → sync}/storage/IClientStorageAdapter.js +0 -0
- /package/{dist/sync → sync}/storage/IClientStorageAdapter.js.map +0 -0
- /package/{dist/sync → sync}/types.d.ts +0 -0
- /package/{dist/sync → sync}/types.js +0 -0
- /package/{dist/sync → sync}/types.js.map +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Socket } from "socket.io-client";
|
|
2
|
+
import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
|
|
3
|
+
import { DEMClientCallbacks } from "./AutoUpdatedClientObjectClass.js";
|
|
4
|
+
import { Constructor, IsData, LoggersType, IAutoUpdatedClientObjectBase, MongoId, IAutoUpdateManager, DEMVersionOptions, DEMErrorCode } from "./CommonTypes.js";
|
|
5
|
+
import { EventEmitter } from "eventemitter3";
|
|
6
|
+
import { IClientStorageAdapter, ClientDeltaSyncOptions } from "./sync/index.js";
|
|
7
|
+
export type WrappedInstances<T extends Record<string, Constructor<IAutoUpdatedClientObjectBase>>> = {
|
|
8
|
+
[K in keyof T]: AutoUpdateClientManager<InstanceType<T[K]>, WrappedInstances<T>>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Factory function initializing a dictionary of AutoUpdateClientManager instances.
|
|
12
|
+
* Verifies versions, executes startup handshakes, and parallelizes reference resolution.
|
|
13
|
+
*
|
|
14
|
+
* @param defs - Dictionary mapping entity class names to their client constructor classes.
|
|
15
|
+
* @param loggers - Logger callbacks interface.
|
|
16
|
+
* @param socket - Socket.IO client socket connection.
|
|
17
|
+
* @param doDebug - Flag indicating whether debug logs are emitted.
|
|
18
|
+
* @param emitter - Shared event emitter for lifecycle notifications.
|
|
19
|
+
* @param callbacks - Optional event callbacks (new, update, delete, progress).
|
|
20
|
+
* @param versionOptions - Version compatibility validation options.
|
|
21
|
+
* @param deltaSyncOptions - Delta sync storage and caching configuration.
|
|
22
|
+
* @returns Promise resolving to the initialized client manager map.
|
|
23
|
+
*/
|
|
24
|
+
export declare function AUCManagerFactory<T extends Record<string, Constructor<IAutoUpdatedClientObjectBase>>>(defs: T, loggers: LoggersType, socket: Socket, doDebug?: boolean, emitter?: EventEmitter, callbacks?: Partial<{
|
|
25
|
+
[K in keyof T]: Partial<DEMClientCallbacks<any>>;
|
|
26
|
+
} & Partial<DEMClientCallbacks<IAutoUpdatedClientObjectBase>>>, versionOptions?: DEMVersionOptions, deltaSyncOptions?: ClientDeltaSyncOptions | boolean): Promise<WrappedInstances<T>>;
|
|
27
|
+
export declare class AutoUpdateClientManager<T extends IAutoUpdatedClientObjectBase, M extends Record<string, IAutoUpdateManager<any>> = Record<string, IAutoUpdateManager<any>>> extends AutoUpdateManager<T, M> {
|
|
28
|
+
protected objects_: {
|
|
29
|
+
[_id: string]: T;
|
|
30
|
+
};
|
|
31
|
+
readonly managers: M;
|
|
32
|
+
callbacks: DEMClientCallbacks<any>;
|
|
33
|
+
readonly socket: Socket;
|
|
34
|
+
readonly versionOptions?: DEMVersionOptions;
|
|
35
|
+
readonly deltaSyncOptions?: ClientDeltaSyncOptions;
|
|
36
|
+
readonly storageAdapter?: IClientStorageAdapter;
|
|
37
|
+
readonly deltaSyncEnabled: boolean;
|
|
38
|
+
lastRevision: number;
|
|
39
|
+
totalObjects: number;
|
|
40
|
+
loadedObjects: number;
|
|
41
|
+
private pendingMissingFetches;
|
|
42
|
+
private _cachedObjectsArray;
|
|
43
|
+
private _reconnectHandler?;
|
|
44
|
+
/**
|
|
45
|
+
* Initializes an AutoUpdateClientManager instance.
|
|
46
|
+
*
|
|
47
|
+
* @param classParam - Constructor of the client object entity.
|
|
48
|
+
* @param className - Managed entity class name.
|
|
49
|
+
* @param socket - Socket.IO client socket connection.
|
|
50
|
+
* @param loggers - Logging interfaces.
|
|
51
|
+
* @param managers - Registry of sibling client managers.
|
|
52
|
+
* @param emitter - Shared event emitter.
|
|
53
|
+
* @param callbacks - Client event callbacks.
|
|
54
|
+
* @param versionOptions - Version compatibility options.
|
|
55
|
+
* @param deltaSyncOptions - Delta sync storage adapter configuration.
|
|
56
|
+
*/
|
|
57
|
+
constructor(classParam: Constructor<T>, className: string, socket: Socket, loggers: LoggersType, managers: M, emitter: EventEmitter, callbacks: DEMClientCallbacks<any>, versionOptions?: DEMVersionOptions, deltaSyncOptions?: ClientDeltaSyncOptions | boolean);
|
|
58
|
+
/**
|
|
59
|
+
* Normalizes loaded object count against total objects into a 0 to 1 progress fraction.
|
|
60
|
+
*
|
|
61
|
+
* @param loaded - Number of loaded objects.
|
|
62
|
+
* @param total - Total count of expected objects.
|
|
63
|
+
* @returns Normalized progress value between 0 and 1.
|
|
64
|
+
*/
|
|
65
|
+
normalizeProgress(loaded: number, total: number): number;
|
|
66
|
+
/**
|
|
67
|
+
* Registers socket event listeners for entity creation and deletion broadcasts.
|
|
68
|
+
*/
|
|
69
|
+
private startSocketListeners;
|
|
70
|
+
/**
|
|
71
|
+
* Deletes an object by ID from local cache, socket events, and persistent storage adapter.
|
|
72
|
+
*
|
|
73
|
+
* @param _id - Identifier of object to delete.
|
|
74
|
+
* @returns Promise resolving to deletion outcome.
|
|
75
|
+
*/
|
|
76
|
+
deleteObject(_id: MongoId): Promise<{
|
|
77
|
+
success: boolean;
|
|
78
|
+
message: string;
|
|
79
|
+
code?: DEMErrorCode;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Fetches startup data from the server or applies delta updates from local storage.
|
|
83
|
+
*
|
|
84
|
+
* @param t - Optional benchmark timer tracking object.
|
|
85
|
+
* @returns Promise resolving when data has been loaded and initialized.
|
|
86
|
+
*/
|
|
87
|
+
loadFromServer(t?: {
|
|
88
|
+
s: number;
|
|
89
|
+
f: number;
|
|
90
|
+
}): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Verifies structural schema compatibility between client and server class definitions.
|
|
93
|
+
*
|
|
94
|
+
* @param extraProperties - Properties present on client class but absent on server.
|
|
95
|
+
* @param data - Server schema containing registered server property names.
|
|
96
|
+
* @returns Object indicating whether manager is allowed to load and descriptive error message.
|
|
97
|
+
*/
|
|
98
|
+
private checkLoadability;
|
|
99
|
+
/**
|
|
100
|
+
* Retrieves an object from local memory by identifier.
|
|
101
|
+
*
|
|
102
|
+
* @param _id - Entity identifier.
|
|
103
|
+
* @returns Managed object instance, null, or undefined.
|
|
104
|
+
*/
|
|
105
|
+
getObject(_id?: MongoId): T | null | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Dictionary map containing all managed object instances keyed by ID string.
|
|
108
|
+
*
|
|
109
|
+
* @returns Object dictionary keyed by string IDs.
|
|
110
|
+
*/
|
|
111
|
+
get objects(): {
|
|
112
|
+
[_id: string]: T;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Array representation of all managed object instances, cached for fast reads.
|
|
116
|
+
*
|
|
117
|
+
* @returns Array containing all managed object instances.
|
|
118
|
+
*/
|
|
119
|
+
get objectsAsArray(): T[];
|
|
120
|
+
/**
|
|
121
|
+
* Fetches an object missing from local client memory on demand from the server.
|
|
122
|
+
* Deduplicates concurrent in-flight requests for the same entity ID.
|
|
123
|
+
*
|
|
124
|
+
* @param _id - Entity identifier of the missing object.
|
|
125
|
+
* @returns Promise resolving to the retrieved object instance.
|
|
126
|
+
* @throws {DEMError} Throws DEMErrorCode.MISSING_ID or MANAGERS_NOT_INITIALIZED.
|
|
127
|
+
*/
|
|
128
|
+
handleGetMissingObject(_id: MongoId): Promise<T>;
|
|
129
|
+
/**
|
|
130
|
+
* Creates a new object instance on the server and registers it in local manager state.
|
|
131
|
+
*
|
|
132
|
+
* @param data - Object property payload omitting `_id`.
|
|
133
|
+
* @returns Promise resolving to the newly created client entity.
|
|
134
|
+
* @throws {DEMError} Throws DEMErrorCode.OBJECT_CREATE_FAILED on failure.
|
|
135
|
+
*/
|
|
136
|
+
createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
|
|
137
|
+
/**
|
|
138
|
+
* Closes the manager and unbinds all socket event listeners.
|
|
139
|
+
*/
|
|
140
|
+
close(): void;
|
|
141
|
+
}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
|
|
2
|
-
import { globalCache, EVENT_UPDATE,
|
|
2
|
+
import { globalCache, EVENT_UPDATE, DEM_CLIENT_VERSION, verifyDEMVersion, DEMError, DEMErrorCode, } from "./CommonTypes.js";
|
|
3
3
|
import { EventEmitter } from "eventemitter3";
|
|
4
4
|
import { ClientStateReconciler, } from "./sync/index.js";
|
|
5
5
|
const inFlightFactories = new WeakMap();
|
|
6
|
+
/**
|
|
7
|
+
* Factory function initializing a dictionary of AutoUpdateClientManager instances.
|
|
8
|
+
* Verifies versions, executes startup handshakes, and parallelizes reference resolution.
|
|
9
|
+
*
|
|
10
|
+
* @param defs - Dictionary mapping entity class names to their client constructor classes.
|
|
11
|
+
* @param loggers - Logger callbacks interface.
|
|
12
|
+
* @param socket - Socket.IO client socket connection.
|
|
13
|
+
* @param doDebug - Flag indicating whether debug logs are emitted.
|
|
14
|
+
* @param emitter - Shared event emitter for lifecycle notifications.
|
|
15
|
+
* @param callbacks - Optional event callbacks (new, update, delete, progress).
|
|
16
|
+
* @param versionOptions - Version compatibility validation options.
|
|
17
|
+
* @param deltaSyncOptions - Delta sync storage and caching configuration.
|
|
18
|
+
* @returns Promise resolving to the initialized client manager map.
|
|
19
|
+
*/
|
|
6
20
|
export async function AUCManagerFactory(defs, loggers, socket, doDebug = false, emitter = new EventEmitter(), callbacks = {}, versionOptions, deltaSyncOptions) {
|
|
7
21
|
if (socket && inFlightFactories.has(socket)) {
|
|
8
22
|
loggers.debug?.("[DEM:FACTORY] Concurrent AUCManagerFactory detected on socket, reusing in-flight initialization promise.");
|
|
@@ -149,6 +163,19 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
149
163
|
pendingMissingFetches = new Map();
|
|
150
164
|
_cachedObjectsArray = null;
|
|
151
165
|
_reconnectHandler;
|
|
166
|
+
/**
|
|
167
|
+
* Initializes an AutoUpdateClientManager instance.
|
|
168
|
+
*
|
|
169
|
+
* @param classParam - Constructor of the client object entity.
|
|
170
|
+
* @param className - Managed entity class name.
|
|
171
|
+
* @param socket - Socket.IO client socket connection.
|
|
172
|
+
* @param loggers - Logging interfaces.
|
|
173
|
+
* @param managers - Registry of sibling client managers.
|
|
174
|
+
* @param emitter - Shared event emitter.
|
|
175
|
+
* @param callbacks - Client event callbacks.
|
|
176
|
+
* @param versionOptions - Version compatibility options.
|
|
177
|
+
* @param deltaSyncOptions - Delta sync storage adapter configuration.
|
|
178
|
+
*/
|
|
152
179
|
constructor(classParam, className, socket, loggers, managers, emitter, callbacks, versionOptions, deltaSyncOptions) {
|
|
153
180
|
if (!classParam)
|
|
154
181
|
throw new DEMError(DEMErrorCode.MISSING_ARGUMENT, "Missing required argument: classParam");
|
|
@@ -183,12 +210,22 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
183
210
|
};
|
|
184
211
|
this.socket?.on?.("reconnect", this._reconnectHandler);
|
|
185
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Normalizes loaded object count against total objects into a 0 to 1 progress fraction.
|
|
215
|
+
*
|
|
216
|
+
* @param loaded - Number of loaded objects.
|
|
217
|
+
* @param total - Total count of expected objects.
|
|
218
|
+
* @returns Normalized progress value between 0 and 1.
|
|
219
|
+
*/
|
|
186
220
|
normalizeProgress(loaded, total) {
|
|
187
221
|
if (!total || total <= 0)
|
|
188
222
|
return 1;
|
|
189
223
|
const ratio = loaded / total;
|
|
190
224
|
return Math.max(0, Math.min(1, ratio));
|
|
191
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* Registers socket event listeners for entity creation and deletion broadcasts.
|
|
228
|
+
*/
|
|
192
229
|
startSocketListeners() {
|
|
193
230
|
this.socket.off("new" + this.className);
|
|
194
231
|
this.socket.off("delete" + this.className);
|
|
@@ -235,6 +272,12 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
235
272
|
}
|
|
236
273
|
});
|
|
237
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Deletes an object by ID from local cache, socket events, and persistent storage adapter.
|
|
277
|
+
*
|
|
278
|
+
* @param _id - Identifier of object to delete.
|
|
279
|
+
* @returns Promise resolving to deletion outcome.
|
|
280
|
+
*/
|
|
238
281
|
async deleteObject(_id) {
|
|
239
282
|
const _idStr = _id.toString();
|
|
240
283
|
this.socket.off(EVENT_UPDATE + this.className + _idStr);
|
|
@@ -245,6 +288,12 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
245
288
|
}
|
|
246
289
|
return res;
|
|
247
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Fetches startup data from the server or applies delta updates from local storage.
|
|
293
|
+
*
|
|
294
|
+
* @param t - Optional benchmark timer tracking object.
|
|
295
|
+
* @returns Promise resolving when data has been loaded and initialized.
|
|
296
|
+
*/
|
|
248
297
|
async loadFromServer(t) {
|
|
249
298
|
let hasRestoredFromStorage = false;
|
|
250
299
|
if (this.storageAdapter && Object.keys(this.objects_).length === 0) {
|
|
@@ -259,9 +308,12 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
259
308
|
const timer = setTimeout(() => {
|
|
260
309
|
reject(new DEMError(DEMErrorCode.TIMEOUT, `Timeout waiting for startup data from server for ${this.className}`));
|
|
261
310
|
}, 5000);
|
|
262
|
-
const startupPayload =
|
|
263
|
-
|
|
264
|
-
|
|
311
|
+
const startupPayload = {
|
|
312
|
+
clientVersion: DEM_CLIENT_VERSION,
|
|
313
|
+
};
|
|
314
|
+
if (this.deltaSyncEnabled && hasRestoredFromStorage) {
|
|
315
|
+
startupPayload.lastRevision = this.lastRevision;
|
|
316
|
+
}
|
|
265
317
|
this.socket.emit("startup" + this.className, startupPayload, async (res) => {
|
|
266
318
|
clearTimeout(timer);
|
|
267
319
|
if (!res || !res.success) {
|
|
@@ -274,20 +326,18 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
274
326
|
const data = res.data;
|
|
275
327
|
// DEM Version Verification
|
|
276
328
|
if (data.version) {
|
|
277
|
-
const verResult = verifyDEMVersion(
|
|
329
|
+
const verResult = verifyDEMVersion(DEM_CLIENT_VERSION, data.version, this.versionOptions);
|
|
278
330
|
if (!verResult.compatible) {
|
|
279
331
|
const errMsg = verResult.message ||
|
|
280
|
-
`DEM Version Incompatibility: Client (${
|
|
332
|
+
`DEM Version Incompatibility: Client (${DEM_CLIENT_VERSION}) is incompatible with Server (${data.version})`;
|
|
281
333
|
this.loggers.error?.(errMsg);
|
|
282
|
-
this.versionOptions?.onVersionMismatch?.(
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
334
|
+
this.versionOptions?.onVersionMismatch?.(DEM_CLIENT_VERSION, data.version, errMsg);
|
|
335
|
+
reject(new DEMError(DEMErrorCode.VERSION_MISMATCH, errMsg));
|
|
336
|
+
return;
|
|
287
337
|
}
|
|
288
338
|
else if (verResult.status !== "match") {
|
|
289
339
|
this.loggers.warn?.(verResult.message);
|
|
290
|
-
this.versionOptions?.onVersionMismatch?.(
|
|
340
|
+
this.versionOptions?.onVersionMismatch?.(DEM_CLIENT_VERSION, data.version, verResult.message);
|
|
291
341
|
}
|
|
292
342
|
}
|
|
293
343
|
else {
|
|
@@ -438,6 +488,13 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
438
488
|
if (t)
|
|
439
489
|
t.f = Date.now();
|
|
440
490
|
}
|
|
491
|
+
/**
|
|
492
|
+
* Verifies structural schema compatibility between client and server class definitions.
|
|
493
|
+
*
|
|
494
|
+
* @param extraProperties - Properties present on client class but absent on server.
|
|
495
|
+
* @param data - Server schema containing registered server property names.
|
|
496
|
+
* @returns Object indicating whether manager is allowed to load and descriptive error message.
|
|
497
|
+
*/
|
|
441
498
|
checkLoadability(extraProperties, data) {
|
|
442
499
|
let allowedToLoad = true;
|
|
443
500
|
let errorMessage = "Local type does not match server type for manager " + this.className;
|
|
@@ -462,20 +519,44 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
462
519
|
}
|
|
463
520
|
return { allowedToLoad, errorMessage };
|
|
464
521
|
}
|
|
522
|
+
/**
|
|
523
|
+
* Retrieves an object from local memory by identifier.
|
|
524
|
+
*
|
|
525
|
+
* @param _id - Entity identifier.
|
|
526
|
+
* @returns Managed object instance, null, or undefined.
|
|
527
|
+
*/
|
|
465
528
|
getObject(_id) {
|
|
466
529
|
if (!_id)
|
|
467
530
|
return null;
|
|
468
531
|
return this.objects_[_id.toString()] || undefined;
|
|
469
532
|
}
|
|
533
|
+
/**
|
|
534
|
+
* Dictionary map containing all managed object instances keyed by ID string.
|
|
535
|
+
*
|
|
536
|
+
* @returns Object dictionary keyed by string IDs.
|
|
537
|
+
*/
|
|
470
538
|
get objects() {
|
|
471
539
|
return this.objects_;
|
|
472
540
|
}
|
|
541
|
+
/**
|
|
542
|
+
* Array representation of all managed object instances, cached for fast reads.
|
|
543
|
+
*
|
|
544
|
+
* @returns Array containing all managed object instances.
|
|
545
|
+
*/
|
|
473
546
|
get objectsAsArray() {
|
|
474
547
|
if (!this._cachedObjectsArray) {
|
|
475
548
|
this._cachedObjectsArray = Object.values(this.objects_);
|
|
476
549
|
}
|
|
477
550
|
return this._cachedObjectsArray;
|
|
478
551
|
}
|
|
552
|
+
/**
|
|
553
|
+
* Fetches an object missing from local client memory on demand from the server.
|
|
554
|
+
* Deduplicates concurrent in-flight requests for the same entity ID.
|
|
555
|
+
*
|
|
556
|
+
* @param _id - Entity identifier of the missing object.
|
|
557
|
+
* @returns Promise resolving to the retrieved object instance.
|
|
558
|
+
* @throws {DEMError} Throws DEMErrorCode.MISSING_ID or MANAGERS_NOT_INITIALIZED.
|
|
559
|
+
*/
|
|
479
560
|
async handleGetMissingObject(_id) {
|
|
480
561
|
const _idStr = _id.toString();
|
|
481
562
|
if (this.getObject(_idStr))
|
|
@@ -513,6 +594,13 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
513
594
|
this.pendingMissingFetches.set(_idStr, fetchPromise);
|
|
514
595
|
return fetchPromise;
|
|
515
596
|
}
|
|
597
|
+
/**
|
|
598
|
+
* Creates a new object instance on the server and registers it in local manager state.
|
|
599
|
+
*
|
|
600
|
+
* @param data - Object property payload omitting `_id`.
|
|
601
|
+
* @returns Promise resolving to the newly created client entity.
|
|
602
|
+
* @throws {DEMError} Throws DEMErrorCode.OBJECT_CREATE_FAILED on failure.
|
|
603
|
+
*/
|
|
516
604
|
async createObject(data) {
|
|
517
605
|
if (!this.managers)
|
|
518
606
|
throw new DEMError(DEMErrorCode.MANAGERS_NOT_INITIALIZED, `No managers.`);
|
|
@@ -549,6 +637,9 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
|
|
|
549
637
|
throw error;
|
|
550
638
|
}
|
|
551
639
|
}
|
|
640
|
+
/**
|
|
641
|
+
* Closes the manager and unbinds all socket event listeners.
|
|
642
|
+
*/
|
|
552
643
|
close() {
|
|
553
644
|
if (this._reconnectHandler) {
|
|
554
645
|
this.socket?.off?.("reconnect", this._reconnectHandler);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoUpdateClientManagerClass.js","sourceRoot":"","sources":["../AutoUpdateClientManagerClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { IAutoUpdatedClientObjectBase, MongoId, IsData, IAutoUpdateManager, Constructor, EventEmitter3, LoggersType, DEMCache, DEMErrorCode } from "./CommonTypes.js";
|
|
2
|
+
import "reflect-metadata";
|
|
3
|
+
export declare abstract class AutoUpdateManager<T extends IAutoUpdatedClientObjectBase, M extends Record<string, IAutoUpdateManager<any>> = Record<string, IAutoUpdateManager<any>>> implements IAutoUpdateManager<T> {
|
|
4
|
+
protected abstract objects_: {
|
|
5
|
+
[_id: string]: T;
|
|
6
|
+
};
|
|
7
|
+
protected isLoaded_: boolean;
|
|
8
|
+
readonly socket: unknown;
|
|
9
|
+
protected classParam: Constructor<T>;
|
|
10
|
+
protected properties: string[];
|
|
11
|
+
readonly className: string;
|
|
12
|
+
readonly cache: DEMCache;
|
|
13
|
+
readonly managers: M;
|
|
14
|
+
protected preloaded: boolean;
|
|
15
|
+
protected waitingToResolveReferences: {
|
|
16
|
+
[_id: string]: string;
|
|
17
|
+
};
|
|
18
|
+
protected loggers: LoggersType;
|
|
19
|
+
protected emitter: EventEmitter3;
|
|
20
|
+
/**
|
|
21
|
+
* Initializes the base AutoUpdateManager instance.
|
|
22
|
+
* Extracts registered property metadata from the class prototype.
|
|
23
|
+
*
|
|
24
|
+
* @param classParam - The constructor function of the managed object class.
|
|
25
|
+
* @param className - The name identifier of the managed class.
|
|
26
|
+
* @param socket - The socket instance (client Socket.IO or server Server).
|
|
27
|
+
* @param loggers - Logging interfaces for info, debug, warn, and error levels.
|
|
28
|
+
* @param managers - Registry of sibling managers.
|
|
29
|
+
* @param emitter - Event emitter for manager and lifecycle events.
|
|
30
|
+
* @throws {DEMError} Throws DEMErrorCode.MISSING_ARGUMENT when classParam is omitted.
|
|
31
|
+
*/
|
|
32
|
+
constructor(classParam: Constructor<T>, className: string, socket: unknown, loggers: LoggersType, managers: M, emitter: EventEmitter3);
|
|
33
|
+
/**
|
|
34
|
+
* Indicates whether the manager has completed its initialization and reference loading.
|
|
35
|
+
*
|
|
36
|
+
* @returns True when the manager is fully loaded.
|
|
37
|
+
*/
|
|
38
|
+
get isLoaded(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Closes the manager, purges cached objects, and disconnects the underlying socket.
|
|
41
|
+
*/
|
|
42
|
+
close(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Asynchronously loads unresolved references across all managed objects.
|
|
45
|
+
* Marks the manager as loaded upon completion.
|
|
46
|
+
*
|
|
47
|
+
* @returns A promise that resolves when all references are loaded.
|
|
48
|
+
*/
|
|
49
|
+
loadReferences(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Deletes an object by its identifier, destroys the instance, and clears global caches.
|
|
52
|
+
*
|
|
53
|
+
* @param _id - The unique identifier of the object to delete.
|
|
54
|
+
* @returns A promise resolving to the deletion result object.
|
|
55
|
+
*/
|
|
56
|
+
deleteObject(_id: MongoId): Promise<{
|
|
57
|
+
success: boolean;
|
|
58
|
+
message: string;
|
|
59
|
+
code?: DEMErrorCode;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Retrieves an array of all managed object string identifiers.
|
|
63
|
+
*
|
|
64
|
+
* @returns Array of object ID strings.
|
|
65
|
+
*/
|
|
66
|
+
get objectIDs(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Fetches an object missing from local memory.
|
|
69
|
+
*
|
|
70
|
+
* @param _id - Identifier of the missing object.
|
|
71
|
+
* @returns A promise resolving to the retrieved object instance.
|
|
72
|
+
*/
|
|
73
|
+
abstract handleGetMissingObject(_id: MongoId): Promise<T>;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a new object instance.
|
|
76
|
+
*
|
|
77
|
+
* @param data - Object initial data properties without the `_id` field.
|
|
78
|
+
* @returns A promise resolving to the created object instance.
|
|
79
|
+
*/
|
|
80
|
+
abstract createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
|
|
81
|
+
/**
|
|
82
|
+
* Retrieves a managed object from local state by ID.
|
|
83
|
+
*
|
|
84
|
+
* @param _id - Optional identifier of the object.
|
|
85
|
+
* @returns The object instance, null, or undefined.
|
|
86
|
+
*/
|
|
87
|
+
abstract getObject(_id?: MongoId): T | null | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Retrieves the dictionary of all managed objects keyed by their identifier.
|
|
90
|
+
*
|
|
91
|
+
* @returns Map of objects keyed by string ID.
|
|
92
|
+
*/
|
|
93
|
+
abstract get objects(): {
|
|
94
|
+
[_id: string]: T;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Retrieves all managed objects as an array.
|
|
98
|
+
*
|
|
99
|
+
* @returns Array containing all managed object instances.
|
|
100
|
+
*/
|
|
101
|
+
abstract get objectsAsArray(): T[];
|
|
102
|
+
}
|
|
@@ -19,6 +19,18 @@ export class AutoUpdateManager {
|
|
|
19
19
|
warn: () => { },
|
|
20
20
|
};
|
|
21
21
|
emitter;
|
|
22
|
+
/**
|
|
23
|
+
* Initializes the base AutoUpdateManager instance.
|
|
24
|
+
* Extracts registered property metadata from the class prototype.
|
|
25
|
+
*
|
|
26
|
+
* @param classParam - The constructor function of the managed object class.
|
|
27
|
+
* @param className - The name identifier of the managed class.
|
|
28
|
+
* @param socket - The socket instance (client Socket.IO or server Server).
|
|
29
|
+
* @param loggers - Logging interfaces for info, debug, warn, and error levels.
|
|
30
|
+
* @param managers - Registry of sibling managers.
|
|
31
|
+
* @param emitter - Event emitter for manager and lifecycle events.
|
|
32
|
+
* @throws {DEMError} Throws DEMErrorCode.MISSING_ARGUMENT when classParam is omitted.
|
|
33
|
+
*/
|
|
22
34
|
constructor(classParam, className, socket, loggers, managers, emitter) {
|
|
23
35
|
if (!classParam)
|
|
24
36
|
throw new DEMError(DEMErrorCode.MISSING_ARGUMENT, "Missing required argument: classParam");
|
|
@@ -43,9 +55,17 @@ export class AutoUpdateManager {
|
|
|
43
55
|
this.loggers.error = (s) => loggers.error?.("[DEM - " + className + " MANAGER] " + s);
|
|
44
56
|
this.loggers.warn = (s) => loggers.warn?.("[DEM - " + className + " MANAGER] " + s);
|
|
45
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Indicates whether the manager has completed its initialization and reference loading.
|
|
60
|
+
*
|
|
61
|
+
* @returns True when the manager is fully loaded.
|
|
62
|
+
*/
|
|
46
63
|
get isLoaded() {
|
|
47
64
|
return this.isLoaded_;
|
|
48
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Closes the manager, purges cached objects, and disconnects the underlying socket.
|
|
68
|
+
*/
|
|
49
69
|
close() {
|
|
50
70
|
for (const id of this.objectIDs) {
|
|
51
71
|
delete this.objects_[id];
|
|
@@ -55,10 +75,22 @@ export class AutoUpdateManager {
|
|
|
55
75
|
this.socket.disconnectSockets?.(true);
|
|
56
76
|
this.loggers.info("Goodbye, see you next time!");
|
|
57
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Asynchronously loads unresolved references across all managed objects.
|
|
80
|
+
* Marks the manager as loaded upon completion.
|
|
81
|
+
*
|
|
82
|
+
* @returns A promise that resolves when all references are loaded.
|
|
83
|
+
*/
|
|
58
84
|
async loadReferences() {
|
|
59
85
|
await Promise.all(this.objectsAsArray.map((obj) => obj.loadMissingReferences()));
|
|
60
86
|
this.isLoaded_ = true;
|
|
61
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Deletes an object by its identifier, destroys the instance, and clears global caches.
|
|
90
|
+
*
|
|
91
|
+
* @param _id - The unique identifier of the object to delete.
|
|
92
|
+
* @returns A promise resolving to the deletion result object.
|
|
93
|
+
*/
|
|
62
94
|
async deleteObject(_id) {
|
|
63
95
|
const _idStr = _id.toString();
|
|
64
96
|
const o = this.objects_[_idStr];
|
|
@@ -73,6 +105,11 @@ export class AutoUpdateManager {
|
|
|
73
105
|
o?.callbacks?.delete?.(this);
|
|
74
106
|
return res ?? { success: true, message: "Already gone" };
|
|
75
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Retrieves an array of all managed object string identifiers.
|
|
110
|
+
*
|
|
111
|
+
* @returns Array of object ID strings.
|
|
112
|
+
*/
|
|
76
113
|
get objectIDs() {
|
|
77
114
|
return Object.keys(this.objects_);
|
|
78
115
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"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"}
|