@yumerijs/core 1.1.0-alpha.2 → 1.1.0-alpha.4

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 (44) hide show
  1. package/dist/command.d.ts +26 -0
  2. package/dist/command.js +36 -3
  3. package/dist/command.js.map +1 -1
  4. package/dist/config.d.ts +1 -1
  5. package/dist/config.js +1 -2
  6. package/dist/context.d.ts +17 -0
  7. package/dist/context.js +53 -0
  8. package/dist/context.js.map +1 -0
  9. package/dist/core.d.ts +25 -5
  10. package/dist/core.js +175 -30
  11. package/dist/core.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/logger.d.ts +4 -0
  16. package/dist/logger.js +112 -1
  17. package/dist/logger.js.map +1 -1
  18. package/dist/middleware.d.ts +2 -0
  19. package/dist/middleware.js +2 -0
  20. package/dist/middleware.js.map +1 -0
  21. package/dist/platform.js +0 -1
  22. package/dist/session.js +0 -1
  23. package/package.json +2 -2
  24. package/dist/src/command.d.ts +0 -19
  25. package/dist/src/command.js +0 -28
  26. package/dist/src/command.js.map +0 -1
  27. package/dist/src/config.d.ts +0 -133
  28. package/dist/src/config.js +0 -205
  29. package/dist/src/config.js.map +0 -1
  30. package/dist/src/core.d.ts +0 -66
  31. package/dist/src/core.js +0 -363
  32. package/dist/src/core.js.map +0 -1
  33. package/dist/src/index.d.ts +0 -11
  34. package/dist/src/index.js +0 -28
  35. package/dist/src/index.js.map +0 -1
  36. package/dist/src/logger.d.ts +0 -15
  37. package/dist/src/logger.js +0 -39
  38. package/dist/src/logger.js.map +0 -1
  39. package/dist/src/platform.d.ts +0 -159
  40. package/dist/src/platform.js +0 -195
  41. package/dist/src/platform.js.map +0 -1
  42. package/dist/src/session.d.ts +0 -29
  43. package/dist/src/session.js +0 -106
  44. package/dist/src/session.js.map +0 -1
