@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.
Files changed (63) hide show
  1. package/AutoUpdateClientManagerClass.d.ts +141 -0
  2. package/{dist/AutoUpdateClientManagerClass.js → AutoUpdateClientManagerClass.js} +103 -12
  3. package/AutoUpdateClientManagerClass.js.map +1 -0
  4. package/AutoUpdateManagerClass.d.ts +102 -0
  5. package/{dist/AutoUpdateManagerClass.js → AutoUpdateManagerClass.js} +37 -0
  6. package/AutoUpdateManagerClass.js.map +1 -0
  7. package/{dist/AutoUpdatedClientObjectClass.d.ts → AutoUpdatedClientObjectClass.d.ts} +114 -0
  8. package/{dist/AutoUpdatedClientObjectClass.js → AutoUpdatedClientObjectClass.js} +108 -0
  9. package/AutoUpdatedClientObjectClass.js.map +1 -0
  10. package/{dist/CommonTypes.d.ts → CommonTypes.d.ts} +48 -9
  11. package/{dist/CommonTypes.js → CommonTypes.js} +52 -22
  12. package/CommonTypes.js.map +1 -0
  13. package/{dist/DEMErrors.d.ts → DEMErrors.d.ts} +22 -2
  14. package/{dist/DEMErrors.js → DEMErrors.js} +22 -2
  15. package/{dist/DEMErrors.js.map → DEMErrors.js.map} +1 -1
  16. package/package.json +20 -40
  17. package/{dist/sync → sync}/ClientStateReconciler.d.ts +20 -0
  18. package/{dist/sync → sync}/ClientStateReconciler.js +20 -0
  19. package/sync/ClientStateReconciler.js.map +1 -0
  20. package/{dist/sync → sync}/ServerChangeTracker.d.ts +46 -0
  21. package/{dist/sync → sync}/ServerChangeTracker.js +46 -0
  22. package/sync/ServerChangeTracker.js.map +1 -0
  23. package/sync/storage/IndexedDbStorageAdapter.d.ts +53 -0
  24. package/{dist/sync → sync}/storage/IndexedDbStorageAdapter.js +31 -0
  25. package/sync/storage/IndexedDbStorageAdapter.js.map +1 -0
  26. package/sync/storage/LocalStorageAdapter.d.ts +59 -0
  27. package/{dist/sync → sync}/storage/LocalStorageAdapter.js +32 -0
  28. package/sync/storage/LocalStorageAdapter.js.map +1 -0
  29. package/sync/storage/MemoryStorageAdapter.d.ts +34 -0
  30. package/sync/storage/MemoryStorageAdapter.js +45 -0
  31. package/sync/storage/MemoryStorageAdapter.js.map +1 -0
  32. package/version.d.ts +21 -0
  33. package/version.js +22 -0
  34. package/version.js.map +1 -0
  35. package/README.md +0 -18
  36. package/dist/AutoUpdateClientManagerClass.d.ts +0 -51
  37. package/dist/AutoUpdateClientManagerClass.js.map +0 -1
  38. package/dist/AutoUpdateManagerClass.d.ts +0 -37
  39. package/dist/AutoUpdateManagerClass.js.map +0 -1
  40. package/dist/AutoUpdatedClientObjectClass.js.map +0 -1
  41. package/dist/CommonTypes.js.map +0 -1
  42. package/dist/sync/ClientStateReconciler.js.map +0 -1
  43. package/dist/sync/ServerChangeTracker.js.map +0 -1
  44. package/dist/sync/storage/IndexedDbStorageAdapter.d.ts +0 -22
  45. package/dist/sync/storage/IndexedDbStorageAdapter.js.map +0 -1
  46. package/dist/sync/storage/LocalStorageAdapter.d.ts +0 -27
  47. package/dist/sync/storage/LocalStorageAdapter.js.map +0 -1
  48. package/dist/sync/storage/MemoryStorageAdapter.d.ts +0 -13
  49. package/dist/sync/storage/MemoryStorageAdapter.js +0 -25
  50. package/dist/sync/storage/MemoryStorageAdapter.js.map +0 -1
  51. package/dist/tsconfig.tsbuildinfo +0 -1
  52. /package/{dist/client.d.ts → client.d.ts} +0 -0
  53. /package/{dist/client.js → client.js} +0 -0
  54. /package/{dist/client.js.map → client.js.map} +0 -0
  55. /package/{dist/sync → sync}/index.d.ts +0 -0
  56. /package/{dist/sync → sync}/index.js +0 -0
  57. /package/{dist/sync → sync}/index.js.map +0 -0
  58. /package/{dist/sync → sync}/storage/IClientStorageAdapter.d.ts +0 -0
  59. /package/{dist/sync → sync}/storage/IClientStorageAdapter.js +0 -0
  60. /package/{dist/sync → sync}/storage/IClientStorageAdapter.js.map +0 -0
  61. /package/{dist/sync → sync}/types.d.ts +0 -0
  62. /package/{dist/sync → sync}/types.js +0 -0
  63. /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, DEM_VERSION, verifyDEMVersion, DEMError, DEMErrorCode, } from "./CommonTypes.js";
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 = this.deltaSyncEnabled && hasRestoredFromStorage
263
- ? { lastRevision: this.lastRevision }
264
- : null;
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(DEM_VERSION, data.version, this.versionOptions);
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 (${DEM_VERSION}) is incompatible with Server (${data.version})`;
332
+ `DEM Version Incompatibility: Client (${DEM_CLIENT_VERSION}) is incompatible with Server (${data.version})`;
281
333
  this.loggers.error?.(errMsg);
282
- this.versionOptions?.onVersionMismatch?.(DEM_VERSION, data.version, errMsg);
283
- if (this.versionOptions?.strictVersionMatch) {
284
- reject(new DEMError(DEMErrorCode.VERSION_MISMATCH, errMsg));
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?.(DEM_VERSION, data.version, verResult.message);
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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"}