@prestizni-software/client-dem 0.2.21 → 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.
- package/dist/AutoUpdateClientManagerClass.d.ts +12 -0
- package/dist/AutoUpdateClientManagerClass.js +46 -0
- package/dist/AutoUpdateClientManagerClass.js.map +1 -0
- package/dist/AutoUpdateManagerClass.d.ts +28 -0
- package/dist/AutoUpdateManagerClass.js +56 -0
- package/dist/AutoUpdateManagerClass.js.map +1 -0
- package/dist/AutoUpdatedClientObjectClass.d.ts +47 -0
- package/dist/AutoUpdatedClientObjectClass.js +384 -0
- package/dist/AutoUpdatedClientObjectClass.js.map +1 -0
- package/dist/CommonTypes.d.ts +78 -0
- package/dist/CommonTypes.js +10 -0
- package/dist/CommonTypes.js.map +1 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.js +11 -0
- package/dist/client.js.map +1 -0
- package/package.json +7 -2
- package/AutoUpdateClientManagerClass.ts +0 -82
- package/AutoUpdateManagerClass.ts +0 -83
- package/AutoUpdatedClientObjectClass.ts +0 -516
- package/CHANGELOG.md +0 -53
- package/CommonTypes.ts +0 -161
- package/client.ts +0 -11
- package/tsconfig.json +0 -113
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { DefaultEventsMap, Server } from "socket.io";
|
|
2
|
+
import { Socket as SocketClient } from "socket.io-client";
|
|
3
|
+
import { ObjectId } from "bson";
|
|
4
|
+
import { AutoUpdated } from "./AutoUpdatedClientObjectClass.js";
|
|
5
|
+
import "reflect-metadata";
|
|
6
|
+
export type Ref<T> = string | (T extends Constructor<any> ? AutoUpdated<T> : (T & {
|
|
7
|
+
_id: string;
|
|
8
|
+
}));
|
|
9
|
+
export type LoggersTypeInternal = LoggersType & {
|
|
10
|
+
warn: (...args: any[]) => void;
|
|
11
|
+
};
|
|
12
|
+
export type LoggersType = {
|
|
13
|
+
info: (...args: any[]) => void;
|
|
14
|
+
debug: (...args: any[]) => void;
|
|
15
|
+
error: (...args: any[]) => void;
|
|
16
|
+
warn?: (...args: any[]) => void;
|
|
17
|
+
};
|
|
18
|
+
export type SocketType = SocketClient<DefaultEventsMap, DefaultEventsMap> | Server<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>;
|
|
19
|
+
export type IsData<T> = T extends {
|
|
20
|
+
_id: string | ObjectId;
|
|
21
|
+
} ? T : never;
|
|
22
|
+
export type ServerResponse<T> = {
|
|
23
|
+
data: T;
|
|
24
|
+
message: string;
|
|
25
|
+
success: true;
|
|
26
|
+
} | {
|
|
27
|
+
data?: null;
|
|
28
|
+
message: string;
|
|
29
|
+
success: false;
|
|
30
|
+
};
|
|
31
|
+
export type ServerUpdateResponse<T> = {
|
|
32
|
+
data: Partial<IsData<T>>;
|
|
33
|
+
message: string;
|
|
34
|
+
success: true;
|
|
35
|
+
updateId: string;
|
|
36
|
+
};
|
|
37
|
+
export type ServerUpdateRequest<T> = {
|
|
38
|
+
_id: string;
|
|
39
|
+
key: string;
|
|
40
|
+
value: any;
|
|
41
|
+
};
|
|
42
|
+
export declare function classProp(target: any, propertyKey: string): void;
|
|
43
|
+
export declare function classRef(target: any, propertyKey: string): void;
|
|
44
|
+
export type AutoProps<T> = {
|
|
45
|
+
readonly [K in keyof T]: T[K];
|
|
46
|
+
};
|
|
47
|
+
export type Constructor<T> = new (...args: any[]) => T;
|
|
48
|
+
export type UnboxConstructor<T> = T extends new (...args: any[]) => infer I ? I : T;
|
|
49
|
+
export type NonOptional<T> = Exclude<T, null | undefined>;
|
|
50
|
+
export type DeRef<T> = {
|
|
51
|
+
[K in keyof T]: T[K] extends Ref<infer U> ? NonOptional<U> : T[K] extends Ref<infer U> | null | undefined ? NonOptional<U> : NonOptional<T[K]>;
|
|
52
|
+
};
|
|
53
|
+
export type RefToId<T> = {
|
|
54
|
+
[K in keyof T]: T[K] extends Ref<infer U> ? string : T[K];
|
|
55
|
+
};
|
|
56
|
+
export type InstanceOf<T> = T extends Constructor<infer I> ? I : T;
|
|
57
|
+
export type NeededTypeAtPath<C extends Constructor<any>, T> = {
|
|
58
|
+
[P in Paths<C>]: PathValueOf<C, P> extends T ? P : never;
|
|
59
|
+
}[Paths<C>];
|
|
60
|
+
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
61
|
+
type StripPrototypePrefix<P extends string> = P extends "prototype" ? never : P extends `prototype.${infer Rest}` ? Rest : P;
|
|
62
|
+
type ResolveRef<T> = T extends Ref<infer U> ? U : T;
|
|
63
|
+
type Recurseable<T> = T extends object ? T extends Array<any> | Function ? never : T : never;
|
|
64
|
+
type Join<K extends string, P extends string> = `${K}.${P}`;
|
|
65
|
+
type OnlyClassKeys<T> = {
|
|
66
|
+
[K in keyof T]: K;
|
|
67
|
+
}[keyof T] & string;
|
|
68
|
+
export type Paths<T, Depth extends number = 5, OriginalDepth extends number = Depth> = Depth extends never ? never : {
|
|
69
|
+
[K in OnlyClassKeys<DeRef<NonOptional<T>>>]: K extends "_id" ? StripPrototypePrefix<`${K}`> : StripPrototypePrefix<PathsHelper<K, DeRef<NonOptional<T>>[K], Depth, OriginalDepth>>;
|
|
70
|
+
}[OnlyClassKeys<DeRef<NonOptional<T>>>];
|
|
71
|
+
type PathsHelper<K extends string, V, Depth extends number, OriginalDepth extends number> = Recurseable<V> extends never ? `${K}` : `${K}` | Join<K, Paths<DeRef<NonOptional<V>>, Prev[Depth], OriginalDepth>>;
|
|
72
|
+
type Split<S extends string> = S extends `${infer L}.${infer R}` ? [L, ...Split<R>] : [S];
|
|
73
|
+
type PathValue<T, Parts extends readonly string[], Depth extends number = 5> = Depth extends 0 ? any : Parts extends [infer K, ...infer Rest] ? K extends keyof T ? Rest extends readonly string[] ? Rest["length"] extends 0 ? ResolveRef<T[K]> : PathValue<ResolveRef<T[K]>, Rest, Prev[Depth]> : never : never : T;
|
|
74
|
+
export type PathValueOf<T, P extends string, Depth extends number = 5> = PathValue<DeRef<InstanceOf<T>>, Split<P>, Depth>;
|
|
75
|
+
export type Pretty<T> = {
|
|
76
|
+
[K in keyof T]: T[K];
|
|
77
|
+
};
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
export function classProp(target, propertyKey) {
|
|
3
|
+
const props = Reflect.getMetadata("props", target) || [];
|
|
4
|
+
props.push(propertyKey);
|
|
5
|
+
Reflect.defineMetadata("props", props, target);
|
|
6
|
+
}
|
|
7
|
+
export function classRef(target, propertyKey) {
|
|
8
|
+
Reflect.defineMetadata("isRef", true, target, propertyKey);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=CommonTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommonTypes.js","sourceRoot":"","sources":["../CommonTypes.ts"],"names":[],"mappings":"AAIA,OAAO,kBAAkB,CAAC;AAyC1B,MAAM,UAAU,SAAS,CAAC,MAAW,EAAE,WAAmB;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAW,EAAE,WAAmB;IACvD,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as AutoUpdateClientManagerClass from "./AutoUpdateClientManagerClass.js";
|
|
2
|
+
import * as AutoUpdateManagerClass from "./AutoUpdateManagerClass.js";
|
|
3
|
+
import * as AutoUpdatedClientObjectClass from "./AutoUpdatedClientObjectClass.js";
|
|
4
|
+
import * as CommonTypes from "./CommonTypes.js";
|
|
5
|
+
module.exports = {
|
|
6
|
+
AutoUpdateClientManagerClass,
|
|
7
|
+
AutoUpdateManagerClass,
|
|
8
|
+
AutoUpdatedClientObjectClass,
|
|
9
|
+
CommonTypes,
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,4BAA4B,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,sBAAsB,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,4BAA4B,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,OAAO,GAAG;IACf,4BAA4B;IAC5B,sBAAsB;IACtB,4BAA4B;IAC5B,WAAW;CACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prestizni-software/client-dem",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.23",
|
|
4
4
|
"description": "An solution for when making http requests is not a good solution",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"websockets"
|
|
@@ -8,7 +8,12 @@
|
|
|
8
8
|
"license": "ISC",
|
|
9
9
|
"author": "xx0055",
|
|
10
10
|
"type": "module",
|
|
11
|
-
"main": "client.
|
|
11
|
+
"main": "./dist/client.js",
|
|
12
|
+
"module": "./dist/client.mjs",
|
|
13
|
+
"types": "./dist/client.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
12
17
|
"publishConfig": {
|
|
13
18
|
"access": "public",
|
|
14
19
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { Socket } from "socket.io-client";
|
|
2
|
-
import { AutoUpdateManager } from "./AutoUpdateManagerClass.ts";
|
|
3
|
-
import { createAutoUpdatedClass } from "./AutoUpdatedClientObjectClass.ts";
|
|
4
|
-
import { Constructor, IsData, LoggersType } from "./CommonTypes.ts";
|
|
5
|
-
export type WrappedInstances<T extends Record<string, Constructor<any>>> = {
|
|
6
|
-
[K in keyof T]: AutoUpdateClientManager<T[K]>;
|
|
7
|
-
};
|
|
8
|
-
// ---------------------- Factory ----------------------
|
|
9
|
-
export async function AUCManagerFactory<
|
|
10
|
-
T extends Record<string, Constructor<any>>
|
|
11
|
-
>(defs: T, loggers: LoggersType, socket: Socket): Promise<WrappedInstances<T>> {
|
|
12
|
-
const classers = {} as WrappedInstances<T>;
|
|
13
|
-
const emitter = new EventTarget();
|
|
14
|
-
for (const key in defs) {
|
|
15
|
-
const Model = defs[key];
|
|
16
|
-
const c = new AutoUpdateClientManager(
|
|
17
|
-
Model,
|
|
18
|
-
loggers,
|
|
19
|
-
socket,
|
|
20
|
-
classers as any,
|
|
21
|
-
emitter
|
|
22
|
-
);
|
|
23
|
-
classers[key] = c;
|
|
24
|
-
await c.isLoadedAsync();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return classers;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export class AutoUpdateClientManager<
|
|
31
|
-
T extends Constructor<any>
|
|
32
|
-
> extends AutoUpdateManager<T> {
|
|
33
|
-
constructor(
|
|
34
|
-
classParam: T,
|
|
35
|
-
loggers: LoggersType,
|
|
36
|
-
socket: Socket,
|
|
37
|
-
classers: Record<string, AutoUpdateManager<any>>,
|
|
38
|
-
emitter: EventTarget
|
|
39
|
-
) {
|
|
40
|
-
super(classParam, socket, loggers, classers, emitter);
|
|
41
|
-
socket.emit("startup" + classParam.name, async (data: string[]) => {
|
|
42
|
-
for (const id of data) {
|
|
43
|
-
this.classes[id] = await this.handleGetMissingObject(id);
|
|
44
|
-
this.classesAsArray.push(this.classes[id]);
|
|
45
|
-
}
|
|
46
|
-
emitter.dispatchEvent(new Event("ManagerLoaded"+this.classParam.name+this.className));
|
|
47
|
-
});
|
|
48
|
-
socket.on("new" + classParam.name, async (id: string) => {
|
|
49
|
-
this.classes[id] = await this.handleGetMissingObject(id);
|
|
50
|
-
this.classesAsArray.push(this.classes[id]);
|
|
51
|
-
});
|
|
52
|
-
socket.on("delete" + classParam.name, (id: string) => {
|
|
53
|
-
this.deleteObject(id);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
protected async handleGetMissingObject(_id: string) {
|
|
58
|
-
if (!this.classers) throw new Error(`No classers.`);
|
|
59
|
-
return await createAutoUpdatedClass(
|
|
60
|
-
this.classParam,
|
|
61
|
-
this.socket,
|
|
62
|
-
_id,
|
|
63
|
-
this.loggers,
|
|
64
|
-
this.classers,
|
|
65
|
-
this.emitter
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
public async createObject(data: IsData<InstanceType<T>>) {
|
|
70
|
-
if (!this.classers) throw new Error(`No classers.`);
|
|
71
|
-
const object = await createAutoUpdatedClass(
|
|
72
|
-
this.classParam,
|
|
73
|
-
this.socket,
|
|
74
|
-
data,
|
|
75
|
-
this.loggers,
|
|
76
|
-
this.classers,
|
|
77
|
-
this.emitter
|
|
78
|
-
);
|
|
79
|
-
this.classes[object._id as any] = object;
|
|
80
|
-
return object;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { AutoUpdated } from "./AutoUpdatedClientObjectClass.ts";
|
|
2
|
-
import { Constructor, IsData, LoggersType, SocketType } from "./CommonTypes.ts";
|
|
3
|
-
import "reflect-metadata";
|
|
4
|
-
|
|
5
|
-
export abstract class AutoUpdateManager<T extends Constructor<any>> {
|
|
6
|
-
protected classes: { [_id: string]: AutoUpdated<T> } = {};
|
|
7
|
-
public socket: SocketType;
|
|
8
|
-
protected classParam: T;
|
|
9
|
-
protected properties: (keyof T)[];
|
|
10
|
-
protected classers: Record<string, AutoUpdateManager<any>>;
|
|
11
|
-
protected loggers: LoggersType = {
|
|
12
|
-
info: () => {},
|
|
13
|
-
debug: () => {},
|
|
14
|
-
error: () => {},
|
|
15
|
-
warn: () => {},
|
|
16
|
-
};
|
|
17
|
-
protected classesAsArray: AutoUpdated<T>[] = [];
|
|
18
|
-
protected emitter: EventTarget;
|
|
19
|
-
private isLoaded = false;
|
|
20
|
-
constructor(
|
|
21
|
-
classParam: T,
|
|
22
|
-
socket: SocketType,
|
|
23
|
-
loggers: LoggersType,
|
|
24
|
-
classers: Record<string, AutoUpdateManager<any>>,
|
|
25
|
-
emitter: EventTarget
|
|
26
|
-
) {
|
|
27
|
-
this.emitter = emitter;
|
|
28
|
-
this.classers = classers;
|
|
29
|
-
this.socket = socket;
|
|
30
|
-
this.classParam = classParam;
|
|
31
|
-
this.properties = Reflect.getMetadata(
|
|
32
|
-
"props",
|
|
33
|
-
Object.getPrototypeOf(classParam)
|
|
34
|
-
);
|
|
35
|
-
loggers.warn = loggers.warn ?? loggers.info;
|
|
36
|
-
this.loggers = loggers;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
public getObject(
|
|
41
|
-
_id: string
|
|
42
|
-
): AutoUpdated<T> | null {
|
|
43
|
-
return this.classes[_id];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public async isLoadedAsync(): Promise<boolean> {
|
|
47
|
-
if (this.isLoaded) return this.isLoaded;
|
|
48
|
-
await new Promise((resolve) => this.emitter.addEventListener("ManagerLoaded"+this.classParam.name+this.className, resolve));
|
|
49
|
-
this.isLoaded = true;
|
|
50
|
-
return this.isLoaded;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public async deleteObject(_id: string): Promise<void> {
|
|
54
|
-
if (typeof this.classes[_id] === "string")
|
|
55
|
-
this.classes[_id] = await this.handleGetMissingObject(this.classes[_id]);
|
|
56
|
-
(this.classes[_id]).destroy();
|
|
57
|
-
this.classesAsArray.splice(this.classesAsArray.indexOf(this.classes[_id]), 1);
|
|
58
|
-
delete this.classes[_id];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public get objectIDs(): string[] {
|
|
62
|
-
return Object.keys(this.classes);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
public get objects(): { [_id: string]: AutoUpdated<T> | string } {
|
|
66
|
-
return this.classes;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
public get objectsAsArray(): AutoUpdated<T>[] {
|
|
70
|
-
return this.classesAsArray;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
public get className(): string {
|
|
74
|
-
return this.classParam.name;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
protected abstract handleGetMissingObject(
|
|
78
|
-
_id: string
|
|
79
|
-
): Promise<AutoUpdated<T>>;
|
|
80
|
-
public abstract createObject(
|
|
81
|
-
data: IsData<InstanceType<T>>
|
|
82
|
-
): Promise<AutoUpdated<T>>;
|
|
83
|
-
}
|