@zhin.js/core 1.0.15 → 1.0.17

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/lib/jsx.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAC,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAI7D,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;AAGxG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAE;AAGtD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IACzC,QAAQ,CAAC,EAAE,WAAW,CAAC;CAC1B,CAAC;AACF,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAEvC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,GAAG,CAAC;QACV,UAAU,OAAQ,SAAQ,gBAAgB,CAAC,GAAG,CAAC;SAAG;QAClD,UAAU,YAAY;YAClB,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;SAC7E;QACD,UAAU,yBAAyB;YAC/B,IAAI,EAAE,EAAE,CAAC;SACZ;QACD,UAAU,wBAAwB;YAC9B,QAAQ,EAAE,EAAE,CAAC;SAChB;QACD,UAAU,iBAAiB;YACvB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;SAC3B;KACJ;CACJ;AAGD,wBAAgB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,cAAc,CAKxE;AAGD,wBAAgB,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,GAAG,cAAc,CAE1E;AAID,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAgBhH"}
1
+ {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAC,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAI7D,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;AAGxG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAE;AAGtD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IACzC,QAAQ,CAAC,EAAE,WAAW,CAAC;CAC1B,CAAC;AACF,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAEvC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,GAAG,CAAC;QAGV,KAAK,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QACjD,UAAU,YAAY;YAClB,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;SAC3D;QACD,UAAU,yBAAyB;YAC/B,IAAI,EAAE,EAAE,CAAC;SACZ;QACD,UAAU,wBAAwB;YAC9B,QAAQ,EAAE,EAAE,CAAC;SAChB;QACD,UAAU,iBAAiB;YACvB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;SAC3B;QAED,UAAU,mBAAmB;YACzB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;SACzB;KACJ;CACJ;AAGD,wBAAgB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAK/E;AAGD,wBAAgB,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,GAAG,cAAc,CAE1E;AAID,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoChH"}
package/lib/jsx.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { Fragment } from './component.js';
2
- // JSX 运行时函数
2
+ // JSX 运行时函数 - 支持异步组件
3
3
  export function jsx(type, data) {
4
4
  return {
5
5
  type,
@@ -12,22 +12,39 @@ export function jsxs(type, props) {
12
12
  }
13
13
  // JSX 渲染函数
14
14
  export async function renderJSX(element, context) {
15
- if (typeof element.type === 'string') {
16
- if (element.type === 'Fragment') {
15
+ try {
16
+ if (typeof element.type === 'string') {
17
+ if (element.type === 'Fragment') {
18
+ return await renderChildren(element.data.children, context);
19
+ }
20
+ // 其他内置组件处理
17
21
  return await renderChildren(element.data.children, context);
18
22
  }
19
- // 其他内置组件处理
20
- return await renderChildren(element.data.children, context);
21
- }
22
- else if (typeof element.type === 'function') {
23
- // 函数组件
24
- const component = element.type;
25
- return await component(element.data, context || {});
23
+ else if (typeof element.type === 'function') {
24
+ // 函数组件
25
+ const component = element.type;
26
+ const result = await component(element.data, context || {});
27
+ // 如果组件返回 Promise,自动 await
28
+ if (result && typeof result === 'object' && 'then' in result) {
29
+ return await result;
30
+ }
31
+ return result;
32
+ }
33
+ else {
34
+ // 类组件或其他类型
35
+ const component = element.type;
36
+ const result = await component(element.data, context || {});
37
+ // 如果组件返回 Promise,自动 await
38
+ if (result && typeof result === 'object' && 'then' in result) {
39
+ return await result;
40
+ }
41
+ return result;
42
+ }
26
43
  }
27
- else {
28
- // 类组件或其他类型
29
- const component = element.type;
30
- return await component(element.data, context || {});
44
+ catch (error) {
45
+ // 渲染错误时返回错误信息
46
+ const errorMessage = error instanceof Error ? error.message : String(error);
47
+ return `❌ 组件渲染失败: ${errorMessage}`;
31
48
  }
32
49
  }
33
50
  // 渲染子元素
@@ -45,6 +62,16 @@ async function renderChildren(children, context) {
45
62
  if (child && typeof child === 'object' && 'type' in child) {
46
63
  return await renderJSX(child, context);
47
64
  }
65
+ // 如果子元素是 Promise,自动 await
66
+ if (child && typeof child === 'object' && 'then' in child) {
67
+ try {
68
+ return await child;
69
+ }
70
+ catch (error) {
71
+ const errorMessage = error instanceof Error ? error.message : String(error);
72
+ return `❌ 组件渲染失败: ${errorMessage}`;
73
+ }
74
+ }
48
75
  return '';
49
76
  }));
50
77
  return results.join('');
@@ -52,6 +79,16 @@ async function renderChildren(children, context) {
52
79
  if (children && typeof children === 'object' && 'type' in children) {
53
80
  return await renderJSX(children, context);
54
81
  }
82
+ // 如果子元素是 Promise,自动 await
83
+ if (children && typeof children === 'object' && 'then' in children) {
84
+ try {
85
+ return await children;
86
+ }
87
+ catch (error) {
88
+ const errorMessage = error instanceof Error ? error.message : String(error);
89
+ return `❌ 组件渲染失败: ${errorMessage}`;
90
+ }
91
+ }
55
92
  return '';
56
93
  }
57
94
  //# sourceMappingURL=jsx.js.map
package/lib/jsx.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAoBvC,YAAY;AACZ,MAAM,UAAU,GAAG,CAAC,IAAoB,EAAE,IAAc;IACpD,OAAO;QACH,IAAI;QACJ,IAAI;KACW,CAAC;AACxB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,IAAI,CAAC,IAAoB,EAAE,KAAe;IACtD,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAGD,WAAW;AACX,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA8B,EAAE,OAA0B;IACtF,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,WAAW;QACX,OAAO,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO;QACP,MAAM,SAAS,GAAG,OAAO,CAAC,IAAsB,CAAC;QACjD,OAAO,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,EAAsB,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACJ,WAAW;QACX,MAAM,SAAS,GAAG,OAAO,CAAC,IAAsB,CAAC;QACjD,OAAO,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,EAAsB,CAAC,CAAC;IAC5E,CAAC;AACL,CAAC;AAED,QAAQ;AACR,KAAK,UAAU,cAAc,CAAC,QAAqB,EAAE,OAA0B;IAC3E,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChG,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;YACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBACvF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACxD,OAAO,MAAM,SAAS,CAAC,KAA8B,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACjE,OAAO,MAAM,SAAS,CAAC,QAAiC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"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"}
package/lib/message.d.ts CHANGED
@@ -5,7 +5,7 @@ import { Component } from "./component.js";
5
5
  */
6
6
  export type MessageComponent<T extends object> = {
7
7
  type: Component<T & {
8
- children?: SendContent;
8
+ children?: SendContent | Promise<SendContent>;
9
9
  }>;
10
10
  data: T;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAE;IAC3C,IAAI,EAAC,SAAS,CAAC,CAAC,GAAC;QAAC,QAAQ,CAAC,EAAC,WAAW,CAAA;KAAC,CAAC,CAAA;IACzC,IAAI,EAAC,CAAC,CAAA;CACT,CAAA;AACD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;CACrB;AACD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AACzD;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAA;IACf,IAAI,EAAC,MAAM,CAAA;IACX,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,OAAO,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,OAAO,GAAC,MAAM,GAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACjE,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AACD;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,GAAC,EAAE,IAAE,WAAW,GAAC,CAAC,CAAC;AACvD,yBAAiB,OAAO,CAAA;IACpB;;OAEG;IACH,SAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAC,CAAC,EAAC,MAAM,EAAC,WAAW,GAAE,OAAO,CAAC,CAAC,CAAC,CAE5E;CACJ"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAE;IAC3C,IAAI,EAAC,SAAS,CAAC,CAAC,GAAC;QAAC,QAAQ,CAAC,EAAC,WAAW,GAAC,OAAO,CAAC,WAAW,CAAC,CAAA;KAAC,CAAC,CAAA;IAC9D,IAAI,EAAC,CAAC,CAAA;CACT,CAAA;AACD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;CACrB;AACD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AACzD;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAA;IACf,IAAI,EAAC,MAAM,CAAA;IACX,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,OAAO,EAAC,WAAW,EAAC,KAAK,CAAC,EAAC,OAAO,GAAC,MAAM,GAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IACjE,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AACD;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,GAAC,EAAE,IAAE,WAAW,GAAC,CAAC,CAAC;AACvD,yBAAiB,OAAO,CAAA;IACpB;;OAEG;IACH,SAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAC,CAAC,EAAC,MAAM,EAAC,WAAW,GAAE,OAAO,CAAC,CAAC,CAAC,CAE5E;CACJ"}
package/lib/plugin.d.ts CHANGED
@@ -3,7 +3,7 @@ import { PermissionItem, PermissionChecker } from './permissions.js';
3
3
  import { Message } from './message.js';
4
4
  import { Schema } from '@zhin.js/hmr';
5
5
  import { Dependency, Logger } from "@zhin.js/hmr";
6
- import { App } from "./app";
6
+ import { App } from "./app.js";
7
7
  import { MessageCommand } from "./command.js";
8
8
  import { Component } from "./component.js";
9
9
  import { Prompt } from "./prompt.js";
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/lib/plugin.js CHANGED
@@ -165,7 +165,19 @@ export class Plugin extends Dependency {
165
165
  for (const middleware of this.middlewares) {
166
166
  this.dispatch('middleware.remove', middleware);
167
167
  }
168
- this.middlewares = [];
168
+ this.middlewares.length = 0; // 清空数组但保持引用
169
+ // 清理 commands
170
+ this.commands.length = 0;
171
+ // 清理权限
172
+ this.permissions.length = 0;
173
+ // 清理组件 Map
174
+ this.components.clear();
175
+ // 清理定义 Map
176
+ this.definitions.clear();
177
+ // 清理 crons(在 dispose 事件中已处理,这里确保清空)
178
+ this.crons.length = 0;
179
+ // 清空 logger 引用
180
+ this.#logger = undefined;
169
181
  // 调用父类的dispose方法
170
182
  super.dispose();
171
183
  }
package/lib/plugin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/core",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "Zhin机器人核心框架",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -24,13 +24,13 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
+ "croner": "^9.1.0",
28
+ "dotenv": "^16.3.1",
27
29
  "segment-matcher": "latest",
28
- "yaml": "^2.3.4",
29
30
  "toml": "^3.0.0",
30
- "dotenv": "^16.3.1",
31
- "cron-parser": "latest",
32
- "@zhin.js/database": "1.0.4",
33
- "@zhin.js/hmr": "1.0.7"
31
+ "yaml": "^2.3.4",
32
+ "@zhin.js/hmr": "1.0.8",
33
+ "@zhin.js/database": "1.0.4"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@zhin.js/logger": "0.1.1"
package/src/command.ts CHANGED
@@ -12,8 +12,39 @@ import { App } from "./app.js";
12
12
  */
13
13
  export class MessageCommand<T extends keyof RegisteredAdapters=keyof RegisteredAdapters> extends SegmentMatcher{
14
14
  #callbacks:MessageCommand.Callback<T>[]=[];
15
+ #desc:string[]=[];
16
+ #usage:string[]=[];
17
+ #examples:string[]=[];
15
18
  #permissions:string[]=[];
16
19
  #checkers:MessageCommand.Checker<T>[]=[]
20
+ get helpInfo():MessageCommand.HelpInfo{
21
+ return {
22
+ pattern: this.pattern,
23
+ desc: this.#desc,
24
+ usage: this.#usage,
25
+ examples: this.#examples
26
+ }
27
+ }
28
+ get help(){
29
+ return [
30
+ this.pattern,
31
+ ...this.#desc,
32
+ ...this.#usage,
33
+ ...this.#examples
34
+ ].join("\n");
35
+ }
36
+ desc(...desc:string[]){
37
+ this.#desc.push(...desc)
38
+ return this as MessageCommand<T>;
39
+ }
40
+ usage(...usage:string[]){
41
+ this.#usage.push(...usage)
42
+ return this as MessageCommand<T>;
43
+ }
44
+ examples(...examples:string[]){
45
+ this.#examples.push(...examples)
46
+ return this as MessageCommand<T>;
47
+ }
17
48
  /**
18
49
  * 注册命令回调
19
50
  * @param callback 命令处理函数
@@ -54,6 +85,12 @@ export class MessageCommand<T extends keyof RegisteredAdapters=keyof RegisteredA
54
85
  }
55
86
  }
56
87
  export namespace MessageCommand{
57
- export type Callback<T extends keyof RegisteredAdapters>=(message:Message<AdapterMessage<T>>,result:MatchResult)=>MaybePromise<SendContent|void>;
88
+ export type Callback<T extends keyof RegisteredAdapters>=(message:Message<AdapterMessage<T>>,result:MatchResult)=>SendContent|undefined|Promise<SendContent|undefined>;
58
89
  export type Checker<T extends keyof RegisteredAdapters>=(message:Message<AdapterMessage<T>>)=>MaybePromise<boolean>
90
+ export type HelpInfo={
91
+ pattern:string;
92
+ desc:string[];
93
+ usage:string[];
94
+ examples:string[];
95
+ }
59
96
  }
package/src/component.ts CHANGED
@@ -8,7 +8,7 @@ export const CapWithClose = Symbol('CapWithClose');
8
8
 
9
9
  // 函数式组件类型定义
10
10
  export type Component<P = any> = {
11
- (props: P, context: ComponentContext): Promise<SendContent>;
11
+ (props: P, context: ComponentContext): SendContent | Promise<SendContent>;
12
12
  name: string;
13
13
  }
14
14
 
@@ -512,9 +512,13 @@ export async function renderComponents(
512
512
  context,
513
513
  result
514
514
  );
515
-
516
- const rendered = await renderComponent(comp, match, componentContext);
517
- const renderedString = typeof rendered === 'string' ? rendered : segment.toString(rendered as MessageElement);
515
+ let SendContent;
516
+ try{
517
+ SendContent = await renderComponent(comp, match, componentContext);
518
+ }catch(error){
519
+ SendContent = `[${comp.name} Error: ${(error as Error)?.message||String(error)}]`
520
+ }
521
+ const renderedString = typeof SendContent === 'string' ? SendContent : segment.toString(SendContent as MessageElement);
518
522
  result = result.replace(match, renderedString);
519
523
  hasChanges = true;
520
524
  break; // 处理一个组件后重新开始循环
@@ -558,4 +562,4 @@ export const Fragment = defineComponent(async (props: { children?: SendContent }
558
562
  }, 'Fragment');
559
563
  export const Fetch = defineComponent(async ({ url }) => {
560
564
  return await fetch(url).then((r) => r.text());
561
- }, 'fetch');
565
+ }, 'fetch');
package/src/cron.ts CHANGED
@@ -1,15 +1,14 @@
1
- import { CronExpressionParser, CronExpression } from 'cron-parser';
1
+ import { Cron as Croner } from 'croner';
2
2
 
3
3
  /**
4
4
  * Cron 定时任务类
5
- * 基于 cron-parser 实现的定时任务调度器
5
+ * 基于 croner 实现的定时任务调度器 (无需 Luxon,内存占用更小)
6
6
  */
7
7
  export class Cron {
8
- private expression: CronExpression;
8
+ private job: Croner | null = null;
9
9
  private callback: () => void | Promise<void>;
10
- private timeoutId?: NodeJS.Timeout;
11
- private isRunning = false;
12
10
  private isDisposed = false;
11
+ private _cronExpression: string;
13
12
 
14
13
  /**
15
14
  * 创建一个新的 Cron 实例
@@ -18,8 +17,12 @@ export class Cron {
18
17
  */
19
18
  constructor(cronExpression: string, callback: () => void | Promise<void>) {
20
19
  try {
21
- this.expression = CronExpressionParser.parse(cronExpression);
20
+ this._cronExpression = cronExpression;
22
21
  this.callback = callback;
22
+
23
+ // 验证 cron 表达式是否有效 (不启动)
24
+ const testJob = new Croner(cronExpression, { paused: true });
25
+ testJob.stop();
23
26
  } catch (error) {
24
27
  throw new Error(`Invalid cron expression "${cronExpression}": ${(error as Error).message}`);
25
28
  }
@@ -33,23 +36,28 @@ export class Cron {
33
36
  throw new Error('Cannot run a disposed cron job');
34
37
  }
35
38
 
36
- if (this.isRunning) {
39
+ if (this.job) {
37
40
  return; // 已经在运行中
38
41
  }
39
42
 
40
- this.isRunning = true;
41
- this.scheduleNext();
43
+ // 创建并启动任务
44
+ this.job = new Croner(this._cronExpression, async () => {
45
+ try {
46
+ await this.callback();
47
+ } catch (error) {
48
+ console.error(`Error executing cron callback: ${(error as Error).message}`);
49
+ }
50
+ });
42
51
  }
43
52
 
44
53
  /**
45
54
  * 停止定时任务
46
55
  */
47
56
  stop(): void {
48
- if (this.timeoutId) {
49
- clearTimeout(this.timeoutId);
50
- this.timeoutId = undefined;
57
+ if (this.job) {
58
+ this.job.stop();
59
+ this.job = null;
51
60
  }
52
- this.isRunning = false;
53
61
  }
54
62
 
55
63
  /**
@@ -68,16 +76,23 @@ export class Cron {
68
76
  throw new Error('Cannot get next execution time for a disposed cron job');
69
77
  }
70
78
 
71
- // 重置表达式到当前时间
72
- this.expression.reset();
73
- return this.expression.next().toDate();
79
+ // 创建临时任务来获取下次执行时间
80
+ const tempJob = new Croner(this._cronExpression, { paused: true });
81
+ const nextRun = tempJob.nextRun();
82
+ tempJob.stop();
83
+
84
+ if (!nextRun) {
85
+ throw new Error('Cannot determine next execution time');
86
+ }
87
+
88
+ return nextRun;
74
89
  }
75
90
 
76
91
  /**
77
92
  * 检查任务是否正在运行
78
93
  */
79
94
  get running(): boolean {
80
- return this.isRunning;
95
+ return this.job !== null;
81
96
  }
82
97
 
83
98
  /**
@@ -91,59 +106,7 @@ export class Cron {
91
106
  * 获取原始的 cron 表达式字符串
92
107
  */
93
108
  get cronExpression(): string {
94
- return this.expression.stringify();
95
- }
96
-
97
- /**
98
- * 调度下一次执行
99
- */
100
- private scheduleNext(): void {
101
- if (!this.isRunning || this.isDisposed) {
102
- return;
103
- }
104
-
105
- try {
106
- // 重置到当前时间并获取下一次执行时间
107
- this.expression.reset();
108
- const nextDate = this.expression.next().toDate();
109
- const now = new Date();
110
- const delay = nextDate.getTime() - now.getTime();
111
-
112
- // 如果延迟时间为负数或0,说明应该立即执行
113
- if (delay <= 0) {
114
- this.executeCallback();
115
- return;
116
- }
117
-
118
- // 设置定时器
119
- this.timeoutId = setTimeout(() => {
120
- this.executeCallback();
121
- }, delay);
122
-
123
- } catch (error) {
124
- console.error(`Error scheduling next cron execution: ${(error as Error).message}`);
125
- // 如果出错,停止任务
126
- this.stop();
127
- }
128
- }
129
-
130
- /**
131
- * 执行回调函数并调度下一次执行
132
- */
133
- private async executeCallback(): Promise<void> {
134
- if (!this.isRunning || this.isDisposed) {
135
- return;
136
- }
137
-
138
- try {
139
- // 执行回调函数
140
- await this.callback();
141
- } catch (error) {
142
- console.error(`Error executing cron callback: ${(error as Error).message}`);
143
- }
144
-
145
- // 调度下一次执行
146
- this.scheduleNext();
109
+ return this._cronExpression;
147
110
  }
148
111
  }
149
112
 
package/src/index.ts CHANGED
@@ -15,4 +15,4 @@ export * from './cron.js'
15
15
  export * from '@zhin.js/database'
16
16
  export * from '@zhin.js/logger'
17
17
 
18
- export { Dependency, Schema } from '@zhin.js/hmr'
18
+ export { Dependency, Schema, usePerformanceMonitor } from '@zhin.js/hmr'
package/src/jsx.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { MaybePromise } from '@zhin.js/types';
2
1
  import { SendContent,MessageElement } from './types.js';
3
2
  import { MessageComponent } from './message.js';
4
3
  import { Component, ComponentContext } from './component.js';
@@ -18,9 +17,11 @@ export {Fragment} from './component.js'
18
17
  // 全局 JSX 命名空间
19
18
  declare global {
20
19
  namespace JSX {
21
- interface Element extends MessageComponent<any> {}
20
+ // 支持同步和异步组件 - Element 可以是 MessageComponent
21
+ // TypeScript 会在编译时允许异步组件,运行时会自动 await
22
+ type Element = SendContent | Promise<SendContent>
22
23
  interface ElementClass {
23
- render(props: any, context?: ComponentContext): MaybePromise<SendContent>;
24
+ render(props: any, context?: ComponentContext): Element;
24
25
  }
25
26
  interface ElementAttributesProperty {
26
27
  data: {};
@@ -31,15 +32,19 @@ declare global {
31
32
  interface IntrinsicElements {
32
33
  [elemName: string]: any;
33
34
  }
35
+ // 添加对异步组件的支持
36
+ interface IntrinsicAttributes {
37
+ key?: string | number;
38
+ }
34
39
  }
35
40
  }
36
41
 
37
- // JSX 运行时函数
38
- export function jsx(type: JSXElementType, data: JSXProps): MessageElement {
42
+ // JSX 运行时函数 - 支持异步组件
43
+ export function jsx(type: JSXElementType, data: JSXProps): MessageComponent<any> {
39
44
  return {
40
45
  type,
41
46
  data,
42
- } as MessageElement;
47
+ } as MessageComponent<any>;
43
48
  }
44
49
 
45
50
  // JSX Fragment 支持
@@ -50,20 +55,40 @@ export function jsxs(type: JSXElementType, props: JSXProps): MessageElement {
50
55
 
51
56
  // JSX 渲染函数
52
57
  export async function renderJSX(element: MessageComponent<any>, context?: ComponentContext): Promise<SendContent> {
53
- if (typeof element.type === 'string') {
54
- if (element.type === 'Fragment') {
58
+ try {
59
+ if (typeof element.type === 'string') {
60
+ if (element.type === 'Fragment') {
61
+ return await renderChildren(element.data.children, context);
62
+ }
63
+ // 其他内置组件处理
55
64
  return await renderChildren(element.data.children, context);
65
+ } else if (typeof element.type === 'function') {
66
+ // 函数组件
67
+ const component = element.type as Component<any>;
68
+ const result = await component(element.data, context || {} as ComponentContext);
69
+
70
+ // 如果组件返回 Promise,自动 await
71
+ if (result && typeof result === 'object' && 'then' in result) {
72
+ return await result;
73
+ }
74
+
75
+ return result;
76
+ } else {
77
+ // 类组件或其他类型
78
+ const component = element.type as Component<any>;
79
+ const result = await component(element.data, context || {} as ComponentContext);
80
+
81
+ // 如果组件返回 Promise,自动 await
82
+ if (result && typeof result === 'object' && 'then' in result) {
83
+ return await result;
84
+ }
85
+
86
+ return result;
56
87
  }
57
- // 其他内置组件处理
58
- return await renderChildren(element.data.children, context);
59
- } else if (typeof element.type === 'function') {
60
- // 函数组件
61
- const component = element.type as Component<any>;
62
- return await component(element.data, context || {} as ComponentContext);
63
- } else {
64
- // 类组件或其他类型
65
- const component = element.type as Component<any>;
66
- return await component(element.data, context || {} as ComponentContext);
88
+ } catch (error) {
89
+ // 渲染错误时返回错误信息
90
+ const errorMessage = error instanceof Error ? error.message : String(error);
91
+ return `❌ 组件渲染失败: ${errorMessage}`;
67
92
  }
68
93
  }
69
94
 
@@ -81,6 +106,15 @@ async function renderChildren(children: JSXChildren, context?: ComponentContext)
81
106
  if (child && typeof child === 'object' && 'type' in child) {
82
107
  return await renderJSX(child as MessageComponent<any>, context);
83
108
  }
109
+ // 如果子元素是 Promise,自动 await
110
+ if (child && typeof child === 'object' && 'then' in child) {
111
+ try {
112
+ return await child;
113
+ } catch (error) {
114
+ const errorMessage = error instanceof Error ? error.message : String(error);
115
+ return `❌ 组件渲染失败: ${errorMessage}`;
116
+ }
117
+ }
84
118
  return '';
85
119
  }));
86
120
  return results.join('');
@@ -88,5 +122,14 @@ async function renderChildren(children: JSXChildren, context?: ComponentContext)
88
122
  if (children && typeof children === 'object' && 'type' in children) {
89
123
  return await renderJSX(children as MessageComponent<any>, context);
90
124
  }
125
+ // 如果子元素是 Promise,自动 await
126
+ if (children && typeof children === 'object' && 'then' in children) {
127
+ try {
128
+ return await children;
129
+ } catch (error) {
130
+ const errorMessage = error instanceof Error ? error.message : String(error);
131
+ return `❌ 组件渲染失败: ${errorMessage}`;
132
+ }
133
+ }
91
134
  return '';
92
135
  }
package/src/message.ts CHANGED
@@ -5,7 +5,7 @@ import { Component } from "./component.js";
5
5
  * 消息组件类型:用于自定义消息结构
6
6
  */
7
7
  export type MessageComponent<T extends object>={
8
- type:Component<T&{children?:SendContent}>
8
+ type:Component<T&{children?:SendContent|Promise<SendContent>}>
9
9
  data:T
10
10
  }
11
11
  /**