@prestizni-software/server-dem 0.5.15 → 0.5.16
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/dist/AutoUpdateManagerClass.d.ts +12 -11
- package/dist/AutoUpdateManagerClass.js +8 -13
- package/dist/AutoUpdateManagerClass.js.map +1 -1
- package/dist/AutoUpdateServerManagerClass.d.ts +36 -28
- package/dist/AutoUpdateServerManagerClass.js +69 -131
- package/dist/AutoUpdateServerManagerClass.js.map +1 -1
- package/dist/AutoUpdatedClientObjectClass.d.ts +32 -30
- package/dist/AutoUpdatedClientObjectClass.js +41 -38
- package/dist/AutoUpdatedClientObjectClass.js.map +1 -1
- package/dist/AutoUpdatedServerObjectClass.d.ts +17 -11
- package/dist/AutoUpdatedServerObjectClass.js +98 -101
- package/dist/AutoUpdatedServerObjectClass.js.map +1 -1
- package/dist/CommonTypes.d.ts +32 -77
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CommonTypes_server.d.ts +3 -3
- package/dist/server.d.ts +6 -5
- package/dist/server.js +6 -5
- package/dist/server.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
import { AutoUpdatedClientObject, getMetadataRecursive
|
|
2
|
-
import
|
|
1
|
+
import { AutoUpdatedClientObject, getMetadataRecursive } from "./AutoUpdatedClientObjectClass";
|
|
2
|
+
import "reflect-metadata";
|
|
3
3
|
import { ObjectId } from "mongodb";
|
|
4
|
+
import { EVENT_DELETE, EVENT_UPDATE, } from "./CommonTypes";
|
|
5
|
+
export async function createAutoUpdatedClass(classParam, className, socket, data, loggers, parentManager, emitter, document) {
|
|
6
|
+
const instance = new classParam(classParam, socket, data, loggers, className, parentManager, emitter);
|
|
7
|
+
if (document) {
|
|
8
|
+
await instance.loadFromDocument(document);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
await instance.loadFromDB();
|
|
12
|
+
}
|
|
13
|
+
return instance;
|
|
14
|
+
}
|
|
4
15
|
export class AutoUpdatedServerObject extends AutoUpdatedClientObject {
|
|
5
|
-
isServer;
|
|
16
|
+
isServer = true;
|
|
6
17
|
entry;
|
|
7
18
|
constructor(classParam, socket, data, loggers, className, parentManager, emitter) {
|
|
8
19
|
if (!classParam ||
|
|
@@ -12,10 +23,6 @@ export class AutoUpdatedServerObject extends AutoUpdatedClientObject {
|
|
|
12
23
|
!className ||
|
|
13
24
|
!parentManager ||
|
|
14
25
|
!emitter) {
|
|
15
|
-
super();
|
|
16
|
-
this.isServer = true;
|
|
17
|
-
this.entry = null;
|
|
18
|
-
this.parentManager = parentManager;
|
|
19
26
|
if (!classParam &&
|
|
20
27
|
!socket &&
|
|
21
28
|
!data &&
|
|
@@ -23,139 +30,129 @@ export class AutoUpdatedServerObject extends AutoUpdatedClientObject {
|
|
|
23
30
|
!className &&
|
|
24
31
|
!parentManager &&
|
|
25
32
|
!emitter) {
|
|
33
|
+
super();
|
|
34
|
+
this.entry = undefined;
|
|
26
35
|
return;
|
|
27
36
|
}
|
|
28
37
|
else
|
|
29
|
-
throw new Error("Missing arguments
|
|
38
|
+
throw new Error("Missing arguments???");
|
|
30
39
|
}
|
|
31
40
|
super(classParam, socket, data, loggers, className, parentManager, {
|
|
32
|
-
update: (
|
|
33
|
-
delete: (
|
|
34
|
-
new: (
|
|
35
|
-
progress: (
|
|
41
|
+
update: (x) => { },
|
|
42
|
+
delete: (x) => { },
|
|
43
|
+
new: (x) => { },
|
|
44
|
+
progress: (x) => { },
|
|
36
45
|
}, emitter, true);
|
|
37
|
-
this.isServer = true;
|
|
38
|
-
this.entry = null;
|
|
39
|
-
this.parentManager = parentManager;
|
|
40
|
-
// Convert reference IDs to ObjectIds on the server side
|
|
41
|
-
const dataRec = this.data;
|
|
42
46
|
for (const prop of this.properties) {
|
|
43
47
|
if (typeof prop !== "string")
|
|
44
48
|
continue;
|
|
45
49
|
const isRef = getMetadataRecursive("isRef", this, prop);
|
|
46
|
-
if (isRef &&
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return null;
|
|
53
|
-
const idStr = item._id ? item._id.toString() : item.toString();
|
|
54
|
-
return ObjectId.isValid(idStr) ? new ObjectId(idStr) : item;
|
|
55
|
-
})
|
|
56
|
-
.filter((item) => item !== null);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
const idStr = dataRec[prop]._id ? dataRec[prop]._id.toString() : dataRec[prop].toString();
|
|
60
|
-
if (ObjectId.isValid(idStr)) {
|
|
61
|
-
dataRec[prop] = new ObjectId(idStr);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
this.loggers.error(`Failed to set reference ${prop} to ${dataRec[prop]}: ${error.message}`);
|
|
67
|
-
}
|
|
50
|
+
if (isRef && this.data[prop]) {
|
|
51
|
+
this.data[prop] = Array.isArray(this.data[prop])
|
|
52
|
+
? this.data[prop]
|
|
53
|
+
.map((item) => item ? new ObjectId(item.toString()) : null)
|
|
54
|
+
.filter(Boolean)
|
|
55
|
+
: new ObjectId(this.data[prop].toString());
|
|
68
56
|
}
|
|
69
57
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const _id = this.data._id;
|
|
73
|
-
if (!_id)
|
|
74
|
-
throw new Error("No id.");
|
|
75
|
-
// Use the model from the parent manager
|
|
76
|
-
this.entry = await this.parentManager.model.findById(_id);
|
|
77
|
-
if (!this.entry)
|
|
78
|
-
throw new Error(`Object not found in DB: ${this.className} with ID ${_id}`);
|
|
79
|
-
this.data = { ...this.data, ...this.entry.toObject() };
|
|
80
|
-
this.isLoading = false;
|
|
81
|
-
this.generateSettersAndGetters();
|
|
82
|
-
this.emitter.emit(EVENT_INTERNAL_PRE_LOADED + this.EmitterID);
|
|
83
|
-
await this.onUpdate();
|
|
58
|
+
this.parentManager = parentManager;
|
|
59
|
+
this.entry = null;
|
|
84
60
|
}
|
|
85
61
|
async loadFromDocument(document) {
|
|
86
62
|
this.entry = document;
|
|
87
63
|
this.data = { ...this.data, ...this.entry.toObject() };
|
|
88
|
-
this.
|
|
64
|
+
if (!this.data._id && this.entry._id) {
|
|
65
|
+
this.data._id = this.entry._id;
|
|
66
|
+
}
|
|
89
67
|
this.generateSettersAndGetters();
|
|
90
|
-
this.emitter.emit(EVENT_INTERNAL_PRE_LOADED + this.EmitterID);
|
|
91
68
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
69
|
+
async loadFromDB() {
|
|
70
|
+
try {
|
|
71
|
+
const manager = this.parentManager.managers[this.className];
|
|
72
|
+
this.entry = (await manager.model.findOne({
|
|
73
|
+
_id: this.data._id,
|
|
74
|
+
}));
|
|
75
|
+
if (!this.entry) {
|
|
76
|
+
this.entry = (await manager.model.create(this.data));
|
|
77
|
+
}
|
|
78
|
+
this.data = { ...this.data, ...this.entry.toObject() };
|
|
79
|
+
if (!this.data._id && this.entry._id) {
|
|
80
|
+
this.data._id = this.entry._id;
|
|
81
|
+
}
|
|
82
|
+
this.generateSettersAndGetters();
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
this.loggers.error("Error loading object from database: " + error.message);
|
|
86
|
+
this.loggers.error(error.stack);
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async setValue_(key, val) {
|
|
91
|
+
return await this.setValue__(key, val);
|
|
92
|
+
}
|
|
93
|
+
handleNewObject(_data) {
|
|
94
|
+
throw new Error("Cannot create new objects like this.");
|
|
96
95
|
}
|
|
97
|
-
async setValueInternal(key, value,
|
|
96
|
+
async setValueInternal(key, value, _silent = false) {
|
|
98
97
|
try {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
throw new Error(`Cannot update object ${this.className} - missing _id.`);
|
|
102
|
-
this.entry ??= await this.parentManager.model.findById(_id);
|
|
103
|
-
if (!this.entry)
|
|
104
|
-
throw new Error("Object not found in DB.");
|
|
105
|
-
if (!silent && !noUpdate) {
|
|
106
|
-
this.entry[key] = value;
|
|
107
|
-
await this.entry.save();
|
|
98
|
+
if (!this.data?._id) {
|
|
99
|
+
throw new Error(`Cannot update object ${this.className} - missing _id. Data: ${JSON.stringify(this.data)}`);
|
|
108
100
|
}
|
|
101
|
+
const manager = this.parentManager.managers[this.className];
|
|
102
|
+
await manager.model.updateOne({ _id: this.data._id }, { $set: { [key]: value } });
|
|
109
103
|
const update = this.makeUpdate(key, value);
|
|
110
|
-
const event = EVENT_UPDATE + this.className + _id.toString();
|
|
104
|
+
const event = EVENT_UPDATE + this.className + this.data._id.toString();
|
|
111
105
|
this.socket.emit(event, update);
|
|
112
|
-
return {
|
|
106
|
+
return {
|
|
107
|
+
success: true,
|
|
108
|
+
msg: "Updated",
|
|
109
|
+
};
|
|
113
110
|
}
|
|
114
111
|
catch (error) {
|
|
115
|
-
this.loggers.error
|
|
116
|
-
|
|
112
|
+
this.loggers.error(`Error saving object [${this.className}: ${this.data?._id ?? "not loaded"}]: ` + error.message);
|
|
113
|
+
this.loggers.error(error.stack);
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
msg: "Error saving object: " + error.message,
|
|
117
|
+
};
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
async destroy(once = false) {
|
|
120
|
-
const _id = this.data._id;
|
|
121
|
-
if (!_id)
|
|
122
|
-
return { success: false, message: "Missing _id" };
|
|
123
121
|
if (!once) {
|
|
124
|
-
return await this.parentManager.deleteObject(_id);
|
|
122
|
+
return await this.parentManager.deleteObject(this.data._id);
|
|
125
123
|
}
|
|
126
124
|
try {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
this.loggers.debug?.("Deleted object from server " + this.className);
|
|
125
|
+
const res = await this.entry.deleteOne({ _id: this.data._id });
|
|
126
|
+
this.loggers.debug("Deleted object from server " + this.className);
|
|
127
|
+
this.loggers.debug(res.deletedCount + " deleted.");
|
|
132
128
|
}
|
|
133
129
|
catch (error) {
|
|
134
|
-
this.loggers.error
|
|
135
|
-
|
|
130
|
+
this.loggers.error("Error deleting object from database - " +
|
|
131
|
+
this.className +
|
|
132
|
+
" - " +
|
|
133
|
+
this.data._id);
|
|
134
|
+
this.loggers.error(error.message);
|
|
135
|
+
this.loggers.error(error.stack);
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
message: "Deletion uncussessful: " + error.message,
|
|
139
|
+
};
|
|
136
140
|
}
|
|
137
|
-
this.socket.emit(EVENT_DELETE + this.className, _id
|
|
141
|
+
this.socket.emit(EVENT_DELETE + this.className, this.data._id);
|
|
142
|
+
this.socket.removeAllListeners(EVENT_UPDATE + this.className + this.data._id.toString());
|
|
143
|
+
this.socket.removeAllListeners(EVENT_DELETE + this.className);
|
|
138
144
|
await this.wipeSelf();
|
|
139
|
-
return {
|
|
145
|
+
return {
|
|
146
|
+
success: true,
|
|
147
|
+
message: "Deleted",
|
|
148
|
+
};
|
|
140
149
|
}
|
|
141
150
|
async onUpdate(noUpdate = false) {
|
|
142
151
|
if (noUpdate)
|
|
143
152
|
return;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
export async function createAutoUpdatedClass(classParam, className, socket, data, loggers, parentManager, emitter, document) {
|
|
152
|
-
const obj = new classParam(classParam, socket, data, loggers, className, parentManager, emitter);
|
|
153
|
-
if (document) {
|
|
154
|
-
await obj.loadFromDocument(document);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
await obj.loadFromDB();
|
|
153
|
+
await this.parentManager.options?.onUpdate?.(this, (a, b) => {
|
|
154
|
+
return this.setValue__(a, b, false, true, true);
|
|
155
|
+
});
|
|
158
156
|
}
|
|
159
|
-
return obj;
|
|
160
157
|
}
|
|
161
158
|
//# sourceMappingURL=AutoUpdatedServerObjectClass.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoUpdatedServerObjectClass.js","sourceRoot":"","sources":["../AutoUpdatedServerObjectClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"AutoUpdatedServerObjectClass.js","sourceRoot":"","sources":["../AutoUpdatedServerObjectClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAA0B,MAAM,gCAAgC,CAAC;AAEvH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAKL,YAAY,EACZ,YAAY,GAGb,MAAM,eAAe,CAAC;AAIvB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAA0B,EAC1B,SAAiB,EACjB,MAAW,EACX,IAAe,EACf,OAAoB,EACpB,aAA2C,EAC3C,OAAsB,EACtB,QAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAK,UAAkB,CACtC,UAAU,EACV,MAAM,EACN,IAAI,EACJ,OAAO,EACP,SAAS,EACT,aAAa,EACb,OAAO,CACR,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,OAAgB,uBAA8D,SAAQ,uBAA0B;IACxF,QAAQ,GAAY,IAAI,CAAC;IAC3C,KAAK,CAAkB;IAajC,YACE,UAA2B,EAC3B,MAAY,EACZ,IAAgB,EAChB,OAAqB,EACrB,SAAkB,EAClB,aAA4C,EAC5C,OAAuB;QAEvB,IACE,CAAC,UAAU;YACX,CAAC,MAAM;YACP,CAAC,IAAI;YACL,CAAC,OAAO;YACR,CAAC,SAAS;YACV,CAAC,aAAa;YACd,CAAC,OAAO,EACR,CAAC;YACD,IACE,CAAC,UAAU;gBACX,CAAC,MAAM;gBACP,CAAC,IAAI;gBACL,CAAC,OAAO;gBACR,CAAC,SAAS;gBACV,CAAC,aAAa;gBACd,CAAC,OAAO,EACR,CAAC;gBACD,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,KAAK,GAAG,SAAgB,CAAC;gBAC9B,OAAO;YACT,CAAC;;gBAAM,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,CACH,UAAU,EACV,MAAM,EACN,IAAI,EACJ,OAAO,EACP,SAAS,EACT,aAAoB,EACpB;YACE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;YAClB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;YAClB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC;SACrB,EACD,OAAO,EACP,IAAI,CACL,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAsB,EAAE,CAAC;YAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACvC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACxD,IAAI,KAAK,IAAK,IAAI,CAAC,IAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAE,IAAI,CAAC,IAAY,CAAC,IAAI,CAAC,CAAC;oBAChE,CAAC,CAAE,IAAI,CAAC,IAAY,CAAC,IAAI,CAAC;yBACvB,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;yBAC/D,MAAM,CAAC,OAAO,CAAC;oBAClB,CAAC,CAAC,IAAI,QAAQ,CAAE,IAAI,CAAC,IAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,aAAoB,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAW,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,QAAyB;QACrD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,EAAE,GAAI,IAAI,CAAC,IAAY,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAS,CAAC;QACvE,IAAI,CAAE,IAAI,CAAC,IAAY,CAAC,GAAG,IAAK,IAAI,CAAC,KAAa,CAAC,GAAG,EAAE,CAAC;YACtD,IAAI,CAAC,IAAY,CAAC,GAAG,GAAI,IAAI,CAAC,KAAa,CAAC,GAAG,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAI,IAAI,CAAC,aAAa,CAAC,QAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBACxC,GAAG,EAAG,IAAI,CAAC,IAAY,CAAC,GAAG;aAC5B,CAAC,CAAoB,CAAC;YAEvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAoB,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,EAAE,GAAI,IAAI,CAAC,IAAY,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAS,CAAC;YACvE,IAAI,CAAE,IAAI,CAAC,IAAY,CAAC,GAAG,IAAK,IAAI,CAAC,KAAa,CAAC,GAAG,EAAE,CAAC;gBACtD,IAAI,CAAC,IAAY,CAAC,GAAG,GAAI,IAAI,CAAC,KAAa,CAAC,GAAG,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sCAAsC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,GAAM,EACN,GAA8B;QAE9B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAU,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAES,eAAe,CAAC,KAAU;QAClC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAEkB,KAAK,CAAC,gBAAgB,CACvC,GAAQ,EACR,KAAU,EACV,UAAmB,KAAK;QAExB,IAAI,CAAC;YACH,IAAI,CAAE,IAAI,CAAC,IAAY,EAAE,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9G,CAAC;YACD,MAAM,OAAO,GAAI,IAAI,CAAC,aAAa,CAAC,QAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAG,IAAI,CAAC,IAAY,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,SAAS;aACf,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,KAAM,IAAI,CAAC,IAAY,EAAE,GAAG,IAAI,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5H,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,uBAAuB,GAAG,KAAK,CAAC,OAAO;aAC7C,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAE,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAG,IAAI,CAAC,IAAY,CAAC,GAAG,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wCAAwC;gBACzD,IAAI,CAAC,SAAS;gBACd,KAAK;gBACJ,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yBAAyB,GAAG,KAAK,CAAC,OAAO;aACnD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,IAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK;QAC7C,IAAI,QAAQ;YAAE,OAAO;QACrB,MAAO,IAAI,CAAC,aAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;YAC7E,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/CommonTypes.d.ts
CHANGED
|
@@ -1,58 +1,15 @@
|
|
|
1
1
|
import { EventEmitter } from "eventemitter3";
|
|
2
2
|
import { ObjectId, ObjectIdLike } from "bson";
|
|
3
3
|
import "reflect-metadata";
|
|
4
|
-
|
|
4
|
+
import { AutoUpdatedClientObject } from "./AutoUpdatedClientObjectClass";
|
|
5
|
+
import { AutoUpdateManager } from "./AutoUpdateManagerClass";
|
|
6
|
+
type RefType = string | ObjectId;
|
|
7
|
+
export type MongoId = RefType;
|
|
5
8
|
export type EventEmitter3 = EventEmitter;
|
|
6
|
-
export interface IAutoUpdateManager<T extends IAutoUpdatedClientObjectBase> {
|
|
7
|
-
readonly className: string;
|
|
8
|
-
readonly cache: DEMCache;
|
|
9
|
-
readonly managers: Record<string, IAutoUpdateManager<IAutoUpdatedClientObjectBase>>;
|
|
10
|
-
getObject(_id?: MongoId): T | null | undefined;
|
|
11
|
-
deleteObject(_id: MongoId): Promise<{
|
|
12
|
-
success: boolean;
|
|
13
|
-
message: string;
|
|
14
|
-
}>;
|
|
15
|
-
readonly objectsAsArray: T[];
|
|
16
|
-
readonly isLoaded: boolean;
|
|
17
|
-
}
|
|
18
|
-
export interface IAutoUpdatedClientObjectBase {
|
|
19
|
-
readonly _id: MongoId;
|
|
20
|
-
readonly properties: string[];
|
|
21
|
-
readonly className: string;
|
|
22
|
-
readonly isLoaded: boolean;
|
|
23
|
-
loadMissingReferences(): Promise<void>;
|
|
24
|
-
waitForPreloaded(): Promise<void>;
|
|
25
|
-
destroy(once?: boolean): Promise<{
|
|
26
|
-
success: boolean;
|
|
27
|
-
message: string;
|
|
28
|
-
}>;
|
|
29
|
-
isPreLoadedAsync(): Promise<boolean>;
|
|
30
|
-
contactChildren(): Promise<void>;
|
|
31
|
-
onUpdate(): Promise<void>;
|
|
32
|
-
getValue(key: string): any;
|
|
33
|
-
setValue(key: string, val: any): Promise<{
|
|
34
|
-
success: boolean;
|
|
35
|
-
msg: string;
|
|
36
|
-
}>;
|
|
37
|
-
readonly parentManager: IAutoUpdateManager<IAutoUpdatedClientObjectBase>;
|
|
38
|
-
readonly callbacks: any;
|
|
39
|
-
readonly classParam: any;
|
|
40
|
-
}
|
|
41
|
-
export interface IAutoUpdatedClientObject<T extends object = any> extends IAutoUpdatedClientObjectBase {
|
|
42
|
-
readonly extractedData: ExtractedData<T, IAutoUpdatedClientObject<any>>;
|
|
43
|
-
getValue<K extends Paths<T, IAutoUpdatedClientObject<any>>>(key: K): PathValueOf<T, K>;
|
|
44
|
-
setValue<K extends Paths<T, IAutoUpdatedClientObject<any>>>(key: K, val: PathValueOf<IsData<T>, K>): Promise<{
|
|
45
|
-
success: boolean;
|
|
46
|
-
msg: string;
|
|
47
|
-
}>;
|
|
48
|
-
}
|
|
49
|
-
export interface IAutoUpdatedServerObject<T extends object = any> extends IAutoUpdatedClientObject<T> {
|
|
50
|
-
loadFromDB(): Promise<void>;
|
|
51
|
-
loadFromDocument(document: unknown): Promise<void>;
|
|
52
|
-
}
|
|
53
9
|
export type AutoProps<T> = {
|
|
54
10
|
readonly [K in keyof T]: T[K];
|
|
55
11
|
};
|
|
12
|
+
export type InstanceOf<T> = T extends Constructor<infer I> ? I : T;
|
|
56
13
|
export type Constructor<T> = new (...args: any[]) => T;
|
|
57
14
|
export type UnboxConstructor<T> = T extends new (...args: any[]) => infer I ? I : T;
|
|
58
15
|
export type LoggersType = {
|
|
@@ -61,29 +18,26 @@ export type LoggersType = {
|
|
|
61
18
|
error: (s: string) => void;
|
|
62
19
|
warn: (s: string) => void;
|
|
63
20
|
};
|
|
64
|
-
type
|
|
21
|
+
type IsAUCO<T> = T extends {
|
|
65
22
|
className: string;
|
|
66
|
-
_id: any;
|
|
67
23
|
} ? true : false;
|
|
68
|
-
type AllowStringForRefs<V> = NonNullable<V> extends Array<infer U> ?
|
|
69
|
-
type OnlyStringForRefs<V> = V extends
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
24
|
+
type AllowStringForRefs<V> = NonNullable<V> extends Array<infer U> ? IsAUCO<NonNullable<U>> extends true ? (U | string | ObjectIdLike)[] : V : IsAUCO<NonNullable<V>> extends true ? V | string | ObjectIdLike : V;
|
|
25
|
+
type OnlyStringForRefs<V> = NonNullable<V> extends Array<infer U> ? IsAUCO<NonNullable<U>> extends true ? string[] : V : IsAUCO<NonNullable<V>> extends true ? string : V;
|
|
26
|
+
export type Cache<T> = {
|
|
27
|
+
references: {
|
|
28
|
+
[K in keyof T]?: AutoUpdateManager<AutoUpdatedClientObject<any>>;
|
|
29
|
+
};
|
|
74
30
|
};
|
|
75
|
-
export type
|
|
76
|
-
|
|
77
|
-
[K in keyof Pure<T> as T[K] extends Function ? never : K]: AllowStringForRefs<T[K]>;
|
|
31
|
+
export type IsData<T> = {
|
|
32
|
+
[K in keyof T]: AllowStringForRefs<T[K]>;
|
|
78
33
|
} & {
|
|
79
|
-
_id:
|
|
34
|
+
_id: any;
|
|
80
35
|
};
|
|
81
|
-
export type ExtractedData<T
|
|
82
|
-
[K in keyof
|
|
83
|
-
} & {
|
|
84
|
-
_id: string;
|
|
36
|
+
export type ExtractedData<T, Base = AutoUpdatedClientObject<T>> = {
|
|
37
|
+
[K in keyof FixPure<T, Base>]: OnlyStringForRefs<T[K]>;
|
|
85
38
|
};
|
|
86
|
-
|
|
39
|
+
type FixPure<T, Base> = Omit<T, keyof Omit<Base, "_id">>;
|
|
40
|
+
export type SocketEvent = [string, any, (res: ServerResponse<any>) => void];
|
|
87
41
|
export type ServerResponse<T> = {
|
|
88
42
|
data: T;
|
|
89
43
|
message?: string;
|
|
@@ -93,32 +47,33 @@ export type ServerResponse<T> = {
|
|
|
93
47
|
success: false;
|
|
94
48
|
};
|
|
95
49
|
export type ServerUpdateRequest<T> = {
|
|
96
|
-
_id:
|
|
50
|
+
_id: RefType;
|
|
97
51
|
key: string;
|
|
98
|
-
value:
|
|
52
|
+
value: any;
|
|
99
53
|
};
|
|
100
|
-
export declare function classProp(target:
|
|
101
|
-
export declare function populatedRef(where: string): (target:
|
|
102
|
-
export declare function classRef(): (target:
|
|
54
|
+
export declare function classProp(target: any, propertyKey: string): void;
|
|
55
|
+
export declare function populatedRef(where: string): (target: any, propertyKey: string) => void;
|
|
56
|
+
export declare function classRef(): (target: any, propertyKey: string) => void;
|
|
103
57
|
export type Pretty<T> = {
|
|
104
58
|
[K in keyof T]: T[K];
|
|
105
59
|
};
|
|
106
60
|
export type StripPrototypePrefix<P extends string> = P extends "prototype" ? never : P extends `prototype.${infer Rest}` ? Rest : P;
|
|
107
|
-
export type Recurseable<T> = T extends object ? T extends Array<
|
|
61
|
+
export type Recurseable<T> = T extends object ? T extends Array<any> | Function ? never : T : never;
|
|
108
62
|
export type OnlyClassKeys<T> = {
|
|
109
63
|
[K in keyof T]: K;
|
|
110
64
|
}[keyof T] & string;
|
|
111
65
|
export type Split<S extends string> = S extends `${infer L}.${infer R}` ? [L, ...Split<R>] : [S];
|
|
112
66
|
export type NonOptional<T> = Exclude<T, null | undefined>;
|
|
113
|
-
export type DeAutoUpdate<T> = T extends
|
|
114
|
-
export type RecursiveDeAutoUpdate<T extends
|
|
67
|
+
export type DeAutoUpdate<T> = T extends AutoUpdatedClientObject<infer U> ? U : T;
|
|
68
|
+
export type RecursiveDeAutoUpdate<T extends AutoUpdatedClientObject<any>> = T extends AutoUpdatedClientObject<infer U> ? U extends object ? DeAutoUpdate<U> : U : T;
|
|
115
69
|
export type OnlyAddedKeys<Sub, Parent> = Pick<Sub, Exclude<keyof Sub, keyof Omit<Parent, "_id">>>;
|
|
116
70
|
export type Prev = [never, 0, 1, 2, 3];
|
|
117
71
|
export type Join<K, P> = K extends string | number ? P extends string | number ? `${K}${"" extends P ? "" : "."}${P}` : never : never;
|
|
118
|
-
export type Paths<T, Base, D extends number = 3> =
|
|
119
|
-
[K in keyof OnlyAddedKeys<NonNullable<T>, Base> & string]-?: NonNullable<NonNullable<T>[K]> extends Function ? never : NonNullable<NonNullable<T>[K]> extends Array<
|
|
72
|
+
export type Paths<T, Base, D extends number = 3> = [D] extends [never] ? never : NonNullable<T> extends object ? {
|
|
73
|
+
[K in keyof OnlyAddedKeys<NonNullable<T>, Base> & string]-?: NonNullable<NonNullable<T>[K]> extends Function ? never : NonNullable<NonNullable<T>[K]> extends Array<any> | Date | ObjectId ? K : NonNullable<NonNullable<T>[K]> extends object ? K | Join<K, Paths<NonNullable<NonNullable<T>[K]>, Base, Prev[D]>> : K;
|
|
120
74
|
}[keyof OnlyAddedKeys<NonNullable<T>, Base> & string] : never;
|
|
121
|
-
export type PathValueOf<T, P extends string> =
|
|
75
|
+
export type PathValueOf<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends keyof NonNullable<T> ? PathValueOf<NonNullable<NonNullable<T>[K]>, Rest> : never : P extends keyof NonNullable<T> ? NonNullable<T>[P] : never;
|
|
76
|
+
export type Pure<T, Base = AutoUpdatedClientObject<T>> = FixPure<T, Base>;
|
|
122
77
|
export declare const EVENT_INTERNAL_PRE_LOADED = "pre-loaded";
|
|
123
78
|
export declare const EVENT_UPDATE = "update";
|
|
124
79
|
export declare const EVENT_DELETE = "delete";
|
|
@@ -128,7 +83,7 @@ export declare const EVENT_STARTUP = "startup";
|
|
|
128
83
|
export type GlobalCache = {
|
|
129
84
|
objects: Record<string, {
|
|
130
85
|
className: string;
|
|
131
|
-
object:
|
|
86
|
+
object: AutoUpdatedClientObject<any>;
|
|
132
87
|
}>;
|
|
133
88
|
};
|
|
134
89
|
export declare const globalCache: GlobalCache;
|
package/dist/CommonTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommonTypes.js","sourceRoot":"","sources":["../CommonTypes.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"CommonTypes.js","sourceRoot":"","sources":["../CommonTypes.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AAoE1B,MAAM,UAAU,SAAS,CAAC,MAAW,EAAE,WAAmB;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC;IACzC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACtC,OAAO,UAAU,MAAW,EAAE,WAAmB;QAC7C,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,QAAQ;IACpB,OAAO,UAAU,MAAW,EAAE,WAAmB;QAC7C,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC;AACN,CAAC;AAoCD,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AASvC,MAAM,CAAC,MAAM,WAAW,GAAgB;IACpC,OAAO,EAAE,EAAE;CACd,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Join, OnlyAddedKeys, Prev } from "./CommonTypes
|
|
1
|
+
import { Join, OnlyAddedKeys, Prev } from "./CommonTypes";
|
|
2
2
|
import { ObjectId, Types } from "mongoose";
|
|
3
3
|
export type NonOptional<T> = Exclude<T, null | undefined>;
|
|
4
4
|
export type Paths<T, Base, D extends number = 3> = [D] extends [never] ? never : NonNullable<T> extends object ? {
|
|
5
|
-
[K in keyof OnlyAddedKeys<NonNullable<T>, Base> & string]-?: NonNullable<NonNullable<T>[K]> extends Function ? never : NonNullable<NonNullable<T>[K]> extends Array<
|
|
5
|
+
[K in keyof OnlyAddedKeys<NonNullable<T>, Base> & string]-?: NonNullable<NonNullable<T>[K]> extends Function ? never : NonNullable<NonNullable<T>[K]> extends Array<any> | Date | ObjectId | Types.ObjectId ? K : NonNullable<NonNullable<T>[K]> extends object ? K | Join<K, Paths<NonNullable<NonNullable<T>[K]>, Base, Prev[D]>> : K;
|
|
6
6
|
}[keyof OnlyAddedKeys<NonNullable<T>, Base> & string] : never;
|
|
7
|
-
type SafeGet<T, K extends string> = T extends
|
|
7
|
+
type SafeGet<T, K extends string> = T extends any ? K extends keyof NonNullable<T> ? NonNullable<T>[K] : never : never;
|
|
8
8
|
export type PathValueOf<T, P extends string> = P extends `${infer K}.${infer Rest}` ? PathValueOf<SafeGet<T, K>, Rest> : SafeGet<T, P>;
|
|
9
9
|
export {};
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import * as AutoUpdateServerManagerClass from "./AutoUpdateServerManagerClass";
|
|
2
|
+
import * as AutoUpdateManagerClass from "./AutoUpdateManagerClass";
|
|
3
|
+
import * as AutoUpdatedClientObjectClass from "./AutoUpdatedClientObjectClass";
|
|
4
|
+
import * as AutoUpdatedServerObjectClass from "./AutoUpdatedServerObjectClass";
|
|
5
|
+
import * as CommonTypes from "./CommonTypes_server";
|
|
6
|
+
export { AutoUpdateServerManagerClass, AutoUpdateManagerClass, AutoUpdatedClientObjectClass, AutoUpdatedServerObjectClass, CommonTypes, };
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import * as AutoUpdateServerManagerClass from "./AutoUpdateServerManagerClass";
|
|
2
|
+
import * as AutoUpdateManagerClass from "./AutoUpdateManagerClass";
|
|
3
|
+
import * as AutoUpdatedClientObjectClass from "./AutoUpdatedClientObjectClass";
|
|
4
|
+
import * as AutoUpdatedServerObjectClass from "./AutoUpdatedServerObjectClass";
|
|
5
|
+
import * as CommonTypes from "./CommonTypes_server";
|
|
6
|
+
export { AutoUpdateServerManagerClass, AutoUpdateManagerClass, AutoUpdatedClientObjectClass, AutoUpdatedServerObjectClass, CommonTypes, };
|
|
6
7
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,4BAA4B,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,sBAAsB,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,4BAA4B,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,4BAA4B,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,EAC5B,4BAA4B,EAC5B,WAAW,GACZ,CAAC"}
|