@prestizni-software/client-dem 0.5.8 → 0.5.9

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.
@@ -1,10 +1,10 @@
1
- import { globalCache, } from "./CommonTypes.js";
1
+ import { globalCache, } from "./CommonTypes";
2
2
  import "reflect-metadata";
3
3
  export class AutoUpdateManager {
4
4
  isLoaded_ = false;
5
5
  socket;
6
6
  classParam;
7
- properties = [];
7
+ properties;
8
8
  className;
9
9
  cache = {
10
10
  references: {},
@@ -20,17 +20,17 @@ export class AutoUpdateManager {
20
20
  };
21
21
  emitter;
22
22
  constructor(classParam, className, socket, loggers, managers, emitter) {
23
+ console.log("DEBUG: AutoUpdateManager constructor, className=" + className + ", socket keys=" + Object.keys(socket || {}).join(","));
23
24
  this.className = className;
24
25
  this.managers = managers;
25
26
  this.emitter = emitter;
26
27
  this.socket = socket;
27
28
  this.classParam = classParam;
28
- this.properties = Reflect.getMetadata("props", classParam.prototype) || [];
29
- // Assign loggers with prefix
30
- this.loggers.debug = (s) => loggers?.debug?.("[DEM - " + className + " MANAGER] " + s);
31
- this.loggers.info = (s) => loggers?.info?.("[DEM - " + className + " MANAGER] " + s);
32
- this.loggers.error = (s) => loggers?.error?.("[DEM - " + className + " MANAGER] " + s);
33
- this.loggers.warn = (s) => loggers?.warn?.("[DEM - " + className + " MANAGER] " + s);
29
+ this.properties = Reflect.getMetadata("props", classParam.prototype);
30
+ this.loggers.debug = (s) => loggers.debug?.("[DEM - " + className + " MANAGER] " + s);
31
+ this.loggers.info = (s) => loggers.info?.("[DEM - " + className + " MANAGER] " + s);
32
+ this.loggers.error = (s) => loggers.error?.("[DEM - " + className + " MANAGER] " + s);
33
+ this.loggers.warn = (s) => loggers.warn?.("[DEM - " + className + " MANAGER] " + s);
34
34
  }
35
35
  get isLoaded() {
36
36
  return this.isLoaded_;
@@ -44,32 +44,19 @@ export class AutoUpdateManager {
44
44
  this.loggers.info("Goodbye, see you next time!");
45
45
  }
46
46
  async loadReferences() {
47
- const objects = this.objectsAsArray;
48
- // Sequential resolution to avoid race conditions during batch load
49
- for (const obj of objects) {
50
- if (typeof obj.resolveReferences === "function") {
51
- await obj.resolveReferences();
52
- }
53
- else {
54
- await obj.loadMissingReferences();
55
- }
47
+ for (const obj of this.objectsAsArray) {
48
+ await obj.loadMissingReferences();
56
49
  }
57
50
  this.isLoaded_ = true;
58
51
  }
59
52
  async deleteObject(_id) {
60
- const idStr = _id.toString();
61
- const o = this.objects_[idStr];
62
- if (!o)
63
- return { success: true, message: "Already gone" };
64
- const res = await o.destroy(true);
53
+ const o = this.objects_[_id];
54
+ const res = await o?.destroy(true);
65
55
  if (res?.success) {
66
- delete this.objects_[idStr];
67
- delete globalCache.objects[idStr];
68
- const callbacks = o.callbacks;
69
- if (callbacks && typeof callbacks.delete === 'function') {
70
- await callbacks.delete(o);
71
- }
56
+ delete this.objects_[_id];
57
+ delete globalCache.objects[_id];
72
58
  }
59
+ await o?.callbacks?.delete?.(this);
73
60
  return res ?? { success: true, message: "Already gone" };
74
61
  }
75
62
  get objectIDs() {
@@ -1 +1 @@
1
- {"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"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"}
@@ -1,93 +1,89 @@
1
1
  import "reflect-metadata";
2
- import { Constructor, EventEmitter3, IsData, LoggersType, PathValueOf, ServerUpdateRequest, MongoId, IDEMSocket } from "./CommonTypes.js";
3
- import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
4
- export type DEMClientCallbacks<T extends AutoUpdatedClientObject<T, any>> = {
2
+ import { Constructor, EventEmitter3, IsData, LoggersType, PathValueOf, ServerUpdateRequest, Paths, OnlyAddedKeys, ExtractedData } from "./CommonTypes";
3
+ import { ObjectId } from "bson";
4
+ import { Socket } from "socket.io-client";
5
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass";
6
+ export type DEMClientCallbacks<T> = {
5
7
  new: (obj: T) => Promise<void> | void;
6
8
  update: (obj: T, key: string) => Promise<void> | void;
7
9
  delete: (obj: T) => Promise<void> | void;
8
10
  progress: (percent: number) => void;
9
- onUpdate?: (obj: T, set: <K extends keyof IsData<T> & string>(key: K, val: PathValueOf<IsData<T>, K>) => Promise<{
10
- success: boolean;
11
- msg: string;
12
- }>) => Promise<void>;
13
11
  };
14
- export declare abstract class AutoUpdatedClientObject<T extends AutoUpdatedClientObject<T, any>, M extends Record<string, any> = any> {
15
- protected entry: unknown;
16
- preLoad: unknown;
17
- registerSocket: unknown;
18
- readyLoggers: unknown;
19
- loadFromDB(a: unknown): unknown;
20
- protected readonly socket: IDEMSocket;
12
+ type SocketType = Socket<any, any>;
13
+ export declare abstract class AutoUpdatedClientObject<T> {
14
+ protected entry: any;
15
+ preLoad: any;
16
+ registerSocket: any;
17
+ readyLoggers: any;
18
+ loadFromDB(a: any): any;
19
+ setValue_(a: any, b: any): any;
20
+ protected readonly socket: SocketType;
21
21
  protected data: IsData<T>;
22
22
  protected readonly isServer: boolean;
23
- abstract readonly _id: MongoId;
23
+ abstract readonly _id: any;
24
24
  protected readonly loggers: LoggersType;
25
25
  protected isLoading: boolean;
26
+ protected loadError?: string;
26
27
  protected isLoadingReferences: boolean;
27
28
  protected checkedMissingRefs: boolean;
28
- protected isDestroyed: boolean;
29
29
  protected readonly emitter: EventEmitter3;
30
- readonly properties: (keyof IsData<T> & string)[];
30
+ readonly properties: (keyof OnlyAddedKeys<T, AutoUpdatedClientObject<T>>)[];
31
31
  readonly classParam: Constructor<T>;
32
32
  readonly className: string;
33
- parentManager: AutoUpdateManager<T, M>;
33
+ parentManager: AutoUpdateManager<AutoUpdatedClientObject<T>>;
34
34
  private readonly EmitterID;
35
35
  protected readonly toChangeOnParents: {
36
36
  key: string;
37
- value: unknown;
37
+ value: any;
38
38
  }[];
39
39
  callbacks: DEMClientCallbacks<T>;
40
- private readonly preloadTimers;
41
40
  private readonly loadReferencesAsync;
42
41
  /** @deprecated Use loadReferencesAsync instead */
43
42
  private readonly loadShit;
44
- constructor(classParam?: Constructor<T>, socket?: IDEMSocket, data?: string | IsData<T>, loggers?: LoggersType, className?: string, parentManager?: AutoUpdateManager<T, M>, callback?: DEMClientCallbacks<T>, emitter?: EventEmitter3, isServer?: boolean);
43
+ constructor(classParam?: Constructor<T>, socket?: SocketType, data?: string | IsData<T>, loggers?: LoggersType, className?: string, parentManager?: AutoUpdateManager<any>, callback?: DEMClientCallbacks<T>, emitter?: EventEmitter3, isServer?: boolean);
45
44
  waitForPreloaded(): Promise<void>;
46
45
  protected handleNewObject(data: IsData<T>): void;
47
- get extractedData(): {
48
- [K in keyof IsData<T>]: unknown;
49
- };
46
+ get extractedData(): ExtractedData<T, AutoUpdatedClientObject<T>>;
50
47
  get isLoaded(): boolean;
51
48
  isPreLoadedAsync(): Promise<boolean>;
52
49
  loadMissingReferences(): Promise<void>;
53
50
  private openSockets;
54
51
  private handleUpdateRequest;
55
52
  protected generateSettersAndGetters(): void;
56
- getValue(key_: keyof IsData<T> & string): unknown;
57
- protected findReference(id: string | MongoId, key: string): unknown;
58
- setValue<K extends keyof IsData<T> & string>(key: K, val: PathValueOf<IsData<T>, K>, options?: {
59
- silent?: boolean;
60
- noGet?: boolean;
61
- noUpdate?: boolean;
62
- isParentUpdate?: boolean;
63
- }): Promise<{
53
+ getValue(key_: Paths<T, AutoUpdatedClientObject<unknown>>): any;
54
+ protected findReference(id: string | ObjectId, key: string): any;
55
+ setValue<K extends Paths<T, AutoUpdatedClientObject<T>>>(key: K, val: PathValueOf<IsData<T>, K>): Promise<{
64
56
  success: boolean;
65
57
  msg: string;
66
58
  }>;
67
- protected setValueInternal(key: string, value: unknown, silent?: boolean, noUpdate?: boolean): Promise<{
59
+ protected setValue__(key: any, val: any, silent?: boolean, noGet?: boolean, noUpdate?: boolean, isParentUpdate?: boolean): Promise<{
68
60
  success: boolean;
69
61
  msg: string;
70
62
  }>;
71
- protected makeUpdate(key: string, value: unknown): ServerUpdateRequest<T>;
72
- protected resolveReference(id: string): Promise<AutoUpdatedClientObject<any, any> | null>;
63
+ protected setValueInternal(key: string, value: any, silent?: boolean, noUpdate?: boolean): Promise<{
64
+ success: boolean;
65
+ msg: string;
66
+ }>;
67
+ protected makeUpdate(key: string, value: any): ServerUpdateRequest<T>;
68
+ protected resolveReference(id: string): Promise<AutoUpdatedClientObject<any> | null>;
73
69
  private findAndLoadReferences;
74
70
  protected wipeSelf(): Promise<void>;
71
+ destroyImmediate(): void;
75
72
  private loadForceReferences;
76
73
  private handleLoad;
77
- onUpdate(noUpdate?: boolean): Promise<void>;
78
- protected createdWithParent(pointer: string[], parent: T | string): Promise<void>;
74
+ protected createdWithParent(pointer: string[], parent: any): Promise<void>;
79
75
  destroy(once?: boolean): Promise<{
80
76
  success: boolean;
81
77
  message: string;
82
78
  }>;
83
- destroyImmediate(): void;
84
79
  private checkForMissingRefs;
85
80
  private findMissingObjectReference;
86
- resolveReferences(): Promise<void>;
87
81
  contactChildren(): Promise<void>;
82
+ onUpdate(): Promise<void>;
88
83
  }
89
- export declare function processIsRefProperties(instance: Record<string, any>, target: object, prefix: string | null, allProps: string[], newData: Record<string, unknown>, loggers: LoggersType): {
84
+ export declare function processIsRefProperties(instance: any, target: any, prefix: string | null, allProps: string[], newData: any, loggers: LoggersType): {
90
85
  allProps: string[];
91
- newData: Record<string, unknown>;
86
+ newData: any;
92
87
  };
93
- export declare function getMetadataRecursive(metaKey: string, target: object, prop: string): unknown;
88
+ export declare function getMetadataRecursive(metaKey: string, proto: any, prop: string): any;
89
+ export {};