@prestizni-software/server-dem 0.5.7 → 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,20 +1,23 @@
1
- import { AutoUpdatedClientObject } from "./AutoUpdatedClientObjectClass.js";
2
- import { Constructor, EventEmitter3, LoggersType, Cache, IsData, MongoId, IDEMSocket } from "./CommonTypes.js";
1
+ import { IAutoUpdatedClientObjectBase, MongoId, IsData, IAutoUpdateManager, Constructor, EventEmitter3, LoggersType, DEMCache } from "./CommonTypes.js";
3
2
  import "reflect-metadata";
4
- export declare abstract class AutoUpdateManager<T extends AutoUpdatedClientObject<T, any>, M = any> {
5
- protected abstract objects_: Record<string, T>;
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
+ };
6
7
  protected isLoaded_: boolean;
7
- readonly socket: IDEMSocket;
8
+ readonly socket: unknown;
8
9
  protected classParam: Constructor<T>;
9
10
  protected properties: string[];
10
11
  readonly className: string;
11
- readonly cache: Cache<T>;
12
+ readonly cache: DEMCache;
12
13
  readonly managers: M;
13
14
  protected preloaded: boolean;
14
- protected waitingToResolveReferences: Record<string, string>;
15
+ protected waitingToResolveReferences: {
16
+ [_id: string]: string;
17
+ };
15
18
  protected loggers: LoggersType;
16
19
  protected emitter: EventEmitter3;
17
- constructor(classParam: Constructor<T>, className: string, socket: IDEMSocket, loggers: LoggersType, managers: M, emitter: EventEmitter3);
20
+ constructor(classParam: Constructor<T>, className: string, socket: unknown, loggers: LoggersType, managers: M, emitter: EventEmitter3);
18
21
  get isLoaded(): boolean;
19
22
  close(): void;
20
23
  loadReferences(): Promise<void>;
@@ -23,14 +26,26 @@ export declare abstract class AutoUpdateManager<T extends AutoUpdatedClientObjec
23
26
  message: string;
24
27
  }>;
25
28
  get objectIDs(): string[];
26
- abstract handleGetMissingObject(_id: string): Promise<T>;
27
- abstract createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
28
- /**
29
- * Returns the object with the given ID.
30
- * If _id is undefined, returns null.
31
- * If _id is provided but object is not found, returns undefined.
32
- */
33
- abstract getObject(_id?: string): T | null | undefined;
34
- abstract get objects(): Record<string, T>;
35
- abstract get objectsAsArray(): T[];
29
+ abstract handleGetMissingObject(_id: MongoId): Promise<T>;
30
+ abstract createObject(data: Partial<IsData<T>>): Promise<T>;
31
+ abstract getObject(_id?: MongoId): (T & {
32
+ parentManager: IAutoUpdateManager<T> & {
33
+ cache: DEMCache;
34
+ managers: M;
35
+ };
36
+ }) | null | undefined;
37
+ abstract get objects(): {
38
+ [_id: string]: T & {
39
+ parentManager: IAutoUpdateManager<T> & {
40
+ cache: DEMCache;
41
+ managers: M;
42
+ };
43
+ };
44
+ };
45
+ abstract get objectsAsArray(): (T & {
46
+ parentManager: IAutoUpdateManager<T> & {
47
+ cache: DEMCache;
48
+ managers: M;
49
+ };
50
+ })[];
36
51
  }
@@ -1,10 +1,10 @@
1
- import { globalCache, } from "./CommonTypes.js";
1
+ import { globalCache } from "./CommonTypes.js";
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
29
  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);
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,20 @@ 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 _idStr = _id.toString();
54
+ const o = this.objects_[_idStr];
55
+ const res = await o?.destroy(true);
65
56
  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
- }
57
+ delete this.objects_[_idStr];
58
+ delete globalCache.objects[_idStr];
72
59
  }
60
+ await o?.callbacks?.delete?.(this);
73
61
  return res ?? { success: true, message: "Already gone" };
74
62
  }
