knight-server 1.0.0

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.
Files changed (101) hide show
  1. package/Server.d.ts +39 -0
  2. package/Server.d.ts.map +1 -0
  3. package/Server.js +61 -0
  4. package/Server.js.map +1 -0
  5. package/base/AbstractModule.d.ts +25 -0
  6. package/base/AbstractModule.d.ts.map +1 -0
  7. package/base/AbstractModule.js +19 -0
  8. package/base/AbstractModule.js.map +1 -0
  9. package/base/AbstractObject.d.ts +22 -0
  10. package/base/AbstractObject.d.ts.map +1 -0
  11. package/base/AbstractObject.js +48 -0
  12. package/base/AbstractObject.js.map +1 -0
  13. package/base/AbstractRouter.d.ts +24 -0
  14. package/base/AbstractRouter.d.ts.map +1 -0
  15. package/base/AbstractRouter.js +26 -0
  16. package/base/AbstractRouter.js.map +1 -0
  17. package/base/index.d.ts +4 -0
  18. package/base/index.d.ts.map +1 -0
  19. package/base/index.js +20 -0
  20. package/base/index.js.map +1 -0
  21. package/index.d.ts +5 -0
  22. package/index.d.ts.map +1 -0
  23. package/index.js +46 -0
  24. package/index.js.map +1 -0
  25. package/module/database/DataBaseModule.d.ts +133 -0
  26. package/module/database/DataBaseModule.d.ts.map +1 -0
  27. package/module/database/DataBaseModule.js +359 -0
  28. package/module/database/DataBaseModule.js.map +1 -0
  29. package/module/database/index.d.ts +2 -0
  30. package/module/database/index.d.ts.map +1 -0
  31. package/module/database/index.js +18 -0
  32. package/module/database/index.js.map +1 -0
  33. package/module/http/HttpModule.d.ts +26 -0
  34. package/module/http/HttpModule.d.ts.map +1 -0
  35. package/module/http/HttpModule.js +52 -0
  36. package/module/http/HttpModule.js.map +1 -0
  37. package/module/http/HttpRouter.d.ts +34 -0
  38. package/module/http/HttpRouter.d.ts.map +1 -0
  39. package/module/http/HttpRouter.js +63 -0
  40. package/module/http/HttpRouter.js.map +1 -0
  41. package/module/http/index.d.ts +3 -0
  42. package/module/http/index.d.ts.map +1 -0
  43. package/module/http/index.js +19 -0
  44. package/module/http/index.js.map +1 -0
  45. package/module/index.d.ts +4 -0
  46. package/module/index.d.ts.map +1 -0
  47. package/module/index.js +20 -0
  48. package/module/index.js.map +1 -0
  49. package/module/websocket/WebSocketClient.d.ts +56 -0
  50. package/module/websocket/WebSocketClient.d.ts.map +1 -0
  51. package/module/websocket/WebSocketClient.js +142 -0
  52. package/module/websocket/WebSocketClient.js.map +1 -0
  53. package/module/websocket/WebSocketModule.d.ts +31 -0
  54. package/module/websocket/WebSocketModule.d.ts.map +1 -0
  55. package/module/websocket/WebSocketModule.js +100 -0
  56. package/module/websocket/WebSocketModule.js.map +1 -0
  57. package/module/websocket/WebSocketRouter.d.ts +32 -0
  58. package/module/websocket/WebSocketRouter.d.ts.map +1 -0
  59. package/module/websocket/WebSocketRouter.js +67 -0
  60. package/module/websocket/WebSocketRouter.js.map +1 -0
  61. package/module/websocket/index.d.ts +4 -0
  62. package/module/websocket/index.d.ts.map +1 -0
  63. package/module/websocket/index.js +20 -0
  64. package/module/websocket/index.js.map +1 -0
  65. package/package.json +19 -0
  66. package/test/MyRouter.d.ts +16 -0
  67. package/test/MyRouter.d.ts.map +1 -0
  68. package/test/MyRouter.js +49 -0
  69. package/test/MyRouter.js.map +1 -0
  70. package/test/WSRouter.d.ts +10 -0
  71. package/test/WSRouter.d.ts.map +1 -0
  72. package/test/WSRouter.js +33 -0
  73. package/test/WSRouter.js.map +1 -0
  74. package/test/index.d.ts +3 -0
  75. package/test/index.d.ts.map +1 -0
  76. package/test/index.js +19 -0
  77. package/test/index.js.map +1 -0
  78. package/utility/DatabaseUtility.d.ts +158 -0
  79. package/utility/DatabaseUtility.d.ts.map +1 -0
  80. package/utility/DatabaseUtility.js +903 -0
  81. package/utility/DatabaseUtility.js.map +1 -0
  82. package/utility/InterfaceUtility.d.ts +14 -0
  83. package/utility/InterfaceUtility.d.ts.map +1 -0
  84. package/utility/InterfaceUtility.js +3 -0
  85. package/utility/InterfaceUtility.js.map +1 -0
  86. package/utility/NetworkUtility.d.ts +80 -0
  87. package/utility/NetworkUtility.d.ts.map +1 -0
  88. package/utility/NetworkUtility.js +134 -0
  89. package/utility/NetworkUtility.js.map +1 -0
  90. package/utility/StringUtility.d.ts +46 -0
  91. package/utility/StringUtility.d.ts.map +1 -0
  92. package/utility/StringUtility.js +153 -0
  93. package/utility/StringUtility.js.map +1 -0
  94. package/utility/TimeUtility.d.ts +65 -0
  95. package/utility/TimeUtility.d.ts.map +1 -0
  96. package/utility/TimeUtility.js +220 -0
  97. package/utility/TimeUtility.js.map +1 -0
  98. package/utility/index.d.ts +6 -0
  99. package/utility/index.d.ts.map +1 -0
  100. package/utility/index.js +22 -0
  101. package/utility/index.js.map +1 -0
