@prestizni-software/client-dem 0.4.113 → 0.4.114

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,35 +1,28 @@
1
- import { Socket } from "socket.io-client";
2
- import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
3
1
  import { AutoUpdatedClientObject, DEMClientCallbacks } from "./AutoUpdatedClientObjectClass.js";
4
- import { Constructor, IsData, LoggersType } from "./CommonTypes.js";
5
- import { EventEmitter } from "eventemitter3";
6
- export type WrappedInstances<T extends Record<string, Constructor<AutoUpdatedClientObject<any>>>> = {
7
- [K in keyof T]: AutoUpdateClientManager<InstanceType<T[K]>>;
2
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
3
+ import { Constructor, EventEmitter3, IsData, LoggersType, MongoId, InstanceOf, IDEMSocket } from "./CommonTypes.js";
4
+ import { Socket } from "socket.io-client";
5
+ export type AUCDefinitions<T extends Record<string, Constructor<AutoUpdatedClientObject<any, any>>> = any> = {
6
+ [K in keyof T]: T[K];
7
+ };
8
+ export type WrappedClientInstances<T extends Record<string, Constructor<AutoUpdatedClientObject<any, any>>>> = {
9
+ [K in keyof T]: AutoUpdateClientManager<InstanceOf<T[K]>, WrappedClientInstances<T>>;
8
10
  };
9
- export declare function AUCManagerFactory<T extends Record<string, Constructor<AutoUpdatedClientObject<any>>>>(defs: T, loggers: LoggersType, socket: Socket, doDebug?: boolean, emitter?: EventEmitter, callbacks?: Partial<{
10
- [K in keyof T]: Partial<DEMClientCallbacks<InstanceType<T[K]>>>;
11
- }>): Promise<WrappedInstances<T>>;
12
- export declare class AutoUpdateClientManager<T extends AutoUpdatedClientObject<T>> extends AutoUpdateManager<T> {
13
- protected objects_: {
14
- [_id: string]: T;
15
- };
16
- readonly managers: Record<string, AutoUpdateClientManager<any>>;
11
+ export declare function AUCManagerFactory<T extends Record<string, Constructor<AutoUpdatedClientObject<any, any>>>>(defs: T, loggers: LoggersType, socket: Socket, doDebug?: boolean, emitter?: EventEmitter3): Promise<WrappedClientInstances<T>>;
12
+ export declare class AutoUpdateClientManager<T extends AutoUpdatedClientObject<T, M>, M extends Record<string, any> = Record<string, any>> extends AutoUpdateManager<T, M> {
13
+ protected objects_: Record<string, T>;
17
14
  callbacks: DEMClientCallbacks<T>;
18
- socket: Socket;
19
- totalObjects: number;
20
- loadedObjects: number;
21
- constructor(classParam: Constructor<T>, className: string, loggers: LoggersType, socket: Socket, managers: Record<string, AutoUpdateClientManager<any>>, emitter: EventEmitter, callbacks: DEMClientCallbacks<T>);
22
- private startSocketListeners;
23
- loadFromServer(t?: {
24
- s: number;
25
- f: number;
26
- }): Promise<void>;
27
- private checkLoadability;
28
- getObject(_id?: string): T | null;
29
- get objects(): {
30
- [_id: string]: T;
31
- };
15
+ constructor(classParam: Constructor<T>, className: string, socket: IDEMSocket, loggers: LoggersType, managers: M, emitter: EventEmitter3, callbacks?: DEMClientCallbacks<T>);
16
+ preLoad(data: (IsData<T> | string)[]): Promise<void>;
17
+ getObject(_id?: string): T | null | undefined;
18
+ get objects(): Record<string, T>;
32
19
  get objectsAsArray(): T[];
33
20
  handleGetMissingObject(_id: string): Promise<T>;
34
21
  createObject(data: Omit<IsData<T>, "_id">): Promise<T>;
22
+ startSocketListeners(): void;
23
+ deleteObject(_id: MongoId): Promise<{
24
+ success: boolean;
25
+ message: string;
26
+ }>;
27
+ loadFromServer(): Promise<void>;
35
28
  }
@@ -1,247 +1,91 @@
1
1
  import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
2
- import { globalCache, EVENT_NEW, } from "./CommonTypes.js";
2
+ import { EVENT_STARTUP, globalCache, EVENT_NEW, EVENT_DELETE, } from "./CommonTypes.js";
3
3
  import { EventEmitter } from "eventemitter3";
4
- // ---------------------- Factory ----------------------
5
- export async function AUCManagerFactory(defs, loggers, socket, doDebug = false, emitter = new EventEmitter(), callbacks = {}) {
6
- const defaultCallbacks = {
7
- new: (obj) => { },
8
- update: (obj, key) => { },
9
- delete: (obj) => { },
10
- progress: (percent) => { },
11
- onUpdate: async (obj, set) => { },
12
- };
13
- if (!doDebug) {
14
- loggers.debug = (_) => { };
15
- }
16
- let wholeProgress = 0;
17
- let numberOfManagers = Object.keys(defs).length || 1;
18
- const progressUpdater = (percent) => {
19
- // global progress logic if needed
20
- };
4
+ export async function AUCManagerFactory(defs, loggers, socket, doDebug = false, emitter = new EventEmitter()) {
21
5
  const managers = {};
22
- const startStartTime = Date.now();
23
- let startTime = Date.now();
24
6
  for (const key in defs) {
25
- try {
26
- const Model = defs[key];
27
- const innerProgressUpdater = (fraction) => {
28
- progressUpdater(wholeProgress + (numberOfManagers == 0 ? 1 : fraction / numberOfManagers));
29
- if (fraction == 1)
30
- wholeProgress += numberOfManagers == 0 ? 1 : fraction / numberOfManagers;
31
- };
32
- const c = new AutoUpdateClientManager(Model, key, loggers, socket, managers, emitter, {
33
- ...defaultCallbacks,
34
- ...callbacks[key],
35
- progress: innerProgressUpdater,
36
- });
37
- managers[key] = c;
38
- }
39
- catch (error) {
40
- if (error.message.includes("Local type does not match server type for manager"))
41
- throw error;
42
- let message = `Creating manager for: ${key}`;
43
- message += "\n Error creating manager: " + key;
44
- message += "\n " + error.message;
45
- loggers.error(message);
46
- loggers.error(error.stack);
47
- continue;
48
- }
7
+ const className = key;
8
+ const classParam = defs[key];
9
+ const manager = new AutoUpdateClientManager(classParam, className, socket, loggers, managers, emitter);
10
+ managers[key] = manager;
11
+ manager.startSocketListeners();
49
12
  }
50
- loggers.debug("Created all managers in " + (Date.now() - startTime) + "ms");
51
- startTime = Date.now();
52
- const loadPromises = Object.keys(defs).map(async (key) => {
53
- let temp2 = { s: Date.now(), f: 0 };
54
- try {
55
- if (!managers[key]) {
56
- throw new Error(`Manager ${key} was not created due to previous error`);
57
- }
58
- await managers[key].loadFromServer(temp2);
59
- loggers.debug("Loaded data from server for manager: " +
60
- key +
61
- " in " +
62
- (temp2.f - temp2.s) +
63
- "ms");
64
- }
65
- catch (error) {
66
- if (error.message.includes("Local type does not match server type for manager"))
67
- throw error;
68
- let message = "Error loading data from server for manager: " + key;
69
- message += "\n " + error.message;
70
- message += "\n Failed in " + (temp2.f - temp2.s) + "ms";
71
- loggers.error(message);
72
- loggers.error(error.stack);
13
+ return new Promise((resolve) => {
14
+ let resolved = false;
15
+ const done = () => {
16
+ if (resolved)
17
+ return;
18
+ resolved = true;
19
+ resolve(managers);
20
+ };
21
+ const individualStartup = Promise.all(Object.entries(managers).map(([key, manager]) => {
22
+ return new Promise((res) => {
23
+ if (!socket || typeof socket.emit !== 'function')
24
+ return res();
25
+ const timer = setTimeout(res, 3000);
26
+ socket.emit(EVENT_STARTUP + key, null, async (response) => {
27
+ clearTimeout(timer);
28
+ if (response.success && response.data) {
29
+ const data = response.data.ids || (Array.isArray(response.data) ? response.data : []);
30
+ await manager.preLoad(data);
31
+ }
32
+ else if (!response.success) {
33
+ loggers?.error?.("Error starting up " + key + ": " + response.message);
34
+ }
35
+ res();
36
+ });
37
+ });
38
+ }));
39
+ if (socket && typeof socket.on === 'function') {
40
+ socket.on(EVENT_STARTUP, async (data) => {
41
+ if (data) {
42
+ const promises = Object.entries(managers).map(async ([key, manager]) => {
43
+ if (!manager.isLoaded) {
44
+ await manager.preLoad(data[key] || []);
45
+ }
46
+ });
47
+ await Promise.all(promises);
48
+ }
49
+ done();
50
+ });
73
51
  }
52
+ individualStartup.then(() => {
53
+ setTimeout(done, 100);
54
+ });
55
+ setTimeout(done, 5000);
74
56
  });
75
- await Promise.all(loadPromises);
76
- loggers.debug("Loaded data from server for all managers in " +
77
- (Date.now() - startTime) +
78
- "ms");
79
- loggers.info("Loaded all managers in " + (Date.now() - startStartTime) + "ms");
80
- return managers;
81
57
  }
82
58
  export class AutoUpdateClientManager extends AutoUpdateManager {
83
59
  objects_ = {};
84
- managers;
85
60
  callbacks;
86
- totalObjects = 0;
87
- loadedObjects = 0;
88
- constructor(classParam, className, loggers, socket, managers, emitter, callbacks) {
61
+ constructor(classParam, className, socket, loggers, managers, emitter, callbacks) {
89
62
  super(classParam, className, socket, loggers, managers, emitter);
90
- this.managers = managers;
91
- this.callbacks = callbacks;
63
+ this.callbacks = callbacks || {
64
+ new: () => { },
65
+ update: () => { },
66
+ delete: () => { },
67
+ progress: () => { },
68
+ };
92
69
  }
93
- startSocketListeners() {
94
- this.socket.on("new" + this.className, async (id) => {
95
- this.loggers.debug("Applying new object from manager " + this.className + " - " + id);
96
- try {
97
- this.totalObjects += 1;
98
- await this.handleGetMissingObject(id);
99
- this.loadedObjects += 1;
100
- }
101
- catch (error) {
102
- this.loggers.error("Error loading object " +
103
- id +
104
- " from manager " +
105
- this.className +
106
- " - " +
107
- error.message);
108
- this.loggers.error(error.stack);
109
- }
110
- });
111
- this.socket.on("delete" + this.className, async (id) => {
112
- this.loggers.debug("Applying object deletion from manager " + this.className + " - " + id);
113
- try {
114
- this.totalObjects -= 1;
115
- this.loadedObjects -= 1;
116
- await this.deleteObject(id);
117
- }
118
- catch (error) {
119
- this.loggers.error("Error applying object deletion from manager " +
120
- this.className +
121
- " - " +
122
- id);
123
- this.loggers.error(error.message);
124
- this.loggers.error(error.stack);
125
- }
70
+ async preLoad(data) {
71
+ const promises = data.map(async (d) => {
72
+ const id = typeof d === 'string' ? d : d._id?.toString() || d.id;
73
+ if (!id)
74
+ return;
75
+ if (this.objects_[id])
76
+ return;
77
+ const obj = new this.classParam(this.classParam, this.socket, d, this.loggers, this.className, this, this.callbacks, this.emitter);
78
+ this.objects_[id] = obj;
79
+ globalCache.objects[id] = { className: this.className, object: obj };
80
+ obj.waitForPreloaded?.().catch(() => { });
126
81
  });
127
- }
128
- async loadFromServer(t) {
129
- await new Promise((resolve, reject) => {
130
- this.socket.emit("startup" + this.className, null, async (res) => {
131
- if (!res.success) {
132
- this.loggers.error("Error loading ids from server for manager");
133
- this.loggers.error(res.message);
134
- reject(new Error(res.message));
135
- return;
136
- }
137
- const data = res.data;
138
- const serverIds = new Set(data.ids);
139
- for (const id in this.objects_) {
140
- if (!serverIds.has(id)) {
141
- delete globalCache.objects[id];
142
- delete this.objects_[id];
143
- }
144
- }
145
- let extraProperties = [];
146
- for (const property of this.properties) {
147
- if (typeof property !== "string")
148
- throw new Error("Only string keys allowed. Not this shit: " + String(property));
149
- if (data.properties.includes(property))
150
- data.properties.splice(data.properties.indexOf(property), 1);
151
- else
152
- extraProperties.push(property);
153
- }
154
- let { allowedToLoad, errorMessage } = this.checkLoadability(extraProperties, data);
155
- if (!allowedToLoad) {
156
- this.loggers.error(errorMessage);
157
- reject(new Error(errorMessage));
158
- return;
159
- }
160
- this.loggers.debug("Loading manager DB " +
161
- this.className +
162
- " - [" +
163
- data.ids.length +
164
- "] entries");
165
- // Only join and log if we're actually going to use the debug log
166
- if (this.loggers.debug && this.loggers.debug.toString().length > 15) {
167
- this.loggers.debug(data.ids.join(", "));
168
- }
169
- this.totalObjects = data.ids.length;
170
- for (const id of data.ids) {
171
- try {
172
- this.objects_[id] = new this.classParam(this.classParam, this.socket, id, this.loggers, this.className, this, this.callbacks, this.emitter);
173
- globalCache.objects[id] = {
174
- className: this.className,
175
- object: this.objects_[id],
176
- };
177
- }
178
- catch (error) {
179
- this.loggers.error("Error loading object " +
180
- id +
181
- " from manager " +
182
- this.className +
183
- " - " +
184
- error.message);
185
- this.loggers.error(error.stack);
186
- }
187
- }
188
- const objectPromises = Object.keys(this.objects_).map(async (id) => {
189
- const obj = this.objects_[id];
190
- try {
191
- obj.generateSettersAndGetters();
192
- await obj.isPreLoadedAsync();
193
- await obj.loadMissingReferences();
194
- this.loadedObjects += 1;
195
- if (this.totalObjects < 100 || this.loadedObjects % Math.ceil(this.totalObjects / 100) === 0 || this.loadedObjects === this.totalObjects) {
196
- this.callbacks.progress(this.loadedObjects / this.totalObjects);
197
- }
198
- }
199
- catch (error) {
200
- this.loggers.error("Error loading object " +
201
- id +
202
- " from manager " +
203
- this.className +
204
- " - " +
205
- error.message);
206
- this.loggers.error(error.stack);
207
- }
208
- });
209
- await Promise.all(objectPromises);
210
- this.loggers.info("Loaded " + this.className + " - [" + Object.keys(this.objects_).length + "] entries");
211
- this.startSocketListeners();
212
- this.isLoaded_ = true;
213
- resolve();
214
- });
215
- });
216
- t ? (t.f = Date.now()) : void 0;
217
- }
218
- checkLoadability(extraProperties, data) {
219
- let allowedToLoad = true;
220
- let errorMessage = "Local type does not match server type for manager " + this.className;
221
- if (extraProperties.length > 0) {
222
- allowedToLoad = false;
223
- errorMessage +=
224
- "\n\nLocal type has " +
225
- (extraProperties.length > 1
226
- ? "these extra properties"
227
- : "this extra property") +
228
- ":\n" +
229
- extraProperties.join("\n");
230
- }
231
- if (data.properties.length > 0) {
232
- allowedToLoad = false;
233
- errorMessage +=
234
- "\n\nLocal type is missing " +
235
- (data.properties.length > 1 ? "these properties" : "this property") +
236
- ":\n" +
237
- data.properties.join("\n");
238
- }
239
- return { allowedToLoad, errorMessage };
82
+ await Promise.all(promises);
83
+ this.isLoaded_ = true;
240
84
  }
241
85
  getObject(_id) {
242
- if (!_id)
86
+ if (_id === undefined)
243
87
  return null;
244
- return this.objects_[_id];
88
+ return this.objects_[_id] || undefined;
245
89
  }
246
90
  get objects() {
247
91
  return this.objects_;
@@ -250,53 +94,89 @@ export class AutoUpdateClientManager extends AutoUpdateManager {
250
94
  return Object.values(this.objects_);
251
95
  }
252
96
  async handleGetMissingObject(_id) {
253
- if (this.getObject(_id))
254
- return this.getObject(_id);
255
- if (!_id)
256
- throw new Error("No id.");
257
- if (!this.managers)
258
- throw new Error(`No managers.`);
259
97
  if (this.objects_[_id])
260
98
  return this.objects_[_id];
261
- if (await new Promise((resolve, _) => this.socket.emit("startup" + this.className, null, async (res) => {
262
- if (res.success && res.data.ids.includes(_id))
263
- resolve(false);
264
- resolve(true);
265
- })))
266
- throw new Error("Non existent or not accesable.");
267
- const object = new this.classParam(this.classParam, this.socket, _id, this.loggers, this.className, this, this.callbacks, this.emitter);
268
- await object.waitForPreloaded();
269
- this.objects_[object._id] = object;
270
- globalCache.objects[object._id] = { className: this.className, object };
271
- await object.isPreLoadedAsync();
272
- await object.loadMissingReferences();
273
- await object.contactChildren();
274
- this.callbacks.new(object);
275
- return object;
276
- }
277
- async createObject(data) {
278
- if (!this.managers)
279
- throw new Error(`No managers.`);
280
- this.loggers.debug("Creating new object from manager " + this.className);
281
99
  return new Promise((resolve, reject) => {
282
- this.socket.emit(EVENT_NEW + this.className, data, async (res) => {
283
- if (!res.success) {
284
- this.loggers.error("Error creating new object creation in manager " + this.className + " - " + res.message);
285
- reject(new Error(res.message));
286
- return;
100
+ // console.log("handleGetMissingObject socket check", typeof this.socket?.emit);
101
+ if (!this.socket || typeof this.socket.emit !== 'function') {
102
+ return reject(new Error("this.socket.emit is not a function"));
103
+ }
104
+ this.socket.emit("get" + this.className + _id, null, async (res) => {
105
+ if (res.success && res.data) {
106
+ const dataRec = res.data;
107
+ const objId = dataRec._id || (Array.isArray(dataRec.ids) && dataRec.ids.length > 0 ? dataRec.ids[0] : undefined) || _id;
108
+ const obj = new this.classParam(this.classParam, this.socket, res.data, this.loggers, this.className, this, this.callbacks, this.emitter);
109
+ this.objects_[objId] = obj;
110
+ globalCache.objects[objId] = {
111
+ className: this.className,
112
+ object: obj,
113
+ };
114
+ await obj.waitForPreloaded?.();
115
+ resolve(obj);
116
+ }
117
+ else {
118
+ reject(new Error(res.message || "Non existent or not accesable."));
287
119
  }
288
- const id = res.data._id;
289
- const object = new this.classParam(this.classParam, this.socket, res.data, this.loggers, this.className, this, this.callbacks, this.emitter);
290
- this.objects_[id] = object;
291
- globalCache.objects[id] = { className: this.className, object };
292
- await object.waitForPreloaded();
293
- await object.isPreLoadedAsync();
294
- await object.contactChildren();
295
- await object.loadMissingReferences();
296
- this.callbacks.new(object);
297
- resolve(object);
298
120
  });
299
121
  });
300
122
  }
123
+ async createObject(data) {
124
+ try {
125
+ const obj = new this.classParam(this.classParam, this.socket, data, this.loggers, this.className, this, this.callbacks, this.emitter);
126
+ await obj.waitForPreloaded?.();
127
+ const id = obj._id?.toString() || obj.id;
128
+ if (id) {
129
+ this.objects_[id] = obj;
130
+ globalCache.objects[id] = { className: this.className, object: obj };
131
+ }
132
+ await this.callbacks.new(obj);
133
+ return obj;
134
+ }
135
+ catch (error) {
136
+ this.loggers?.error?.("Error creating object: " + error.message);
137
+ throw error;
138
+ }
139
+ }
140
+ startSocketListeners() {
141
+ if (!this.socket || typeof this.socket.on !== 'function')
142
+ return;
143
+ this.socket.on(EVENT_NEW + this.className, async (data) => {
144
+ const id = typeof data === 'string' ? data : data._id?.toString();
145
+ if (!id)
146
+ return;
147
+ if (this.objects_[id])
148
+ return;
149
+ const objData = typeof data === 'string' ? { _id: id } : data;
150
+ const obj = new this.classParam(this.classParam, this.socket, objData, this.loggers, this.className, this, this.callbacks, this.emitter);
151
+ this.objects_[id] = obj;
152
+ globalCache.objects[id] = { className: this.className, object: obj };
153
+ await obj.waitForPreloaded?.();
154
+ await this.callbacks.new(obj);
155
+ });
156
+ this.socket.on(EVENT_DELETE + this.className, async (idStr) => {
157
+ await this.deleteObject(idStr);
158
+ });
159
+ }
160
+ async deleteObject(_id) {
161
+ const idStr = _id.toString();
162
+ const obj = this.objects_[idStr];
163
+ if (obj) {
164
+ let res = { success: true, message: "Deleted" };
165
+ if (typeof obj.destroy === 'function') {
166
+ res = await obj.destroy(true);
167
+ }
168
+ if (res.success) {
169
+ delete this.objects_[idStr];
170
+ delete globalCache.objects[idStr];
171
+ await this.callbacks.delete(obj);
172
+ }
173
+ return res;
174
+ }
175
+ return { success: true, message: "Already gone" };
176
+ }
177
+ async loadFromServer() {
178
+ this.loggers?.error?.("loadFromServer property mismatch");
179
+ throw new Error("Property mismatch or not implemented");
180
+ }
301
181
  }
302
182
  //# sourceMappingURL=AutoUpdateClientManagerClass.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoUpdateClientManagerClass.js","sourceRoot":"","sources":["../AutoUpdateClientManagerClass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AutoUpdateClientManagerClass.js","sourceRoot":"","sources":["../AutoUpdateClientManagerClass.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,36 @@
1
1
  import { AutoUpdatedClientObject } from "./AutoUpdatedClientObjectClass.js";
2
- import { Constructor, EventEmitter3, LoggersType, Cache, IsData } from "./CommonTypes.js";
2
+ import { Constructor, EventEmitter3, LoggersType, Cache, IsData, MongoId, IDEMSocket } from "./CommonTypes.js";
3
3
  import "reflect-metadata";
4
- export declare abstract class AutoUpdateManager<T extends AutoUpdatedClientObject<T>> {
5
- protected abstract objects_: {
6
- [_id: string]: T;
7
- };
4
+ export declare abstract class AutoUpdateManager<T extends AutoUpdatedClientObject<T, any>, M = any> {
5
+ protected abstract objects_: Record<string, T>;
8
6
  protected isLoaded_: boolean;
9
- readonly socket: any;
7
+ readonly socket: IDEMSocket;
10
8
  protected classParam: Constructor<T>;
11
9
  protected properties: string[];
12
10
  readonly className: string;
13
11
  readonly cache: Cache<T>;
14
- readonly managers: Record<string, AutoUpdateManager<any>>;
12
+ readonly managers: M;
15
13
  protected preloaded: boolean;
16
- protected waitingToResolveReferences: {
17
- [_id: string]: string;
18
- };
14
+ protected waitingToResolveReferences: Record<string, string>;
19
15
  protected loggers: LoggersType;
20
16
  protected emitter: EventEmitter3;
21
- constructor(classParam: Constructor<T>, className: string, socket: any, loggers: LoggersType, managers: Record<string, AutoUpdateManager<any>>, emitter: EventEmitter3);
17
+ constructor(classParam: Constructor<T>, className: string, socket: IDEMSocket, loggers: LoggersType, managers: M, emitter: EventEmitter3);
22
18
  get isLoaded(): boolean;
23
19
  close(): void;
24
20
  loadReferences(): Promise<void>;
25
- deleteObject(_id: string): Promise<{
21
+ deleteObject(_id: MongoId): Promise<{
26
22
  success: boolean;
27
23
  message: string;
28
24
  }>;
29
25
  get objectIDs(): string[];
30
26
  abstract handleGetMissingObject(_id: string): Promise<T>;
31
- abstract createObject(data: IsData<T>): Promise<T>;
32
- abstract getObject(_id: string): T | null;
33
- abstract get objects(): {
34
- [_id: string]: T;
35
- };
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>;
36
35
  abstract get objectsAsArray(): T[];
37
36
  }