@zhin.js/core 1.0.0 → 1.0.2
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/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +295 -74
- package/lib/adapter.d.ts +39 -0
- package/lib/adapter.d.ts.map +1 -0
- package/{dist → lib}/adapter.js +20 -2
- package/lib/adapter.js.map +1 -0
- package/lib/app.d.ts +115 -0
- package/lib/app.d.ts.map +1 -0
- package/{dist → lib}/app.js +148 -78
- package/lib/app.js.map +1 -0
- package/lib/bot.d.ts +31 -0
- package/lib/bot.d.ts.map +1 -0
- package/lib/command.d.ts +32 -0
- package/lib/command.d.ts.map +1 -0
- package/lib/command.js +46 -0
- package/lib/command.js.map +1 -0
- package/lib/component.d.ts +27 -0
- package/lib/component.d.ts.map +1 -0
- package/lib/component.js +469 -0
- package/lib/component.js.map +1 -0
- package/{dist → lib}/config.d.ts.map +1 -1
- package/{dist → lib}/config.js +6 -9
- package/lib/config.js.map +1 -0
- package/lib/cron.d.ts +81 -0
- package/lib/cron.d.ts.map +1 -0
- package/lib/cron.js +159 -0
- package/lib/cron.js.map +1 -0
- package/lib/errors.d.ts +165 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +306 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +17 -0
- package/lib/index.js.map +1 -0
- package/lib/jsx-runtime.d.ts +12 -0
- package/lib/jsx-runtime.d.ts.map +1 -0
- package/lib/jsx-runtime.js +11 -0
- package/lib/jsx-runtime.js.map +1 -0
- package/lib/jsx.d.ts +32 -0
- package/lib/jsx.d.ts.map +1 -0
- package/lib/jsx.js +57 -0
- package/lib/jsx.js.map +1 -0
- package/lib/message.d.ts +47 -0
- package/lib/message.d.ts.map +1 -0
- package/lib/message.js +11 -0
- package/lib/message.js.map +1 -0
- package/lib/plugin.d.ts +50 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +170 -0
- package/lib/plugin.js.map +1 -0
- package/lib/prompt.d.ts +116 -0
- package/lib/prompt.d.ts.map +1 -0
- package/lib/prompt.js +240 -0
- package/lib/prompt.js.map +1 -0
- package/lib/schema.d.ts +83 -0
- package/lib/schema.d.ts.map +1 -0
- package/lib/schema.js +245 -0
- package/lib/schema.js.map +1 -0
- package/{dist → lib}/types-generator.d.ts.map +1 -1
- package/{dist → lib}/types-generator.js +6 -3
- package/lib/types-generator.js.map +1 -0
- package/lib/types.d.ts +121 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/utils.d.ts +52 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +340 -0
- package/lib/utils.js.map +1 -0
- package/package.json +23 -9
- package/src/adapter.ts +25 -9
- package/src/app.ts +363 -258
- package/src/bot.ts +29 -8
- package/src/command.ts +50 -0
- package/src/component.ts +561 -0
- package/src/config.ts +9 -12
- package/src/cron.ts +176 -0
- package/src/errors.ts +365 -0
- package/src/index.ts +16 -13
- package/src/jsx-runtime.ts +12 -0
- package/src/jsx.d.ts +52 -0
- package/src/jsx.ts +92 -0
- package/src/message.ts +47 -0
- package/src/plugin.ts +148 -66
- package/src/prompt.ts +290 -0
- package/src/schema.ts +273 -0
- package/src/types-generator.ts +7 -3
- package/src/types.ts +80 -31
- package/src/utils.ts +313 -0
- package/tests/adapter.test.ts +36 -22
- package/tests/app.test.ts +30 -0
- package/tests/command.test.ts +545 -0
- package/tests/component-new.test.ts +348 -0
- package/tests/config.test.ts +1 -1
- package/tests/errors.test.ts +311 -0
- package/tests/expression-evaluation.test.ts +258 -0
- package/tests/message.test.ts +402 -0
- package/tests/plugin.test.ts +284 -143
- package/tests/utils.test.ts +80 -0
- package/tsconfig.json +3 -4
- package/dist/adapter.d.ts +0 -22
- package/dist/adapter.d.ts.map +0 -1
- package/dist/adapter.js.map +0 -1
- package/dist/app.d.ts +0 -69
- package/dist/app.d.ts.map +0 -1
- package/dist/app.js.map +0 -1
- package/dist/bot.d.ts +0 -9
- package/dist/bot.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts +0 -3
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -3
- package/dist/logger.js.map +0 -1
- package/dist/plugin.d.ts +0 -41
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -95
- package/dist/plugin.js.map +0 -1
- package/dist/types-generator.js.map +0 -1
- package/dist/types.d.ts +0 -69
- package/dist/types.d.ts.map +0 -1
- package/src/logger.ts +0 -3
- package/tests/logger.test.ts +0 -170
- package/tsconfig.tsbuildinfo +0 -1
- /package/{dist → lib}/bot.js +0 -0
- /package/{dist → lib}/bot.js.map +0 -0
- /package/{dist → lib}/config.d.ts +0 -0
- /package/{dist → lib}/types-generator.d.ts +0 -0
- /package/{dist → lib}/types.js +0 -0
- /package/{dist → lib}/types.js.map +0 -0
package/lib/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Core exports
|
|
2
|
+
export * from './app.js';
|
|
3
|
+
export * from './bot.js';
|
|
4
|
+
export * from './plugin.js';
|
|
5
|
+
export * from './command.js';
|
|
6
|
+
export * from './component.js';
|
|
7
|
+
export * from './adapter.js';
|
|
8
|
+
export * from './config.js';
|
|
9
|
+
export * from './message.js';
|
|
10
|
+
// Logger moved to @zhin.js/logger package
|
|
11
|
+
export * from './types.js';
|
|
12
|
+
export * from './utils.js';
|
|
13
|
+
export * from './errors.js'; // 导出错误处理系统
|
|
14
|
+
export * from './cron.js';
|
|
15
|
+
export * from '@zhin.js/database';
|
|
16
|
+
export { Dependency } from '@zhin.js/hmr';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,0CAA0C;AAC1C,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA,CAAE,WAAW;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment, renderJSX } from './jsx.js';
|
|
2
|
+
export { jsx, jsxs, Fragment, renderJSX };
|
|
3
|
+
declare const _default: {
|
|
4
|
+
jsx: typeof jsx;
|
|
5
|
+
jsxs: typeof jsxs;
|
|
6
|
+
Fragment: import("./component.js").Component<{
|
|
7
|
+
children?: import("./types.js").SendContent;
|
|
8
|
+
}>;
|
|
9
|
+
renderJSX: typeof renderJSX;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=jsx-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;;;;;;;;;AAG1C,wBAKE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../src/jsx-runtime.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAE1C,eAAe;AACf,eAAe;IACX,GAAG;IACH,IAAI;IACJ,QAAQ;IACR,SAAS;CACZ,CAAC"}
|
package/lib/jsx.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { MaybePromise } from '@zhin.js/types';
|
|
2
|
+
import { SendContent, MessageElement } from './types.js';
|
|
3
|
+
import { MessageComponent } from './message.js';
|
|
4
|
+
import { Component, ComponentContext } from './component.js';
|
|
5
|
+
export type JSXChildren = MessageElement | string | number | boolean | null | undefined | JSXChildren[];
|
|
6
|
+
export type JSXElementType = string | Component<any>;
|
|
7
|
+
export type JSXProps = Record<string, any> & {
|
|
8
|
+
children?: JSXChildren;
|
|
9
|
+
};
|
|
10
|
+
export { Fragment } from './component.js';
|
|
11
|
+
declare global {
|
|
12
|
+
namespace JSX {
|
|
13
|
+
interface Element extends MessageComponent<any> {
|
|
14
|
+
}
|
|
15
|
+
interface ElementClass {
|
|
16
|
+
render(props: any, context?: ComponentContext): MaybePromise<SendContent>;
|
|
17
|
+
}
|
|
18
|
+
interface ElementAttributesProperty {
|
|
19
|
+
data: {};
|
|
20
|
+
}
|
|
21
|
+
interface ElementChildrenAttribute {
|
|
22
|
+
children: {};
|
|
23
|
+
}
|
|
24
|
+
interface IntrinsicElements {
|
|
25
|
+
[elemName: string]: any;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export declare function jsx(type: JSXElementType, data: JSXProps): MessageElement;
|
|
30
|
+
export declare function jsxs(type: JSXElementType, props: JSXProps): MessageElement;
|
|
31
|
+
export declare function renderJSX(element: MessageComponent<any>, context?: ComponentContext): Promise<SendContent>;
|
|
32
|
+
//# sourceMappingURL=jsx.d.ts.map
|
package/lib/jsx.d.ts.map
ADDED
|
@@ -0,0 +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"}
|
package/lib/jsx.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export { Fragment } from './component.js';
|
|
2
|
+
// JSX 运行时函数
|
|
3
|
+
export function jsx(type, data) {
|
|
4
|
+
return {
|
|
5
|
+
type,
|
|
6
|
+
data,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
// JSX Fragment 支持
|
|
10
|
+
export function jsxs(type, props) {
|
|
11
|
+
return jsx(type, props);
|
|
12
|
+
}
|
|
13
|
+
// JSX 渲染函数
|
|
14
|
+
export async function renderJSX(element, context) {
|
|
15
|
+
if (typeof element.type === 'string') {
|
|
16
|
+
if (element.type === 'Fragment') {
|
|
17
|
+
return await renderChildren(element.data.children, context);
|
|
18
|
+
}
|
|
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 || {});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// 类组件或其他类型
|
|
29
|
+
const component = element.type;
|
|
30
|
+
return await component(element.data, context || {});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// 渲染子元素
|
|
34
|
+
async function renderChildren(children, context) {
|
|
35
|
+
if (children == null)
|
|
36
|
+
return '';
|
|
37
|
+
if (typeof children === 'string' || typeof children === 'number' || typeof children === 'boolean') {
|
|
38
|
+
return String(children);
|
|
39
|
+
}
|
|
40
|
+
if (Array.isArray(children)) {
|
|
41
|
+
const results = await Promise.all(children.map(async (child) => {
|
|
42
|
+
if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') {
|
|
43
|
+
return String(child);
|
|
44
|
+
}
|
|
45
|
+
if (child && typeof child === 'object' && 'type' in child) {
|
|
46
|
+
return await renderJSX(child, context);
|
|
47
|
+
}
|
|
48
|
+
return '';
|
|
49
|
+
}));
|
|
50
|
+
return results.join('');
|
|
51
|
+
}
|
|
52
|
+
if (children && typeof children === 'object' && 'type' in children) {
|
|
53
|
+
return await renderJSX(children, context);
|
|
54
|
+
}
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=jsx.js.map
|
package/lib/jsx.js.map
ADDED
|
@@ -0,0 +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"}
|
package/lib/message.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MessageElement, MessageSender, SendContent } from "./types";
|
|
2
|
+
import { Component } from "./component.js";
|
|
3
|
+
/**
|
|
4
|
+
* 消息组件类型:用于自定义消息结构
|
|
5
|
+
*/
|
|
6
|
+
export type MessageComponent<T extends object> = {
|
|
7
|
+
type: Component<T & {
|
|
8
|
+
children?: SendContent;
|
|
9
|
+
}>;
|
|
10
|
+
data: T;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 消息频道信息
|
|
14
|
+
*/
|
|
15
|
+
export interface MessageChannel {
|
|
16
|
+
id: string;
|
|
17
|
+
type: MessageType;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 消息类型枚举
|
|
21
|
+
*/
|
|
22
|
+
export type MessageType = 'group' | 'private' | 'channel';
|
|
23
|
+
/**
|
|
24
|
+
* 消息基础结构
|
|
25
|
+
*/
|
|
26
|
+
export interface MessageBase {
|
|
27
|
+
$id: string;
|
|
28
|
+
$adapter: string;
|
|
29
|
+
$bot: string;
|
|
30
|
+
$content: MessageElement[];
|
|
31
|
+
$sender: MessageSender;
|
|
32
|
+
$reply(content: SendContent, quote?: boolean | string): Promise<void>;
|
|
33
|
+
$channel: MessageChannel;
|
|
34
|
+
$timestamp: number;
|
|
35
|
+
$raw: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 完整消息类型,支持扩展
|
|
39
|
+
*/
|
|
40
|
+
export type Message<T extends object = {}> = MessageBase & T;
|
|
41
|
+
export declare namespace Message {
|
|
42
|
+
/**
|
|
43
|
+
* 工具方法:合并自定义字段与基础消息结构
|
|
44
|
+
*/
|
|
45
|
+
function from<T extends object>(input: T, format: MessageBase): Message<T>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +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,IAAI,CAAC,CAAA;IAC/D,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/message.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAuCA,MAAM,KAAW,OAAO,CAOvB;AAPD,WAAiB,OAAO;IACpB;;OAEG;IACH,SAAgB,IAAI,CAAmB,KAAO,EAAC,MAAkB;QAC7D,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAFe,YAAI,OAEnB,CAAA;AACL,CAAC,EAPgB,OAAO,KAAP,OAAO,QAOvB"}
|
package/lib/plugin.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { MaybePromise } from '@zhin.js/types';
|
|
2
|
+
import { AdapterMessage, BeforeSendHandler, RegisteredAdapter, SendOptions } from "./types.js";
|
|
3
|
+
import { Message } from './message.js';
|
|
4
|
+
import { Dependency, Logger } from "@zhin.js/hmr";
|
|
5
|
+
import { App } from "./app";
|
|
6
|
+
import { MessageCommand } from "./command.js";
|
|
7
|
+
import { Component } from "./component.js";
|
|
8
|
+
import { Prompt } from "./prompt.js";
|
|
9
|
+
import { Schema } from '@zhin.js/database';
|
|
10
|
+
import { Cron } from './cron.js';
|
|
11
|
+
/** 消息中间件函数 */
|
|
12
|
+
export type MessageMiddleware<P extends RegisteredAdapter = RegisteredAdapter> = (message: Message<AdapterMessage<P>>, next: () => Promise<void>) => MaybePromise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* 插件类:继承自 Dependency,提供机器人特定功能与生命周期管理。
|
|
15
|
+
* 支持命令注册、中间件、组件、定时任务、模型等。
|
|
16
|
+
*/
|
|
17
|
+
export declare class Plugin extends Dependency<Plugin> {
|
|
18
|
+
#private;
|
|
19
|
+
middlewares: MessageMiddleware<any>[];
|
|
20
|
+
components: Map<string, Component<any>>;
|
|
21
|
+
schemas: Map<string, Schema<any>>;
|
|
22
|
+
commands: MessageCommand[];
|
|
23
|
+
crons: Cron[];
|
|
24
|
+
/**
|
|
25
|
+
* 构造函数:初始化插件,注册消息事件、命令中间件、资源清理等
|
|
26
|
+
* @param parent 所属 App 实例
|
|
27
|
+
* @param name 插件名
|
|
28
|
+
* @param filePath 插件文件路径
|
|
29
|
+
*/
|
|
30
|
+
constructor(parent: Dependency<Plugin>, name: string, filePath: string);
|
|
31
|
+
cron(cronExpression: string, callback: () => void): this;
|
|
32
|
+
defineModel<S extends Record<string, any>>(name: string, schema: Schema<S>): this;
|
|
33
|
+
beforeSend(handler: BeforeSendHandler): void;
|
|
34
|
+
before(event: string, listener: (...args: any[]) => any): void;
|
|
35
|
+
/** 获取所属的App实例 */
|
|
36
|
+
get app(): App;
|
|
37
|
+
get logger(): Logger;
|
|
38
|
+
/** 添加组件 */
|
|
39
|
+
addComponent<T = any>(component: Component<T>): void;
|
|
40
|
+
/** 添加中间件 */
|
|
41
|
+
addCommand(command: MessageCommand): void;
|
|
42
|
+
/** 添加中间件 */
|
|
43
|
+
addMiddleware<T extends RegisteredAdapter>(middleware: MessageMiddleware<T>): () => void;
|
|
44
|
+
prompt<P extends RegisteredAdapter>(message: Message<AdapterMessage<P>>): Prompt<P>;
|
|
45
|
+
/** 发送消息 */
|
|
46
|
+
sendMessage(options: SendOptions): Promise<void>;
|
|
47
|
+
/** 销毁插件 */
|
|
48
|
+
dispose(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAC,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAA;AACpC,OAAO,EAAC,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAG3D,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAC,MAAM,WAAW,CAAC;AAEhC,cAAc;AACd,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAC,iBAAiB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;AAOtK;;;GAGG;AACH,qBAAa,MAAO,SAAQ,UAAU,CAAC,MAAM,CAAC;;IAC1C,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAM;IAC3C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAa;IACpD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAW;IAC3C,QAAQ,EAAC,cAAc,EAAE,CAAI;IAC7B,KAAK,EAAC,IAAI,EAAE,CAAI;IAEhB;;;;;OAKG;gBACS,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAsDtE,IAAI,CAAC,cAAc,EAAC,MAAM,EAAC,QAAQ,EAAC,MAAI,IAAI;IAoB5C,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAC,GAAG,CAAC,EAAE,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAC;IAItE,UAAU,CAAC,OAAO,EAAC,iBAAiB;IAGpC,MAAM,CAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAC,CAAC,GAAG,IAAI,EAAC,GAAG,EAAE,KAAG,GAAG;IAGjD,iBAAiB;IACjB,IAAI,GAAG,IAAI,GAAG,CAEb;IACD,IAAI,MAAM,IAAI,MAAM,CASnB;IACD,WAAW;IACX,YAAY,CAAC,CAAC,GAAC,GAAG,EAAE,SAAS,EAAC,SAAS,CAAC,CAAC,CAAC;IAG1C,YAAY;IACZ,UAAU,CAAC,OAAO,EAAC,cAAc;IAIjC,YAAY;IACZ,aAAa,CAAC,CAAC,SAAS,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAO3E,MAAM,CAAC,CAAC,SAAS,iBAAiB,EAAE,OAAO,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAMtE,WAAW;IACL,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBtD,WAAW;IACX,OAAO,IAAI,IAAI;CAqBlB"}
|
package/lib/plugin.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// 插件类型定义(定义插件中间件、生命周期、命令、组件等核心类型)
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import { Dependency, } from "@zhin.js/hmr";
|
|
5
|
+
import { renderComponents } from "./component.js";
|
|
6
|
+
import { PluginError, MessageError, errorManager } from './errors.js';
|
|
7
|
+
import { remove } from "./utils.js";
|
|
8
|
+
import { Prompt } from "./prompt.js";
|
|
9
|
+
import { Cron } from './cron.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Plugin 类(插件的生命周期、命令/中间件/组件/定时任务等管理)
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* 插件类:继承自 Dependency,提供机器人特定功能与生命周期管理。
|
|
15
|
+
* 支持命令注册、中间件、组件、定时任务、模型等。
|
|
16
|
+
*/
|
|
17
|
+
export class Plugin extends Dependency {
|
|
18
|
+
middlewares = [];
|
|
19
|
+
components = new Map();
|
|
20
|
+
schemas = new Map();
|
|
21
|
+
commands = [];
|
|
22
|
+
crons = [];
|
|
23
|
+
#logger;
|
|
24
|
+
/**
|
|
25
|
+
* 构造函数:初始化插件,注册消息事件、命令中间件、资源清理等
|
|
26
|
+
* @param parent 所属 App 实例
|
|
27
|
+
* @param name 插件名
|
|
28
|
+
* @param filePath 插件文件路径
|
|
29
|
+
*/
|
|
30
|
+
constructor(parent, name, filePath) {
|
|
31
|
+
super(parent, name, filePath);
|
|
32
|
+
// 绑定消息事件,自动分发到命令和中间件
|
|
33
|
+
this.on('message.receive', this.#handleMessage.bind(this));
|
|
34
|
+
// 注册命令处理为默认中间件
|
|
35
|
+
this.addMiddleware(async (message, next) => {
|
|
36
|
+
for (const command of this.commands) {
|
|
37
|
+
const result = await command.handle(message);
|
|
38
|
+
if (result)
|
|
39
|
+
message.$reply(result);
|
|
40
|
+
}
|
|
41
|
+
return next();
|
|
42
|
+
});
|
|
43
|
+
// 发送前渲染组件
|
|
44
|
+
this.beforeSend((options) => renderComponents(this.components, options));
|
|
45
|
+
// 资源清理:卸载时清空模型、定时任务等
|
|
46
|
+
this.on('dispose', () => {
|
|
47
|
+
for (const name of this.schemas.keys()) {
|
|
48
|
+
this.app.database?.models.delete(name);
|
|
49
|
+
}
|
|
50
|
+
this.schemas.clear();
|
|
51
|
+
for (const cron of this.crons) {
|
|
52
|
+
cron.dispose();
|
|
53
|
+
}
|
|
54
|
+
this.crons.length = 0;
|
|
55
|
+
});
|
|
56
|
+
// 挂载时启动定时任务
|
|
57
|
+
this.on('mounted', () => {
|
|
58
|
+
for (const cron of this.crons) {
|
|
59
|
+
cron.run();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async #handleMessage(message) {
|
|
64
|
+
try {
|
|
65
|
+
await this.#runMiddlewares(message, 0);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
const messageError = new MessageError(`消息处理失败: ${error.message}`, message.$id, message.$channel.id, { pluginName: this.name, originalError: error });
|
|
69
|
+
await errorManager.handle(messageError);
|
|
70
|
+
// 可选:发送错误回复给用户
|
|
71
|
+
try {
|
|
72
|
+
await message.$reply('抱歉,处理您的消息时出现了错误。');
|
|
73
|
+
}
|
|
74
|
+
catch (replyError) {
|
|
75
|
+
// 静默处理回复错误,避免错误循环
|
|
76
|
+
// console.error 已替换为注释
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
cron(cronExpression, callback) {
|
|
81
|
+
const cronJob = new Cron(cronExpression, callback);
|
|
82
|
+
this.crons.push(cronJob);
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
async #runMiddlewares(message, index) {
|
|
86
|
+
if (index >= this.middlewares.length)
|
|
87
|
+
return;
|
|
88
|
+
const middleware = this.middlewares[index];
|
|
89
|
+
try {
|
|
90
|
+
await middleware(message, () => this.#runMiddlewares(message, index + 1));
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
throw new PluginError(`中间件执行失败: ${error.message}`, this.name, { middlewareIndex: index, originalError: error });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
defineModel(name, schema) {
|
|
97
|
+
this.schemas.set(name, schema);
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
beforeSend(handler) {
|
|
101
|
+
this.before('message.send', handler);
|
|
102
|
+
}
|
|
103
|
+
before(event, listener) {
|
|
104
|
+
this.on(`before-${event}`, listener);
|
|
105
|
+
}
|
|
106
|
+
/** 获取所属的App实例 */
|
|
107
|
+
get app() {
|
|
108
|
+
return this.parent;
|
|
109
|
+
}
|
|
110
|
+
get logger() {
|
|
111
|
+
if (this.#logger)
|
|
112
|
+
return this.#logger;
|
|
113
|
+
const names = [];
|
|
114
|
+
let temp = this;
|
|
115
|
+
while (temp.parent) {
|
|
116
|
+
names.unshift(temp.name);
|
|
117
|
+
temp = temp.parent;
|
|
118
|
+
}
|
|
119
|
+
return temp.getLogger(names.join('/'));
|
|
120
|
+
}
|
|
121
|
+
/** 添加组件 */
|
|
122
|
+
addComponent(component) {
|
|
123
|
+
this.components.set(component.name, component);
|
|
124
|
+
}
|
|
125
|
+
/** 添加中间件 */
|
|
126
|
+
addCommand(command) {
|
|
127
|
+
this.commands.push(command);
|
|
128
|
+
this.dispatch('command.add', command);
|
|
129
|
+
}
|
|
130
|
+
/** 添加中间件 */
|
|
131
|
+
addMiddleware(middleware) {
|
|
132
|
+
this.middlewares.push(middleware);
|
|
133
|
+
this.dispatch('middleware.add', middleware);
|
|
134
|
+
return () => {
|
|
135
|
+
remove(this.middlewares, middleware);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
prompt(message) {
|
|
139
|
+
return new Prompt(this, message);
|
|
140
|
+
}
|
|
141
|
+
/** 发送消息 */
|
|
142
|
+
async sendMessage(options) {
|
|
143
|
+
try {
|
|
144
|
+
await this.app.sendMessage(options);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const messageError = new MessageError(`发送消息失败: ${error.message}`, undefined, options.channel_id, { pluginName: this.name, sendOptions: options, originalError: error });
|
|
148
|
+
await errorManager.handle(messageError);
|
|
149
|
+
throw messageError;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/** 销毁插件 */
|
|
153
|
+
dispose() {
|
|
154
|
+
try {
|
|
155
|
+
// 移除所有中间件
|
|
156
|
+
for (const middleware of this.middlewares) {
|
|
157
|
+
this.dispatch('middleware.remove', middleware);
|
|
158
|
+
}
|
|
159
|
+
this.middlewares = [];
|
|
160
|
+
// 调用父类的dispose方法
|
|
161
|
+
super.dispose();
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
const pluginError = new PluginError(`插件销毁失败: ${error.message}`, this.name, { originalError: error });
|
|
165
|
+
errorManager.handle(pluginError).catch(console.error);
|
|
166
|
+
throw pluginError;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/lib/prompt.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { AdapterMessage, RegisteredAdapter } from './types.js';
|
|
2
|
+
import { Plugin } from './plugin.js';
|
|
3
|
+
import { Message } from './message.js';
|
|
4
|
+
import { Schema } from './schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Prompt类:用于实现机器人与用户的交互式提问与输入收集。
|
|
7
|
+
* 支持文本、数字、确认、列表、选项、Schema等多种输入类型,自动处理超时、默认值、格式化等。
|
|
8
|
+
* 典型用法:await new Prompt(plugin, event).text('请输入内容')
|
|
9
|
+
* @template P 适配器类型
|
|
10
|
+
*/
|
|
11
|
+
export declare class Prompt<P extends RegisteredAdapter> {
|
|
12
|
+
private plugin;
|
|
13
|
+
private event;
|
|
14
|
+
/**
|
|
15
|
+
* 构造函数
|
|
16
|
+
* @param plugin 所属插件实例
|
|
17
|
+
* @param event 当前消息事件
|
|
18
|
+
*/
|
|
19
|
+
constructor(plugin: Plugin, event: Message<AdapterMessage<P>>);
|
|
20
|
+
/**
|
|
21
|
+
* 获取当前会话唯一标识(适配器-机器人-频道-用户)
|
|
22
|
+
*/
|
|
23
|
+
private getChannelAddress;
|
|
24
|
+
/**
|
|
25
|
+
* 通用提问方法,支持自定义格式化、超时、默认值等
|
|
26
|
+
* @param config 提问配置
|
|
27
|
+
*/
|
|
28
|
+
private prompt;
|
|
29
|
+
/**
|
|
30
|
+
* 注册一次性消息中间件,等待用户输入或超时
|
|
31
|
+
* @param callback 输入回调
|
|
32
|
+
* @param timeout 超时时间(默认3分钟)
|
|
33
|
+
* @param timeoutText 超时提示
|
|
34
|
+
*/
|
|
35
|
+
middleware(callback: (input: string | Error) => any, timeout?: number, timeoutText?: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* 文本输入
|
|
38
|
+
*/
|
|
39
|
+
text(tips: string, timeout?: number, defaultValue?: string, timeoutText?: string): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* 任意输入
|
|
42
|
+
*/
|
|
43
|
+
any(tips: string, timeout?: number, defaultValue?: string, timeoutText?: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* 数字输入
|
|
46
|
+
*/
|
|
47
|
+
number(tips: string, timeout?: number, defaultValue?: number, timeoutText?: string): Promise<number>;
|
|
48
|
+
/**
|
|
49
|
+
* 确认输入(如 yes/no)
|
|
50
|
+
*/
|
|
51
|
+
confirm(tips: string, condition?: string, timeout?: number, defaultValue?: boolean, timeoutText?: string): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* 列表输入,支持多值分隔
|
|
54
|
+
*/
|
|
55
|
+
list<T extends Prompt.SingleType = 'text'>(tips: string, config?: Prompt.ListConfig<T>, timeoutText?: string): Promise<Prompt.Result<T>[]>;
|
|
56
|
+
/**
|
|
57
|
+
* 返回常量值(用于Schema)
|
|
58
|
+
*/
|
|
59
|
+
const<T = any>(value: T): Promise<T>;
|
|
60
|
+
/**
|
|
61
|
+
* 选项选择,支持单选/多选
|
|
62
|
+
*/
|
|
63
|
+
pick<T extends Prompt.SingleType, M extends boolean = false>(tips: string, config: Prompt.PickConfig<T, M>, timeoutText?: string): Promise<Prompt.PickResult<T, M>>;
|
|
64
|
+
/**
|
|
65
|
+
* 基于Schema的选项选择
|
|
66
|
+
*/
|
|
67
|
+
pickValueWithSchema<T extends Schema>(schema: T): Promise<Schema.Types<T>>;
|
|
68
|
+
/**
|
|
69
|
+
* 批量Schema输入
|
|
70
|
+
*/
|
|
71
|
+
getValueWithSchemas<T extends Record<string, Schema>>(schemas: T): Promise<Schema.RecordTypes<T>>;
|
|
72
|
+
/**
|
|
73
|
+
* 单个Schema输入,自动分发到不同类型
|
|
74
|
+
*/
|
|
75
|
+
getValueWithSchema<T extends Schema>(schema: T): Promise<Schema.Types<T>>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Prompt命名空间:类型辅助定义
|
|
79
|
+
*/
|
|
80
|
+
export declare namespace Prompt {
|
|
81
|
+
interface SingleMap {
|
|
82
|
+
text: string;
|
|
83
|
+
number: number;
|
|
84
|
+
boolean: boolean;
|
|
85
|
+
}
|
|
86
|
+
export interface ListConfig<T extends SingleType> {
|
|
87
|
+
type: T;
|
|
88
|
+
defaultValue?: SingleMap[T][];
|
|
89
|
+
separator?: string;
|
|
90
|
+
timeout?: number;
|
|
91
|
+
}
|
|
92
|
+
export interface PickConfig<T extends SingleType = SingleType, M extends boolean = false> {
|
|
93
|
+
type: T;
|
|
94
|
+
defaultValue?: PickResult<T, M>;
|
|
95
|
+
separator?: string;
|
|
96
|
+
timeout?: number;
|
|
97
|
+
options: PickOption<T>[];
|
|
98
|
+
multiple?: M;
|
|
99
|
+
}
|
|
100
|
+
export type PickOption<T extends SingleType = 'text'> = {
|
|
101
|
+
label: string;
|
|
102
|
+
value: SingleMap[T];
|
|
103
|
+
};
|
|
104
|
+
export type PickResult<T extends SingleType, M extends boolean> = M extends true ? Result<T>[] : Result<T>;
|
|
105
|
+
export type SingleType = keyof SingleMap;
|
|
106
|
+
export type Result<T extends SingleType> = SingleMap[T];
|
|
107
|
+
export type Config<R = any> = {
|
|
108
|
+
tips: string;
|
|
109
|
+
defaultValue?: R;
|
|
110
|
+
timeout?: number;
|
|
111
|
+
timeoutText?: string;
|
|
112
|
+
format: (input: string) => R;
|
|
113
|
+
};
|
|
114
|
+
export {};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|