@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/ASYNC-JSX-SUPPORT.md +173 -0
- package/CHANGELOG.md +14 -0
- package/lib/command.d.ts +12 -1
- package/lib/command.d.ts.map +1 -1
- package/lib/command.js +31 -0
- package/lib/command.js.map +1 -1
- package/lib/component.d.ts +1 -1
- package/lib/component.d.ts.map +1 -1
- package/lib/component.js +8 -2
- package/lib/component.js.map +1 -1
- package/lib/cron.d.ts +3 -12
- package/lib/cron.d.ts.map +1 -1
- package/lib/cron.js +31 -64
- package/lib/cron.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/jsx.d.ts +6 -5
- package/lib/jsx.d.ts.map +1 -1
- package/lib/jsx.js +51 -14
- package/lib/jsx.js.map +1 -1
- package/lib/message.d.ts +1 -1
- package/lib/message.d.ts.map +1 -1
- package/lib/plugin.d.ts +1 -1
- package/lib/plugin.d.ts.map +1 -1
- package/lib/plugin.js +13 -1
- package/lib/plugin.js.map +1 -1
- package/package.json +6 -6
- package/src/command.ts +38 -1
- package/src/component.ts +9 -5
- package/src/cron.ts +33 -70
- package/src/index.ts +1 -1
- package/src/jsx.ts +61 -18
- package/src/message.ts +1 -1
- package/src/plugin.ts +20 -2
- package/tests/command.test.ts +77 -0
- package/tests/component-new.test.ts +3 -1
- package/tests/jsx.test.ts +25 -6
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,
|
|
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
|
-
|
|
16
|
-
if (element.type === '
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
28
|
-
//
|
|
29
|
-
const
|
|
30
|
-
return
|
|
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":"
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../src/jsx.ts"],"names":[],"mappings":"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"}
|
package/lib/message.d.ts
CHANGED
package/lib/message.d.ts.map
CHANGED
|
@@ -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;
|
|
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";
|
package/lib/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,cAAc,EAAE,iBAAiB,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAC,MAAM,YAAY,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAC,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAC,GAAG,EAAC,MAAM,
|
|
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.
|
|
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
|
-
"
|
|
31
|
-
"
|
|
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)=>
|
|
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
|
-
|
|
517
|
-
|
|
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 {
|
|
1
|
+
import { Cron as Croner } from 'croner';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Cron 定时任务类
|
|
5
|
-
* 基于
|
|
5
|
+
* 基于 croner 实现的定时任务调度器 (无需 Luxon,内存占用更小)
|
|
6
6
|
*/
|
|
7
7
|
export class Cron {
|
|
8
|
-
private
|
|
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.
|
|
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.
|
|
39
|
+
if (this.job) {
|
|
37
40
|
return; // 已经在运行中
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
this.
|
|
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.
|
|
49
|
-
|
|
50
|
-
this.
|
|
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.
|
|
73
|
-
|
|
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.
|
|
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.
|
|
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
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
|
-
|
|
20
|
+
// 支持同步和异步组件 - Element 可以是 MessageComponent
|
|
21
|
+
// TypeScript 会在编译时允许异步组件,运行时会自动 await
|
|
22
|
+
type Element = SendContent | Promise<SendContent>
|
|
22
23
|
interface ElementClass {
|
|
23
|
-
render(props: any, context?: ComponentContext):
|
|
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):
|
|
42
|
+
// JSX 运行时函数 - 支持异步组件
|
|
43
|
+
export function jsx(type: JSXElementType, data: JSXProps): MessageComponent<any> {
|
|
39
44
|
return {
|
|
40
45
|
type,
|
|
41
46
|
data,
|
|
42
|
-
} as
|
|
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
|
-
|
|
54
|
-
if (element.type === '
|
|
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
|
-
|
|
59
|
-
|
|
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