package/Server.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ import { DataBaseConfig, DataBaseModule, HttpConfig, HttpModule, WebSocketConfig, WebSocketModule } from "./module";
2
+ /** 服务类 */
3
+ export declare class Server {
4
+ /** 单例模式 */
5
+ private static instance;
6
+ static get Instance(): Server;
7
+ /** 服务配置 */
8
+ private config;
9
+ /** Express实例 */
10
+ private readonly express;
11
+ /** 数据库模块 */
12
+ readonly database: DataBaseModule;
13
+ /** HTTP模块 */
14
+ readonly http: HttpModule;
15
+ /** WebSocket模块 */
16
+ readonly websocket: WebSocketModule;
17
+ /** 服务状态 */
18
+ private state;
19
+ /** 构造函数 */
20
+ private constructor();
21
+ /** 启动服务 */
22
+ OnStart(config: ServerConfig): Promise<void>;
23
+ /** 停止服务 */
24
+ OnStop(): Promise<void>;
25
+ /** 自动获取服务地址 */
26
+ private OnServerHost;
27
+ }
28
+ /** 服务端配置 */
29
+ export interface ServerConfig {
30
+ /** 数据库配置 */
31
+ database: DataBaseConfig;
32
+ /** HTTP配置 */
33
+ http: HttpConfig;
34
+ /** WebSocket配置 */
35
+ websocket: WebSocketConfig;
36
+ /** 服务地址 */
37
+ serverHost?: string;
38
+ }
39
+ //# sourceMappingURL=Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAc,eAAe,EAAE,eAAe,EAAmB,MAAM,UAAU,CAAC;AAGjJ,UAAU;AACV,qBAAa,MAAM;IAEf,WAAW;IACX,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,WAAkB,QAAQ,WAA+F;IACzH,WAAW;IACX,OAAO,CAAC,MAAM,CAAe;IAC7B,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,YAAY;IACZ,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,aAAa;IACb,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,kBAAkB;IAClB,SAAgB,SAAS,EAAE,eAAe,CAAC;IAC3C,WAAW;IACX,OAAO,CAAC,KAAK,CAAkB;IAE/B,WAAW;IACX,OAAO;IAaP,WAAW;IACE,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD,WAAW;IACE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,eAAe;YACD,YAAY;CAK7B;AACD,YAAY;AACZ,MAAM,WAAW,YAAY;IAEzB,YAAY;IACZ,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,kBAAkB;IAClB,SAAS,EAAE,eAAe,CAAC;IAE3B,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
package/Server.js ADDED
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Server = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const cors_1 = __importDefault(require("cors"));
9
+ const module_1 = require("./module");
10
+ const utility_1 = require("./utility");
11
+ /** 服务类 */
12
+ class Server {
13
+ static get Instance() { if (null == Server.instance) {
14
+ Server.instance = new Server();
15
+ } return Server.instance; }
16
+ ;
17
+ /** 构造函数 */
18
+ constructor() {
19
+ /** 服务状态 */
20
+ this.state = false;
21
+ // 构建实例
22
+ const express = (0, express_1.default)();
23
+ express.use((0, cors_1.default)());
24
+ express.use(express_1.default.json({ limit: "50mb" }));
25
+ express.use(express_1.default.urlencoded({ extended: true, limit: "50mb" }));
26
+ this.express = express;
27
+ // 构建模块
28
+ this.database = new module_1.DataBaseModule(this, express);
29
+ this.http = new module_1.HttpModule(this, express);
30
+ this.websocket = new module_1.WebSocketModule(this, express);
31
+ }
32
+ /** 启动服务 */
33
+ async OnStart(config) {
34
+ // 避免重复启动
35
+ if (this.state) {
36
+ return;
37
+ }
38
+ const serverHost = await this.OnServerHost();
39
+ config.serverHost = serverHost;
40
+ this.config = config;
41
+ await this.database.OnStart(serverHost, config.database);
42
+ await this.http.OnStart(serverHost, config.http);
43
+ await this.websocket.OnStart(serverHost, config.websocket);
44
+ this.state = true;
45
+ }
46
+ /** 停止服务 */
47
+ async OnStop() {
48
+ this.express.removeAllListeners();
49
+ await this.database.OnStop();
50
+ await this.http.OnStop();
51
+ await this.websocket.OnStop();
52
+ this.state = false;
53
+ }
54
+ /** 自动获取服务地址 */
55
+ async OnServerHost() {
56
+ // return await NetworkUtility.getPublicIp();
57
+ return utility_1.NetworkUtility.getLocalIp();
58
+ }
59
+ }
60
+ exports.Server = Server;
61
+ //# sourceMappingURL=Server.js.map
package/Server.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../src/Server.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAkC;AAClC,gDAAwB;AAExB,qCAAiJ;AACjJ,uCAA6D;AAE7D,UAAU;AACV,MAAa,MAAM;IAIR,MAAM,KAAK,QAAQ,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;IAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAA,CAAC;IAc1H,WAAW;IACX;QAJA,WAAW;QACH,UAAK,GAAY,KAAK,CAAC;QAK3B,OAAO;QACP,MAAM,OAAO,GAAG,IAAA,iBAAW,GAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,cAAI,GAAE,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,iBAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO;QACP,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,mBAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IACD,WAAW;IACJ,KAAK,CAAC,OAAO,CAAC,MAAoB;QAErC,SAAS;QACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,WAAW;IACJ,KAAK,CAAC,MAAM;QAEf,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,eAAe;IACP,KAAK,CAAC,YAAY;QAEtB,6CAA6C;QAC7C,OAAO,wBAAc,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;CACJ;AA5DD,wBA4DC"}
@@ -0,0 +1,25 @@
1
+ import { Express } from "express-serve-static-core";
2
+ import { Server } from "../Server";
3
+ import { AbstractObject } from "./AbstractObject";
4
+ /** 抽象模块基类 */
5
+ export declare abstract class AbstarctModule<T extends ModuleConfig> extends AbstractObject {
6
+ /** 服务实例 */
7
+ protected readonly server: Server;
8
+ /** Express实例 */
9
+ protected readonly express: Express;
10
+ /** 服务地址 */
11
+ protected serverHost: string;
12
+ /** 配置数据 */
13
+ protected abstract config: T;
14
+ /** 构造函数 */
15
+ constructor(server: Server, express: Express);
16
+ /** 启动 */
17
+ abstract OnStart(serverHost: string, config: T): Promise<void>;
18
+ /** 停止 */
19
+ abstract OnStop(): Promise<void>;
20
+ OnDestroy(): void;
21
+ }
22
+ /** 模块配置 */
23
+ export interface ModuleConfig {
24
+ }
25
+ //# sourceMappingURL=AbstractModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractModule.d.ts","sourceRoot":"","sources":["../../src/base/AbstractModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,aAAa;AACb,8BAAsB,cAAc,CAAC,CAAC,SAAS,YAAY,CAAE,SAAQ,cAAc;IAE/E,WAAW;IACX,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IACpC,WAAW;IACX,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,WAAW;IACX,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7B,WAAW;gBACQ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAMnD,SAAS;aACO,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACrE,SAAS;aACO,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhC,SAAS,IAAI,IAAI;CAM3B;AACD,WAAW;AACX,MAAM,WAAW,YAAY;CAG5B"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstarctModule = void 0;
4
+ const AbstractObject_1 = require("./AbstractObject");
5
+ /** 抽象模块基类 */
6
+ class AbstarctModule extends AbstractObject_1.AbstractObject {
7
+ /** 构造函数 */
8
+ constructor(server, express) {
9
+ super();
10
+ this.server = server;
11
+ this.express = express;
12
+ }
13
+ OnDestroy() {
14
+ super.OnDestroy();
15
+ this.OnStop();
16
+ }
17
+ }
18
+ exports.AbstarctModule = AbstarctModule;
19
+ //# sourceMappingURL=AbstractModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractModule.js","sourceRoot":"","sources":["../../src/base/AbstractModule.ts"],"names":[],"mappings":";;;AAEA,qDAAkD;AAElD,aAAa;AACb,MAAsB,cAAuC,SAAQ,+BAAc;IAW/E,WAAW;IACX,YAAmB,MAAc,EAAE,OAAgB;QAE/C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAMM,SAAS;QAEZ,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;CAEJ;AA7BD,wCA6BC"}
@@ -0,0 +1,22 @@
1
+ /** 抽象对象基类 — 提供 ID、生命周期、日志 */
2
+ export declare abstract class AbstractObject {
3
+ /** 对象唯一 ID */
4
+ readonly id: string;
5
+ /** 类名 */
6
+ readonly className: string;
7
+ /** 是否已销毁 */
8
+ private _destroyed;
9
+ /** 构造函数 */
10
+ constructor();
11
+ /** 销毁对象,防止重复销毁 */
12
+ OnDestroy(): void;
13
+ /** 是否已销毁 */
14
+ get isDestroyed(): boolean;
15
+ /** 检查未销毁,否则抛异常 */
16
+ protected assertAlive(): void;
17
+ protected log(...args: any[]): void;
18
+ protected logInfo(...args: any[]): void;
19
+ protected logWarn(...args: any[]): void;
20
+ protected logError(...args: any[]): void;
21
+ }
22
+ //# sourceMappingURL=AbstractObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractObject.d.ts","sourceRoot":"","sources":["../../src/base/AbstractObject.ts"],"names":[],"mappings":"AAEA,6BAA6B;AAC7B,8BAAsB,cAAc;IAEhC,cAAc;IACd,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAS;IACT,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC,YAAY;IACZ,OAAO,CAAC,UAAU,CAAkB;IAEpC,WAAW;;IASX,kBAAkB;IACX,SAAS,IAAI,IAAI;IAMxB,YAAY;IACZ,IAAW,WAAW,IAAI,OAAO,CAGhC;IAED,kBAAkB;IAClB,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAKnC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAKvC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAKvC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAI3C"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AbstractObject = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ /** 抽象对象基类 — 提供 ID、生命周期、日志 */
9
+ class AbstractObject {
10
+ /** 构造函数 */
11
+ constructor() {
12
+ /** 是否已销毁 */
13
+ this._destroyed = false;
14
+ this.id = crypto_1.default.randomUUID();
15
+ this.className = this.constructor.name;
16
+ }
17
+ // ==================== 生命周期 ====================
18
+ /** 销毁对象,防止重复销毁 */
19
+ OnDestroy() {
20
+ if (this._destroyed)
21
+ return;
22
+ this._destroyed = true;
23
+ }
24
+ /** 是否已销毁 */
25
+ get isDestroyed() {
26
+ return this._destroyed;
27
+ }
28
+ /** 检查未销毁,否则抛异常 */
29
+ assertAlive() {
30
+ if (this._destroyed)
31
+ throw new Error(`${this.className}[${this.id}] 已被销毁`);
32
+ }
33
+ // ==================== 日志 ====================
34
+ log(...args) {
35
+ console.log(`[📝 ${this.className}]`, ...args);
36
+ }
37
+ logInfo(...args) {
38
+ console.info(`[💬 ${this.className}]`, ...args);
39
+ }
40
+ logWarn(...args) {
41
+ console.warn(`[⚠️ ${this.className}]`, ...args);
42
+ }
43
+ logError(...args) {
44
+ console.error(`[🛑 ${this.className}]`, ...args);
45
+ }
46
+ }
47
+ exports.AbstractObject = AbstractObject;
48
+ //# sourceMappingURL=AbstractObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractObject.js","sourceRoot":"","sources":["../../src/base/AbstractObject.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,6BAA6B;AAC7B,MAAsB,cAAc;IAUhC,WAAW;IACX;QAJA,YAAY;QACJ,eAAU,GAAY,KAAK,CAAC;QAKhC,IAAI,CAAC,EAAE,GAAG,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,iDAAiD;IAEjD,kBAAkB;IACX,SAAS;QAEZ,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,YAAY;IACZ,IAAW,WAAW;QAElB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,kBAAkB;IACR,WAAW;QAEjB,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,+CAA+C;IAErC,GAAG,CAAC,GAAG,IAAW;QAExB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IAES,OAAO,CAAC,GAAG,IAAW;QAE5B,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAES,OAAO,CAAC,GAAG,IAAW;QAE5B,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAES,QAAQ,CAAC,GAAG,IAAW;QAE7B,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;CACJ;AA3DD,wCA2DC"}
@@ -0,0 +1,24 @@
1
+ import { AbstractObject } from "./AbstractObject";
2
+ import { InterfaceUtility } from "../utility";
3
+ import { Server } from "../Server";
4
+ /** 抽象路由基类 */
5
+ export declare abstract class AbstractRouter extends AbstractObject {
6
+ /** 服务实例 */
7
+ protected readonly server: Server;
8
+ /** 构造函数 */
9
+ constructor(server: Server);
10
+ /** 校验规则 */
11
+ abstract OnCheck(...args: Array<any>): Promise<boolean>;
12
+ /** 逻辑处理 */
13
+ abstract OnHandler(...args: Array<any>): Promise<void>;
14
+ OnDestroy(): void;
15
+ }
16
+ /** 路由数据 */
17
+ export interface RouterData {
18
+ /** 路径 */
19
+ path: string;
20
+ }
21
+ export declare const RouteRegistry: Array<InterfaceUtility.IType<AbstractRouter>>;
22
+ /** 注册路由 */
23
+ export declare function OnRegister(): <T extends InterfaceUtility.IType<AbstractRouter>>(constructor: T) => void;
24
+ //# sourceMappingURL=AbstractRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRouter.d.ts","sourceRoot":"","sources":["../../src/base/AbstractRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,aAAa;AACb,8BAAsB,cAAe,SAAQ,cAAc;IAEvD,WAAW;IACX,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;aACK,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9D,WAAW;aACK,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD,SAAS,IAAI,IAAI;CAK3B;AACD,WAAW;AACX,MAAM,WAAW,UAAU;IAEvB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAuD,CAAC;AAChI,WAAW;AACX,wBAAgB,UAAU,KAEL,CAAC,SAAS,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,KAAG,IAAI,CAI3F"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteRegistry = exports.AbstractRouter = void 0;
4
+ exports.OnRegister = OnRegister;
5
+ const AbstractObject_1 = require("./AbstractObject");
6
+ /** 抽象路由基类 */
7
+ class AbstractRouter extends AbstractObject_1.AbstractObject {
8
+ /** 构造函数 */
9
+ constructor(server) {
10
+ super();
11
+ this.server = server;
12
+ }
13
+ OnDestroy() {
14
+ super.OnDestroy();
15
+ }
16
+ }
17
+ exports.AbstractRouter = AbstractRouter;
18
+ // 路由注册表(全局收集被 @OnRegister 装饰的类)
19
+ exports.RouteRegistry = new Array();
20
+ /** 注册路由 */
21
+ function OnRegister() {
22
+ return function (constructor) {
23
+ exports.RouteRegistry.push(constructor);
24
+ };
25
+ }
26
+ //# sourceMappingURL=AbstractRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractRouter.js","sourceRoot":"","sources":["../../src/base/AbstractRouter.ts"],"names":[],"mappings":";;;AAoCA,gCAMC;AA1CD,qDAAkD;AAIlD,aAAa;AACb,MAAsB,cAAe,SAAQ,+BAAc;IAKvD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAMM,SAAS;QAEZ,KAAK,CAAC,SAAS,EAAE,CAAC;IACtB,CAAC;CAEJ;AArBD,wCAqBC;AAOD,gCAAgC;AACnB,QAAA,aAAa,GAAkD,IAAI,KAAK,EAA0C,CAAC;AAChI,WAAW;AACX,SAAgB,UAAU;IAEtB,OAAO,UAA4D,WAAc;QAE7E,qBAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./AbstractObject";
2
+ export * from "./AbstractModule";
3
+ export * from "./AbstractRouter";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
package/base/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AbstractObject"), exports);
18
+ __exportStar(require("./AbstractModule"), exports);
19
+ __exportStar(require("./AbstractRouter"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,mDAAiC;AACjC,mDAAiC"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./base";
2
+ export * from "./module";
3
+ export * from "./utility";
4
+ export * from "./test";
5
+ //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAE1B,cAAc,QAAQ,CAAC"}
package/index.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base"), exports);
18
+ __exportStar(require("./module"), exports);
19
+ __exportStar(require("./utility"), exports);
20
+ __exportStar(require("./test"), exports);
21
+ const Server_1 = require("./Server");
22
+ // 启动服务
23
+ const server = Server_1.Server.Instance;
24
+ server.OnStart({
25
+ database: {
26
+ host: "39.96.146.17",
27
+ port: 3306,
28
+ user: "moko-database",
29
+ password: "moko123456",
30
+ database: "moko-database",
31
+ waitForConnections: true,
32
+ connectionLimit: 10,
33
+ queueLimit: 0,
34
+ tableRelativePath: "project/table"
35
+ },
36
+ http: {
37
+ // host: "http://192.168.30.225",
38
+ port: 7000
39
+ },
40
+ websocket: {
41
+ // host: "ws://192.168.30.225",
42
+ port: 8000,
43
+ heartbeat_timeout_interval: 9000
44
+ },
45
+ });
46
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,2CAAyB;AACzB,4CAA0B;AAE1B,yCAAuB;AAGvB,qCAAkC;AAClC,OAAO;AACP,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;AAC/B,MAAM,CAAC,OAAO,CAAC;IACX,QAAQ,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,eAAe;QACzB,kBAAkB,EAAE,IAAI;QACxB,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,CAAC;QACb,iBAAiB,EAAE,eAAe;KACrC;IACD,IAAI,EAAE;QACF,iCAAiC;QACjC,IAAI,EAAE,IAAI;KACb;IACD,SAAS,EAAE;QACP,+BAA+B;QAC/B,IAAI,EAAE,IAAI;QACV,0BAA0B,EAAE,IAAI;KACnC;CAEJ,CAAC,CAAC"}
@@ -0,0 +1,133 @@
1
+ import * as MYSQL from "mysql2/promise";
2
+ import { Express } from "express-serve-static-core";
3
+ import { AbstarctModule, ModuleConfig } from "../../base";
4
+ import { Server } from "../../Server";
5
+ /** 数据库模块 */
6
+ export declare class DataBaseModule extends AbstarctModule<DataBaseConfig> {
7
+ protected config: DataBaseConfig;
8
+ /** MySQL数据库池 */
9
+ private pool;
10
+ /** 构造函数 */
11
+ constructor(server: Server, express: Express);
12
+ OnStart(serverHost: string, config: DataBaseConfig): Promise<void>;
13
+ OnStop(): Promise<void>;
14
+ OnDestroy(): void;
15
+ /**
16
+ * 执行SQL查询(基础方法)
17
+ * @param sql SQL语句(支持 ? 占位符)
18
+ * @param params 参数数组
19
+ * @returns 查询结果
20
+ */
21
+ private executeQuery;
22
+ /**
23
+ * 查询多条数据
24
+ * @param table 表名
25
+ * @param where 查询条件(可选)
26
+ * @param params 参数(可选)
27
+ */
28
+ find<T = any>(table: string, where?: string, params?: any[]): Promise<QueryResult<T>>;
29
+ /**
30
+ * 查询单条数据
31
+ * @param table 表名
32
+ * @param where 查询条件
33
+ * @param params 参数
34
+ */
35
+ findOne<T = any>(table: string, where: string, params?: any[]): Promise<QueryResult<T>>;
36
+ /**
37
+ * 根据ID查询
38
+ * @param table 表名
39
+ * @param id ID值
40
+ * @param idField ID字段名(默认 'id')
41
+ */
42
+ findById<T = any>(table: string, id: number | string, idField?: string): Promise<QueryResult<T>>;
43
+ /**
44
+ * 插入单条数据
45
+ * @param table 表名
46
+ * @param data 要插入的数据对象
47
+ */
48
+ insert<T extends object>(table: string, data: T): Promise<QueryResult>;
49
+ /**
50
+ * 批量插入数据
51
+ * @param table 表名
52
+ * @param dataArray 数据对象数组
53
+ */
54
+ insertBatch<T extends object>(table: string, dataArray: T[]): Promise<QueryResult>;
55
+ /**
56
+ * 更新数据
57
+ * @param table 表名
58
+ * @param data 要更新的数据
59
+ * @param where 更新条件
60
+ * @param whereParams 条件参数
61
+ */
62
+ update<T extends object>(table: string, data: T, where: string, whereParams?: any[]): Promise<QueryResult>;
63
+ /**
64
+ * 根据ID更新
65
+ * @param table 表名
66
+ * @param id ID值
67
+ * @param data 更新数据
68
+ * @param idField ID字段名
69
+ */
70
+ updateById<T extends object>(table: string, id: number | string, data: T, idField?: string): Promise<QueryResult>;
71
+ /**
72
+ * 删除数据
73
+ * @param table 表名
74
+ * @param where 删除条件
75
+ * @param params 条件参数
76
+ */
77
+ delete(table: string, where: string, params?: any[]): Promise<QueryResult>;
78
+ /**
79
+ * 根据ID删除
80
+ * @param table 表名
81
+ * @param id ID值
82
+ * @param idField ID字段名
83
+ */
84
+ deleteById(table: string, id: number | string, idField?: string): Promise<QueryResult>;
85
+ /**
86
+ * 分页查询
87
+ * @param table 表名
88
+ * @param page 页码(从1开始)
89
+ * @param pageSize 每页数量
90
+ * @param where 查询条件(可选)
91
+ * @param params 条件参数(可选)
92
+ * @param orderBy 排序(可选,如 'id DESC')
93
+ */
94
+ paginate<T = any>(table: string, page?: number, pageSize?: number, where?: string, params?: any[], orderBy?: string): Promise<QueryResult<T> & {
95
+ total?: number;
96
+ page?: number;
97
+ pageSize?: number;
98
+ }>;
99
+ /**
100
+ * 执行自定义SQL(完全控制)
101
+ * @param sql SQL语句
102
+ * @param params 参数
103
+ */
104
+ query<T = any>(sql: string, params?: any[]): Promise<QueryResult<T>>;
105
+ /**
106
+ * 执行事务
107
+ * @param callback 事务回调函数,返回结果或Promise
108
+ */
109
+ transaction<T>(callback: (connection: MYSQL.PoolConnection) => Promise<T>): Promise<QueryResult<T>>;
110
+ }
111
+ /** 数据库配置接口 */
112
+ export interface DataBaseConfig extends ModuleConfig {
113
+ host: string;
114
+ port: number;
115
+ user: string;
116
+ password: string;
117
+ database: string;
118
+ waitForConnections: boolean;
119
+ connectionLimit: number;
120
+ queueLimit: number;
121
+ tableRelativePath: string;
122
+ }
123
+ /** 查询结果包装 */
124
+ export interface QueryResult<T = any> {
125
+ success: boolean;
126
+ data?: T[];
127
+ item?: T;
128
+ affectedRows?: number;
129
+ insertId?: number;
130
+ error?: string;
131
+ raw?: any;
132
+ }
133
+ //# sourceMappingURL=DataBaseModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataBaseModule.d.ts","sourceRoot":"","sources":["../../../src/module/database/DataBaseModule.ts"],"names":[],"mappings":"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"}