@prestizni-software/server-dem 0.2.22 → 0.2.23

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.
@@ -0,0 +1,28 @@
1
+ import { AutoUpdated } from "./AutoUpdatedClientObjectClass.js";
2
+ import { Constructor, IsData, LoggersType, SocketType } from "./CommonTypes.js";
3
+ import "reflect-metadata";
4
+ export declare abstract class AutoUpdateManager<T extends Constructor<any>> {
5
+ protected classes: {
6
+ [_id: string]: AutoUpdated<T>;
7
+ };
8
+ socket: SocketType;
9
+ protected classParam: T;
10
+ protected properties: (keyof T)[];
11
+ readonly classers: Record<string, AutoUpdateManager<any>>;
12
+ protected loggers: LoggersType;
13
+ protected classesAsArray: AutoUpdated<T>[];
14
+ protected emitter: EventTarget;
15
+ private isLoaded;
16
+ constructor(classParam: T, socket: SocketType, loggers: LoggersType, classers: Record<string, AutoUpdateManager<any>>, emitter: EventTarget);
17
+ getObject(_id: string): AutoUpdated<T> | null;
18
+ isLoadedAsync(): Promise<boolean>;
19
+ deleteObject(_id: string): Promise<void>;
20
+ get objectIDs(): string[];
21
+ get objects(): {
22
+ [_id: string]: AutoUpdated<T> | string;
23
+ };
24
+ get objectsAsArray(): AutoUpdated<T>[];
25
+ get className(): string;
26
+ protected abstract handleGetMissingObject(_id: string): Promise<AutoUpdated<T>>;
27
+ abstract createObject(data: IsData<InstanceType<T>>): Promise<AutoUpdated<T>>;
28
+ }
@@ -0,0 +1,56 @@
1
+ import "reflect-metadata";
2
+ export class AutoUpdateManager {
3
+ classes = {};
4
+ socket;
5
+ classParam;
6
+ properties;
7
+ classers;
8
+ loggers = {
9
+ info: () => { },
10
+ debug: () => { },
11
+ error: () => { },
12
+ warn: () => { },
13
+ };
14
+ classesAsArray = [];
15
+ emitter;
16
+ isLoaded = false;
17
+ constructor(classParam, socket, loggers, classers, emitter) {
18
+ this.emitter = emitter;
19
+ this.classers = classers;
20
+ this.socket = socket;
21
+ this.classParam = classParam;
22
+ this.properties = Reflect.getMetadata("props", Object.getPrototypeOf(classParam));
23
+ loggers.warn = loggers.warn ?? loggers.info;
24
+ this.loggers = loggers;
25
+ }
26
+ getObject(_id) {
27
+ return this.classes[_id];
28
+ }
29
+ async isLoadedAsync() {
30
+ if (this.isLoaded)
31
+ return this.isLoaded;
32
+ await new Promise((resolve) => this.emitter.addEventListener("ManagerLoaded" + this.classParam.name + this.className, resolve));
33
+ this.isLoaded = true;
34
+ return this.isLoaded;
35
+ }
36
+ async deleteObject(_id) {
37
+ if (typeof this.classes[_id] === "string")
38
+ this.classes[_id] = await this.handleGetMissingObject(this.classes[_id]);
39
+ (this.classes[_id]).destroy();
40
+ this.classesAsArray.splice(this.classesAsArray.indexOf(this.classes[_id]), 1);
41
+ delete this.classes[_id];
42
+ }
43
+ get objectIDs() {
44
+ return Object.keys(this.classes);
45
+ }
46
+ get objects() {
47
+ return this.classes;
48
+ }
49
+ get objectsAsArray() {
50
+ return this.classesAsArray;
51
+ }
52
+ get className() {
53
+ return this.classParam.name;
54
+ }
55
+ }
56
+ //# sourceMappingURL=AutoUpdateManagerClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoUpdateManagerClass.js","sourceRoot":"","sources":["../AutoUpdateManagerClass.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,CAAC;AAE1B,MAAM,OAAgB,iBAAiB;IAC3B,OAAO,GAAsC,EAAE,CAAC;IACnD,MAAM,CAAa;IAChB,UAAU,CAAI;IACd,UAAU,CAAc;IAClB,QAAQ,CAAyC;IACvD,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,cAAc,GAAqB,EAAE,CAAC;IACtC,OAAO,CAAc;IACvB,QAAQ,GAAG,KAAK,CAAC;IACzB,YACE,UAAa,EACb,MAAkB,EAClB,OAAoB,EACpB,QAAgD,EAChD,OAAoB;QAEpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CACnC,OAAO,EACP,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAClC,CAAC;QACF,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAGM,SAAS,CACd,GAAW;QAEX,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACxC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5H,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAW;QACnC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ;YACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3E,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;CAQF"}
@@ -0,0 +1,55 @@
1
+ import { Server, Socket } from "socket.io";
2
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
3
+ import { Constructor, IsData, LoggersType, Paths, PathValueOf } from "./CommonTypes.js";
4
+ import { BeAnObject, ReturnModelType } from "@typegoose/typegoose/lib/types.js";
5
+ export type WrappedInstances<T extends Record<string, Constructor<any>>> = {
6
+ [K in keyof T]: AutoUpdateServerManager<T[K]>;
7
+ };
8
+ type AccessDefinitions<C extends Constructor<any>> = {
9
+ [K in Paths<C>]?: {
10
+ access?: string[];
11
+ update?: boolean;
12
+ };
13
+ };
14
+ export type AutoStatusDefinitions<C extends Constructor<any>, E extends Record<string, string | number>, S extends StatusDefinition<C>> = {
15
+ statusProperty: Paths<C>;
16
+ statusEnum: E;
17
+ definitions: {
18
+ [K in keyof E]: S;
19
+ };
20
+ };
21
+ type StatusDefinition<C extends Constructor<any>> = {
22
+ [K in Paths<C>]?: PathValueOf<C, K>;
23
+ };
24
+ export declare function createAutoStatusDefinitions<C extends Constructor<any>, E extends {
25
+ [k: string]: string | number;
26
+ }, S extends StatusDefinition<C>>(_class: C, _template: S, statusProperty: Paths<C>, statusEnum: E, definitions: {
27
+ [K in keyof E]: S;
28
+ }): AutoStatusDefinitions<C, E, S>;
29
+ export type AUSDefinitions<T extends Record<string, Constructor<any>>> = {
30
+ [K in keyof T]: ServerManagerDefinition<T[K]>;
31
+ };
32
+ export type AUSOption<C extends Constructor<any>> = {
33
+ accessDefinitions?: Partial<AccessDefinitions<C>>;
34
+ autoStatusDefinitions?: AutoStatusDefinitions<C, {
35
+ [k: string]: string | number;
36
+ }, StatusDefinition<C>>;
37
+ };
38
+ type ServerManagerDefinition<C extends Constructor<any>> = {
39
+ class: C;
40
+ options?: AUSOption<C>;
41
+ };
42
+ export declare function AUSManagerFactory<T extends Record<string, Constructor<any>>>(defs: AUSDefinitions<T>, loggers: LoggersType, socket: Server, emitter: EventTarget): Promise<{
43
+ [K in keyof T]: AutoUpdateServerManager<T[K]>;
44
+ }>;
45
+ export declare class AutoUpdateServerManager<T extends Constructor<any>> extends AutoUpdateManager<T> {
46
+ readonly model: ReturnModelType<T, BeAnObject>;
47
+ private readonly clientSockets;
48
+ readonly options?: AUSOption<T>;
49
+ constructor(classParam: T, loggers: LoggersType, socket: Server, model: ReturnModelType<T, BeAnObject>, classers: Record<string, AutoUpdateManager<any>>, emitter: EventTarget, options?: AUSOption<T>);
50
+ loadDB(): Promise<void>;
51
+ registerSocket(socket: Socket): void;
52
+ protected handleGetMissingObject(_id: string): Promise<import("./CommonTypes.js").AutoProps<T> & import("./AutoUpdatedServerObjectClass.js").AutoUpdatedServerObject<InstanceType<T>> & import("./CommonTypes.js").UnboxConstructor<InstanceType<T>> & import("./CommonTypes.js").DeRef<InstanceType<T>>>;
53
+ createObject(data: Omit<IsData<InstanceType<T>>, "_id">): Promise<import("./CommonTypes.js").AutoProps<T> & import("./AutoUpdatedServerObjectClass.js").AutoUpdatedServerObject<InstanceType<T>> & import("./CommonTypes.js").UnboxConstructor<InstanceType<T>> & import("./CommonTypes.js").DeRef<InstanceType<T>>>;
54
+ }
55
+ export {};
@@ -0,0 +1,126 @@
1
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
2
+ import { createAutoUpdatedClass, } from "./AutoUpdatedServerObjectClass.js";
3
+ import { getModelForClass } from "@typegoose/typegoose";
4
+ export function createAutoStatusDefinitions(_class, _template, statusProperty, statusEnum, definitions) {
5
+ return {
6
+ statusProperty,
7
+ statusEnum,
8
+ definitions,
9
+ };
10
+ }
11
+ export async function AUSManagerFactory(defs, loggers, socket, emitter) {
12
+ const classers = {};
13
+ let i = 0;
14
+ for (const key in defs) {
15
+ const def = defs[key];
16
+ const c = new AutoUpdateServerManager(def.class, loggers, socket, getModelForClass(def.class), classers, emitter, def.options);
17
+ i++;
18
+ classers[key] = c;
19
+ await c.loadDB();
20
+ }
21
+ return classers;
22
+ }
23
+ export class AutoUpdateServerManager extends AutoUpdateManager {
24
+ model;
25
+ clientSockets = new Set();
26
+ options;
27
+ constructor(classParam, loggers, socket, model, classers, emitter, options) {
28
+ super(classParam, socket, loggers, classers, emitter);
29
+ this.model = model;
30
+ this.options = options;
31
+ }
32
+ async loadDB() {
33
+ const docs = await this.model.find({});
34
+ for (const doc of docs) {
35
+ this.classes[doc._id] =
36
+ this.classes[doc._id] ??
37
+ (await this.handleGetMissingObject(doc._id.toString()));
38
+ }
39
+ }
40
+ registerSocket(socket) {
41
+ this.clientSockets.add(socket);
42
+ socket.on("startup" + this.className, async (ack) => {
43
+ const ids = [];
44
+ ack(this.objectIDs);
45
+ });
46
+ socket.on("delete" + this.className, async (id) => {
47
+ this.classes[id].destroy();
48
+ this.classesAsArray.splice(this.classesAsArray.indexOf(this.classes[id]), 1);
49
+ delete this.classes[id];
50
+ });
51
+ socket.on("new" + this.className, async (data, ack) => {
52
+ try {
53
+ const newDoc = await this.createObject(data);
54
+ ack({
55
+ data: newDoc.extractedData,
56
+ success: true,
57
+ message: "Created successfully",
58
+ });
59
+ }
60
+ catch (error) {
61
+ this.loggers.error(error);
62
+ ack({ success: false, message: error.message });
63
+ }
64
+ });
65
+ socket.onAny(async (event, data, ack) => {
66
+ if (event.startsWith("update" + this.className) &&
67
+ event.replace("update" + this.className, "").length === 24) {
68
+ try {
69
+ const id = event.replace("update" + this.className, "");
70
+ let obj = this.classes[id];
71
+ if (typeof obj === "string")
72
+ this.classes[id] = obj = await this.handleGetMissingObject(obj);
73
+ if (typeof obj === "string")
74
+ throw new Error(`Never...`);
75
+ obj.setValue(data.key, data.value);
76
+ ack({
77
+ data: obj.extractedData,
78
+ success: true,
79
+ message: "Updated successfully",
80
+ });
81
+ }
82
+ catch (error) {
83
+ ack({ success: false, message: error.message });
84
+ }
85
+ }
86
+ else if (event.startsWith("get" + this.className) &&
87
+ event.replace("get" + this.className, "").length === 24) {
88
+ try {
89
+ const id = event.replace("get" + this.className, "");
90
+ let obj = this.classes[id];
91
+ ack({
92
+ data: obj.extractedData,
93
+ success: true,
94
+ message: "Updated successfully",
95
+ });
96
+ }
97
+ catch (error) {
98
+ ack({ success: false, message: error.message });
99
+ }
100
+ }
101
+ });
102
+ socket.on("disconnect", () => {
103
+ this.clientSockets.delete(socket);
104
+ });
105
+ }
106
+ async handleGetMissingObject(_id) {
107
+ const document = await this.model.findById(_id);
108
+ if (!document)
109
+ throw new Error(`No document with id ${_id} in DB.`);
110
+ if (!this.classers)
111
+ throw new Error(`No classers.`);
112
+ return await createAutoUpdatedClass(this.classParam, this.socket, document, this.loggers, this, this.emitter);
113
+ }
114
+ async createObject(data) {
115
+ if (!this.classers)
116
+ throw new Error(`No classers.`);
117
+ data._id = undefined;
118
+ const entry = await this.model.create(data);
119
+ const object = await createAutoUpdatedClass(this.classParam, this.socket, entry, this.loggers, this, this.emitter);
120
+ object.checkAutoStatusChange();
121
+ this.classes[object._id] = object;
122
+ this.classesAsArray.push(object);
123
+ return object;
124
+ }
125
+ }
126
+ //# sourceMappingURL=AutoUpdateServerManagerClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoUpdateServerManagerClass.js","sourceRoot":"","sources":["../AutoUpdateServerManagerClass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import "reflect-metadata";
2
+ import { Constructor, DeRef, InstanceOf, IsData, LoggersType, LoggersTypeInternal, Paths, PathValueOf, RefToId, SocketType } from "./CommonTypes.js";
3
+ import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
4
+ import { AutoUpdateClientManager } from "./AutoUpdateClientManagerClass.js";
5
+ export type AutoUpdated<T extends Constructor<any>> = AutoUpdatedClientObject<T> & DeRef<InstanceOf<T>>;
6
+ export declare function createAutoUpdatedClass<C extends Constructor<any>>(classParam: C, socket: SocketType, data: RefToId<IsData<InstanceType<C>>> | string, loggers: LoggersType, autoClassers: AutoUpdateClientManager<any>, emitter: EventTarget): Promise<AutoUpdated<C>>;
7
+ export declare abstract class AutoUpdatedClientObject<T extends Constructor<any>> {
8
+ protected readonly socket: SocketType;
9
+ protected data: IsData<T>;
10
+ protected readonly isServer: boolean;
11
+ protected readonly loggers: LoggersTypeInternal;
12
+ protected isLoading: boolean;
13
+ protected readonly emitter: EventTarget;
14
+ protected readonly properties: (keyof T)[];
15
+ protected readonly className: string;
16
+ protected autoClasser: AutoUpdateManager<any>;
17
+ protected isLoadingReferences: boolean;
18
+ readonly classProp: Constructor<T>;
19
+ private readonly EmitterID;
20
+ private readonly loadShit;
21
+ constructor(socket: SocketType, data: string | RefToId<IsData<T>>, loggers: LoggersType, properties: (keyof T)[], className: string, classProperty: Constructor<T>, autoClasser: AutoUpdateManager<any>, emitter: EventTarget);
22
+ protected handleNewObject(data: IsData<T>): void;
23
+ get extractedData(): {
24
+ [K in keyof InstanceType<T>]: InstanceOf<InstanceType<T>>[K];
25
+ };
26
+ isLoaded(): boolean;
27
+ isLoadedAsync(): Promise<boolean>;
28
+ private openSockets;
29
+ private handleUpdateRequest;
30
+ private generateSettersAndGetters;
31
+ protected findReference(id: string): AutoUpdated<any> | undefined;
32
+ setValue<K extends Paths<InstanceOf<T>>>(key: K, val: PathValueOf<T, K>): Promise<boolean>;
33
+ getValue(key: Paths<T>): any;
34
+ protected setValueInternal(key: string, value: any): Promise<boolean>;
35
+ protected makeUpdate(key: string, value: any): any;
36
+ protected checkAutoStatusChange(): Promise<void>;
37
+ protected resolveReference(id: string): AutoUpdatedClientObject<any> | null;
38
+ private loadForceReferences;
39
+ private handleLoadOnForced;
40
+ destroy(): Promise<void>;
41
+ protected wipeSelf(): void;
42
+ }
43
+ export declare function processIsRefProperties(instance: any, target: any, prefix?: string | null, allProps?: string[], newData?: any, loggers?: LoggersType): {
44
+ allProps: string[];
45
+ newData: any;
46
+ };
47
+ export declare function getMetadataRecursive(metaKey: string, proto: any, prop: string): any;