@@ -1,159 +0,0 @@
1
- import { Session } from './session';
2
- import { Core } from './core';
3
- import { ConfigSchema } from './config';
4
- /**
5
- * Platform 基类
6
- * 作为平台接入的基础类,提供标准化的接口和通用能力
7
- * 各平台实现类需继承此类并实现所有抽象方法
8
- */
9
- export declare abstract class Platform {
10
- protected status: 'idle' | 'starting' | 'running' | 'stopping' | 'error';
11
- protected errorMessage: string | null;
12
- protected config: Record<string, any>;
13
- protected instanceId: string;
14
- protected eventListeners: Record<string, Array<(...args: any[]) => void>>;
15
- /**
16
- * 构造函数
17
- * @param config 平台配置
18
- */
19
- constructor(config?: Record<string, any>);
20
- /**
21
- * 生成平台实例ID
22
- * @returns 实例ID字符串
23
- */
24
- protected generateInstanceId(): string;
25
- /**
26
- * 向客户端发送消息
27
- * @param session 会话对象
28
- * @param data 要发送的数据
29
- * @returns 发送结果
30
- */
31
- abstract sendMessage(session: Session, data: any): any;
32
- /**
33
- * 结束会话
34
- * @param session 会话对象
35
- * @param message 结束消息
36
- * @returns 结束结果
37
- */
38
- abstract terminationSession(session: Session, message: any): any;
39
- /**
40
- * 获取平台名称
41
- * @returns 平台名称
42
- */
43
- abstract getPlatformName(): string;
44
- /**
45
- * 获取平台版本号
46
- * @returns 平台版本号
47
- */
48
- abstract getPlatformVersionCode(): string;
49
- /**
50
- * 获取平台ID
51
- * @returns 平台ID
52
- */
53
- abstract getPlatformId(): string;
54
- /**
55
- * 获取平台状态
56
- * @returns 平台状态对象
57
- */
58
- abstract getPlatformStatus(): Record<string, any>;
59
- /**
60
- * 启动平台
61
- * @param core Core实例
62
- * @returns 启动结果
63
- */
64
- abstract startPlatform(core?: Core): Promise<any>;
65
- /**
66
- * 停止平台
67
- * @returns 停止结果
68
- */
69
- abstract stopPlatform(): Promise<void>;
70
- /**
71
- * 重启平台
72
- * @param core Core实例
73
- * @returns 重启结果
74
- */
75
- restartPlatform(core?: Core): Promise<any>;
76
- /**
77
- * 设置平台配置
78
- * @param key 配置键
79
- * @param value 配置值
80
- */
81
- setConfig(key: string, value: any): void;
82
- /**
83
- * 获取平台配置
84
- * @param key 配置键
85
- * @param defaultValue 默认值
86
- * @returns 配置值
87
- */
88
- getConfig<T>(key: string, defaultValue?: T): T;
89
- /**
90
- * 获取平台实例ID
91
- * @returns 实例ID
92
- */
93
- getInstanceId(): string;
94
- /**
95
- * 获取当前平台状态
96
- * @returns 状态字符串
97
- */
98
- getStatus(): 'idle' | 'starting' | 'running' | 'stopping' | 'error';
99
- /**
100
- * 获取错误信息
101
- * @returns 错误信息
102
- */
103
- getErrorMessage(): string | null;
104
- /**
105
- * 添加平台事件监听器
106
- * @param event 事件名称
107
- * @param listener 监听器函数
108
- */
109
- on(event: string, listener: (...args: any[]) => void): void;
110
- /**
111
- * 移除平台事件监听器
112
- * @param event 事件名称
113
- * @param listener 监听器函数
114
- */
115
- off(event: string, listener: (...args: any[]) => void): void;
116
- /**
117
- * 触发平台事件
118
- * @param event 事件名称
119
- * @param args 事件参数
120
- */
121
- protected emit(event: string, ...args: any[]): void;
122
- /**
123
- * 创建会话
124
- * @param ip 客户端IP
125
- * @param cookie Cookie对象
126
- * @param query 查询参数
127
- * @returns 会话对象
128
- */
129
- createSession(ip: string, cookie: Record<string, string>, query?: Record<string, string>): Session;
130
- /**
131
- * 处理会话数据
132
- * @param session 会话对象
133
- * @param data 会话数据
134
- * @returns 处理结果
135
- */
136
- processSessionData(session: Session, data: any): any;
137
- /**
138
- * 验证会话
139
- * @param session 会话对象
140
- * @returns 验证结果
141
- */
142
- validateSession(session: Session): boolean;
143
- /**
144
- * 获取平台支持的MIME类型
145
- * @returns MIME类型数组
146
- */
147
- getSupportedMimeTypes(): string[];
148
- /**
149
- * 获取平台元数据
150
- * @returns 平台元数据
151
- */
152
- getMetadata(): Record<string, any>;
153
- /**
154
- * 获取平台配置模式
155
- * 子类可以覆盖此方法提供自定义配置模式
156
- * @returns 配置模式对象
157
- */
158
- static getConfigSchema(): Record<string, ConfigSchema>;
159
- }
@@ -1,195 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Platform = void 0;
4
- const session_1 = require("./session");
5
- /**
6
- * Platform 基类
7
- * 作为平台接入的基础类,提供标准化的接口和通用能力
8
- * 各平台实现类需继承此类并实现所有抽象方法
9
- */
10
- class Platform {
11
- /**
12
- * 构造函数
13
- * @param config 平台配置
14
- */
15
- constructor(config) {
16
- // 平台状态
17
- this.status = 'idle';
18
- // 平台错误信息
19
- this.errorMessage = null;
20
- // 平台配置
21
- this.config = {};
22
- // 平台实例ID
23
- this.instanceId = '';
24
- // 平台事件监听器
25
- this.eventListeners = {};
26
- if (config) {
27
- this.config = { ...config };
28
- }
29
- this.instanceId = this.generateInstanceId();
30
- }
31
- /**
32
- * 生成平台实例ID
33
- * @returns 实例ID字符串
34
- */
35
- generateInstanceId() {
36
- return `${this.getPlatformId()}-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
37
- }
38
- /**
39
- * 重启平台
40
- * @param core Core实例
41
- * @returns 重启结果
42
- */
43
- async restartPlatform(core) {
44
- await this.stopPlatform();
45
- return this.startPlatform(core);
46
- }
47
- /**
48
- * 设置平台配置
49
- * @param key 配置键
50
- * @param value 配置值
51
- */
52
- setConfig(key, value) {
53
- this.config[key] = value;
54
- }
55
- /**
56
- * 获取平台配置
57
- * @param key 配置键
58
- * @param defaultValue 默认值
59
- * @returns 配置值
60
- */
61
- getConfig(key, defaultValue) {
62
- return (this.config[key] !== undefined) ? this.config[key] : defaultValue;
63
- }
64
- /**
65
- * 获取平台实例ID
66
- * @returns 实例ID
67
- */
68
- getInstanceId() {
69
- return this.instanceId;
70
- }
71
- /**
72
- * 获取当前平台状态
73
- * @returns 状态字符串
74
- */
75
- getStatus() {
76
- return this.status;
77
- }
78
- /**
79
- * 获取错误信息
80
- * @returns 错误信息
81
- */
82
- getErrorMessage() {
83
- return this.errorMessage;
84
- }
85
- /**
86
- * 添加平台事件监听器
87
- * @param event 事件名称
88
- * @param listener 监听器函数
89
- */
90
- on(event, listener) {
91
- if (!this.eventListeners[event]) {
92
- this.eventListeners[event] = [];
93
- }
94
- this.eventListeners[event].push(listener);
95
- }
96
- /**
97
- * 移除平台事件监听器
98
- * @param event 事件名称
99
- * @param listener 监听器函数
100
- */
101
- off(event, listener) {
102
- if (!this.eventListeners[event]) {
103
- return;
104
- }
105
- this.eventListeners[event] = this.eventListeners[event].filter(l => l !== listener);
106
- }
107
- /**
108
- * 触发平台事件
109
- * @param event 事件名称
110
- * @param args 事件参数
111
- */
112
- emit(event, ...args) {
113
- if (!this.eventListeners[event]) {
114
- return;
115
- }
116
- for (const listener of this.eventListeners[event]) {
117
- try {
118
- listener(...args);
119
- }
120
- catch (error) {
121
- console.error(`Error in platform event listener for "${event}":`, error);
122
- }
123
- }
124
- }
125
- /**
126
- * 创建会话
127
- * @param ip 客户端IP
128
- * @param cookie Cookie对象
129
- * @param query 查询参数
130
- * @returns 会话对象
131
- */
132
- createSession(ip, cookie, query) {
133
- return new session_1.Session(ip, cookie, this, query);
134
- }
135
- /**
136
- * 处理会话数据
137
- * @param session 会话对象
138
- * @param data 会话数据
139
- * @returns 处理结果
140
- */
141
- processSessionData(session, data) {
142
- // 默认实现,子类可覆盖
143
- return data;
144
- }
145
- /**
146
- * 验证会话
147
- * @param session 会话对象
148
- * @returns 验证结果
149
- */
150
- validateSession(session) {
151
- // 默认实现,子类可覆盖
152
- return true;
153
- }
154
- /**
155
- * 获取平台支持的MIME类型
156
- * @returns MIME类型数组
157
- */
158
- getSupportedMimeTypes() {
159
- // 默认实现,子类可覆盖
160
- return [
161
- 'text/plain',
162
- 'text/html',
163
- 'application/json',
164
- 'application/xml',
165
- 'image/png',
166
- 'image/jpeg',
167
- 'application/pdf'
168
- ];
169
- }
170
- /**
171
- * 获取平台元数据
172
- * @returns 平台元数据
173
- */
174
- getMetadata() {
175
- return {
176
- id: this.getPlatformId(),
177
- name: this.getPlatformName(),
178
- version: this.getPlatformVersionCode(),
179
- status: this.getStatus(),
180
- instanceId: this.getInstanceId(),
181
- supportedMimeTypes: this.getSupportedMimeTypes(),
182
- ...this.getPlatformStatus()
183
- };
184
- }
185
- /**
186
- * 获取平台配置模式
187
- * 子类可以覆盖此方法提供自定义配置模式
188
- * @returns 配置模式对象
189
- */
190
- static getConfigSchema() {
191
- return {};
192
- }
193
- }
194
- exports.Platform = Platform;
195
- //# sourceMappingURL=platform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * @time: 2025/03/26 12:36
3
- * @author: FireGuo
4
- * WindyPear-Team All right reserved
5
- **/
6
- import { Platform } from './platform';
7
- export declare class Session {
8
- ip: string;
9
- cookie: Record<string, string>;
10
- query: Record<string, string> | undefined;
11
- sessionid: string;
12
- data: Record<string, any>;
13
- newCookie: Record<string, string>;
14
- head: Record<string, any>;
15
- status: number;
16
- body: any;
17
- platform: Platform;
18
- properties?: Record<string, any>;
19
- constructor(ip: string, cookie: Record<string, string>, platform: Platform, query?: Record<string, string>);
20
- private generateId;
21
- private md5;
22
- setData(key: string, value: any): void;
23
- deleteData(key: string): void;
24
- clearData(): void;
25
- destroy(): void;
26
- setMime(mimeType: 'png' | 'jpg' | 'jpeg' | 'pdf' | 'plain' | 'html' | 'json' | 'xml' | string): void;
27
- send(data: any): any;
28
- endsession(message: any): any;
29
- }
@@ -1,106 +0,0 @@
1
- "use strict";
2
- /**
3
- * @time: 2025/03/26 12:36
4
- * @author: FireGuo
5
- * WindyPear-Team All right reserved
6
- **/
7
- var __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
9
- };
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.Session = void 0;
12
- const crypto_1 = __importDefault(require("crypto"));
13
- class Session {
14
- /*
15
- * @ip: string,用户IP
16
- * @cookie: string,会话cookie
17
- * @query: string,请求字符串
18
- */
19
- constructor(ip, cookie, platform, query) {
20
- this.data = {};
21
- this.newCookie = {};
22
- this.head = {};
23
- this.status = 200;
24
- this.properties = {};
25
- this.ip = ip;
26
- this.cookie = cookie;
27
- this.query = query;
28
- this.platform = platform;
29
- this.head['Content-Type'] = 'text/plain';
30
- if (cookie.sessionid) {
31
- this.sessionid = cookie.sessionid;
32
- }
33
- else {
34
- this.sessionid = this.generateId(this.ip);
35
- this.newCookie.sessionid = this.sessionid;
36
- }
37
- }
38
- // 生成 sessionid
39
- /*
40
- * @ip: string,用户IP
41
- * @option: string,选项
42
- */
43
- generateId(ip, option) {
44
- const sessionId = this.md5(ip + Date.now().toString() + Math.random().toString()); // 添加随机性
45
- return sessionId;
46
- }
47
- // MD5 加密
48
- md5(str) {
49
- const hash = crypto_1.default.createHash('md5');
50
- hash.update(str);
51
- return hash.digest('hex');
52
- }
53
- // 设置会话数据
54
- setData(key, value) {
55
- this.data[key] = value;
56
- }
57
- // 删除会话数据
58
- deleteData(key) {
59
- delete this.data[key];
60
- }
61
- // 清空会话数据
62
- clearData() {
63
- this.data = {};
64
- }
65
- // 销毁会话
66
- destroy() {
67
- this.clearData(); // 清理会话数据
68
- }
69
- setMime(mimeType) {
70
- switch (mimeType) {
71
- case 'png':
72
- this.head['Content-Type'] = 'image/png';
73
- break;
74
- case 'jpg':
75
- case 'jpeg':
76
- this.head['Content-Type'] = 'image/jpeg';
77
- break;
78
- case 'pdf':
79
- this.head['Content-Type'] = 'application/pdf';
80
- break;
81
- case 'plain':
82
- this.head['Content-Type'] = 'text/plain';
83
- break;
84
- case 'html':
85
- this.head['Content-Type'] = 'text/html';
86
- break;
87
- case 'json':
88
- this.head['Content-Type'] = 'application/json';
89
- break;
90
- case 'xml':
91
- this.head['Content-Type'] = 'application/xml';
92
- break;
93
- default:
94
- this.head['Content-Type'] = mimeType;
95
- break;
96
- }
97
- }
98
- send(data) {
99
- return this.platform.sendMessage(this, data);
100
- }
101
- endsession(message) {
102
- return this.platform.terminationSession(this, message);
103
- }
104
- }
105
- exports.Session = Session;
106
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}