75
63
  get objectIDs() {
@@ -1 +1 @@
1
- {"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,WAAW,GAIZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,MAAM,OAAgB,iBAAiB;IAK3B,SAAS,GAAG,KAAK,CAAC;IACZ,MAAM,CAAa;IACzB,UAAU,CAAiB;IAC3B,UAAU,GAAa,EAAE,CAAC;IACpB,SAAS,CAAS;IAClB,KAAK,GAAa;QAChC,UAAU,EAAE,EAAE;KACf,CAAC;IACc,QAAQ,CAAI;IAClB,SAAS,GAAG,KAAK,CAAC;IAClB,0BAA0B,GAA2B,EAAE,CAAC;IACxD,OAAO,GAAgB;QAC/B,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAC;IACQ,OAAO,CAAgB;IACjC,YACE,UAA0B,EAC1B,SAAiB,EACjB,MAAkB,EAClB,OAAoB,EACpB,QAAW,EACX,OAAsB;QAEtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE3E,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CACjC,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAChC,OAAO,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CACjC,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAChC,OAAO,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,KAAK;QACV,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAK,IAAI,CAAC,MAAc,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QACpC,mEAAmE;QACnE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAQ,GAAW,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;gBACzD,MAAO,GAAW,CAAC,iBAAiB,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,GAAY;QAEZ,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QAE1D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,SAAS,GAAI,CAAS,CAAC,SAAS,CAAC;YACvC,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACtD,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC3D,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;CAgBF"}
1
+ {"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,31 @@
1
1
  import { Server, Socket } from "socket.io";
2
2
  import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
3
- import { AutoUpdatedServerObject } from "./AutoUpdatedServerObjectClass.js";
4
- import { Constructor, EventEmitter3, IsData, LoggersType, ServerUpdateRequest, InstanceOf, PathValueOf, MongoId } from "./CommonTypes.js";
5
- import { BeAnObject, ReturnModelType } from "@typegoose/typegoose/lib/types.js";
6
- /**
7
- * A base type for any server manager.
8
- * This is used for constraints to avoid circularity issues with specific model types.
9
- */
10
- export interface IAutoUpdateServerManager<T extends AutoUpdatedServerObject<T, any> = any, M extends Record<string, any> = any> {
11
- readonly className: string;
12
- getObject(id?: string): T | null | undefined;
13
- readonly objectsAsArray: T[];
14
- readonly managers: M;
15
- readonly model: any;
16
- options?: AUSOption<T, M>;
17
- createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
18
- deleteObject(id: MongoId): Promise<{
19
- success: boolean;
20
- message: string;
21
- }>;
22
- }
23
- /**
24
- * A record of any server managers.
25
- */
26
- export type BaseManagers = Record<string, IAutoUpdateServerManager>;
27
- /**
28
- * System-wide instances record, strictly typed.
29
- */
30
- export type ManagersRecord<T extends Record<string, Constructor<AutoUpdatedServerObject<any, any>>>> = {
31
- [K in keyof T]: AutoUpdateServerManager<InstanceOf<T[K]>, ManagersRecord<T>>;
3
+ import { Constructor, IsData, LoggersType, IAutoUpdatedClientObject, EventEmitter3, MongoId, IAutoUpdateManager } from "./CommonTypes.js";
4
+ import { BeAnObject, ReturnModelType } from "@typegoose/typegoose/lib/types";
5
+ export type WrappedInstances<T extends Record<string, IAutoUpdatedClientObject<any>>> = {
6
+ [K in keyof T]: AutoUpdateServerManager<T[K]>;
32
7
  };
33
- export type WrappedInstances<T extends Record<string, Constructor<AutoUpdatedServerObject<any, any>>>> = ManagersRecord<T>;
34
- export type AUSDefinitions<T extends Record<string, Constructor<AutoUpdatedServerObject<any, any>>>> = {
35
- [K in keyof T]: ServerManagerDefinition<InstanceOf<T[K]>, ManagersRecord<T>>;
8
+ export type AUSDefinitions<T extends Record<string, IAutoUpdatedClientObject<any>>> = {
9
+ [K in keyof T]: ServerManagerDefinition<T[K], T>;
36
10
  };
37
- export type EventMiddlewareFunction<M extends BaseManagers, C extends AutoUpdatedServerObject<any, M>> = (event: DEMEvent<C, M>, managers: M, socket: Socket) => Promise<void>;
38
- export type StartupMiddlewareFunction<C extends AutoUpdatedServerObject<any, any>, M extends BaseManagers> = (objects: C[], managers: M, socket: Socket) => Promise<C[]>;
39
- export type AccessMiddleware<C extends AutoUpdatedServerObject<any, any>, M extends BaseManagers> = {
40
- eventMiddleware?: EventMiddlewareFunction<M, C>;
41
- startupMiddleware?: StartupMiddlewareFunction<C, M>;
11
+ export type EventMiddlewareFunction<T extends Record<string, IAutoUpdatedClientObject<any>>, C extends IAutoUpdatedClientObject<any>> = (event: DEMEvent<C>, managers: WrappedInstances<T>, socket: Socket) => Promise<void>;
12
+ export type StartupMiddlewareFunction<T extends Record<string, IAutoUpdatedClientObject<any>>, C extends IAutoUpdatedClientObject<any>> = (ids: C[], managers: WrappedInstances<T>, socket: Socket) => Promise<C[]>;
13
+ export type AccessMiddleware<T extends Record<string, IAutoUpdatedClientObject<any>>, C extends IAutoUpdatedClientObject<any>> = {
14
+ eventMiddleware?: EventMiddlewareFunction<T, C>;
15
+ startupMiddleware?: StartupMiddlewareFunction<T, C>;
42
16
  };
43
- export type AUSOption<C extends AutoUpdatedServerObject<any, any>, M extends BaseManagers> = {
44
- accessDefinitions?: AccessMiddleware<C, M>;
45
- onUpdate?: (obj: C, set: <K extends keyof IsData<C> & string>(key: K, val: PathValueOf<IsData<C>, K>) => Promise<{
17
+ export type AUSOption<C extends IAutoUpdatedClientObject<any>, T extends Record<string, IAutoUpdatedClientObject<any>>> = {
18
+ accessDefinitions?: AccessMiddleware<T, C>;
19
+ onUpdate?: (obj: C, set: (key: string, val: any) => Promise<{
46
20
  success: boolean;
47
21
  msg: string;
48
22
  }>) => Promise<void>;
49
23
  };
50
- export type ServerManagerDefinition<C extends AutoUpdatedServerObject<any, any>, M extends BaseManagers> = {
24
+ export type ServerManagerDefinition<C extends IAutoUpdatedClientObject<any>, T extends Record<string, IAutoUpdatedClientObject<any>>> = {
51
25
  class: Constructor<C>;
52
- options?: AUSOption<C, M>;
26
+ options?: AUSOption<C, T>;
53
27
  };
28
+ export type BaseManagers = Record<string, IAutoUpdateManager<any>>;
54
29
  export declare enum DEMEventTypes {
55
30
  "new" = "new",
56
31
  "update" = "update",
@@ -58,54 +33,61 @@ export declare enum DEMEventTypes {
58
33
  "get" = "get",
59
34
  "startup" = "startup"
60
35
  }
61
- export type DEMEvent<C extends AutoUpdatedServerObject<any, any>, M extends BaseManagers> = {
62
- type: DEMEventTypes.delete;
63
- manager: AutoUpdateServerManager<C, M>;
64
- object: C;
65
- data: undefined;
66
- } | {
67
- type: DEMEventTypes.get;
68
- manager: AutoUpdateServerManager<C, M>;
36
+ export type DEMEvent<C extends IAutoUpdatedClientObject<any>> = {
37
+ type: DEMEventTypes.delete | DEMEventTypes.get;
38
+ manager: IAutoUpdateManager<C>;
69
39
  object: C;
70
- data: undefined;
40
+ data: never;
71
41
  } | {
72
42
  type: DEMEventTypes.update;
73
- manager: AutoUpdateServerManager<C, M>;
43
+ manager: IAutoUpdateManager<C>;
74
44
  object: C;
75
- data: ServerUpdateRequest<C>;
45
+ data: {
46
+ _id: string;
47
+ key: string;
48
+ value: unknown;
49
+ };
76
50
  } | {
77
51
  type: DEMEventTypes.startup;
78
- manager: AutoUpdateServerManager<C, M>;
79
- object: undefined;
80
- data: undefined;
52
+ manager: IAutoUpdateManager<C>;
53
+ object: never;
54
+ data: never;
81
55
  } | {
82
56
  type: DEMEventTypes.new;
83
- manager: AutoUpdateServerManager<C, M>;
84
- object: undefined;
85
- data: Omit<IsData<C>, "_id">;
57
+ manager: IAutoUpdateManager<C>;
58
+ object: never;
59
+ data: IsData<any>;
86
60
  };
87
- export declare function AUSManagerFactory<T extends Record<string, Constructor<AutoUpdatedServerObject<any, any>>>>(defs: {
88
- [K in keyof T]: {
89
- class: T[K];
90
- options?: AUSOption<InstanceOf<T[K]>, ManagersRecord<T>>;
91
- };
92
- }, loggers: LoggersType, socket: Server, disableDEMDebugMessages?: boolean, emitter?: EventEmitter3, models?: any): Promise<ManagersRecord<T>>;
93
- export declare class AutoUpdateServerManager<T extends AutoUpdatedServerObject<T, any>, M extends BaseManagers = any> extends AutoUpdateManager<T, M> {
94
- readonly model: ReturnModelType<Constructor<T>, BeAnObject>;
61
+ export declare function AUSManagerFactory<T extends Record<string, IAutoUpdatedClientObject<any>>>(defs: AUSDefinitions<T>, loggers: LoggersType, socket: Server, _disableDEMDebugMessages?: boolean, emitter?: EventEmitter3, models?: unknown): Promise<WrappedInstances<T>>;
62
+ export declare class AutoUpdateServerManager<T extends IAutoUpdatedClientObject<T>, M extends Record<string, IAutoUpdateManager<any>> = any> extends AutoUpdateManager<T, M> {
63
+ readonly model: ReturnModelType<any, BeAnObject>;
95
64
  private readonly clientSockets;
96
- readonly options?: AUSOption<T, M>;
97
- protected objects_: Record<string, T>;
65
+ readonly options?: AUSOption<T, Record<string, IAutoUpdatedClientObject<any>>>;
66
+ protected objects_: {
67
+ [_id: string]: T;
68
+ };
98
69
  readonly managers: M;
99
- constructor(classParam: Constructor<T>, className: string, loggers: LoggersType, socket: Server, model: ReturnModelType<Constructor<T>, BeAnObject>, managers: M, emitter: EventEmitter3, options?: AUSOption<T, M>);
70
+ constructor(classParam: Constructor<T>, className: string, socket: Server, loggers: LoggersType, model: ReturnModelType<any, BeAnObject>, managers: M, emitter: EventEmitter3, options?: AUSOption<T, Record<string, IAutoUpdatedClientObject<any>>>);
100
71
  preLoad(): Promise<void>;
101
72
  registerSocket(socket: Socket): void;
102
- getObject(_id?: string): T | null | undefined;
103
- get objects(): Record<string, T>;
104
- get objectsAsArray(): T[];
105
- handleGetMissingObject(_id: string): Promise<T>;
106
- createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
107
- deleteObject(_id: MongoId): Promise<{
108
- success: boolean;
109
- message: string;
73
+ getObject(_id: MongoId): (T & {
74
+ parentManager: IAutoUpdateManager<T> & {
75
+ cache: Cache;
76
+ managers: M;
77
+ };
78
+ }) | null | undefined;
79
+ get objects(): Record<string, T & {
80
+ parentManager: IAutoUpdateManager<T> & {
81
+ cache: Cache;
82
+ managers: M;
83
+ };
110
84
  }>;
85
+ get objectsAsArray(): (T & {
86
+ parentManager: IAutoUpdateManager<T> & {
87
+ cache: Cache;
88
+ managers: M;
89
+ };
90
+ })[];
91
+ handleGetMissingObject(_id: MongoId): Promise<T>;
92
+ createObject(data: IsData<T>): Promise<T>;
111
93
  }