alemonjs 2.1.0-alpha.9 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -31
- package/README_CONFIG.md +62 -0
- package/bin/alemonc.js +23 -23
- package/bin/run.js +3 -3
- package/bin/start.js +16 -16
- package/bin/updateConfig.js +36 -36
- package/lib/{datastructure → app}/SinglyLinkedList.d.ts +2 -3
- package/lib/{datastructure → app}/SinglyLinkedList.js +16 -19
- package/lib/app/define-chidren.d.ts +2 -12
- package/lib/app/define-chidren.js +1 -7
- package/lib/app/define-middleware.d.ts +2 -0
- package/lib/app/define-middleware.js +8 -0
- package/lib/app/define-response.d.ts +3 -0
- package/lib/app/define-response.js +11 -0
- package/lib/app/event-group.d.ts +3 -0
- package/lib/app/event-group.js +22 -0
- package/lib/app/event-middleware.d.ts +3 -20
- package/lib/app/event-middleware.js +6 -11
- package/lib/app/event-processor-callHandler.d.ts +1 -0
- package/lib/app/event-processor-callHandler.js +72 -0
- package/lib/app/event-processor-cycle.d.ts +2 -0
- package/lib/app/event-processor-cycle.js +46 -46
- package/lib/app/event-processor-cycleFiles.d.ts +2 -0
- package/lib/app/event-processor-cycleFiles.js +91 -0
- package/lib/app/event-processor-cycleRoute.d.ts +2 -0
- package/lib/app/event-processor-cycleRoute.js +74 -0
- package/lib/app/event-processor-event.d.ts +2 -0
- package/lib/app/event-processor-event.js +12 -151
- package/lib/app/event-processor-middleware.d.ts +2 -0
- package/lib/app/event-processor-middleware.js +12 -154
- package/lib/app/event-processor-subscribe.d.ts +5 -0
- package/lib/app/event-processor-subscribe.js +8 -50
- package/lib/app/event-processor.d.ts +3 -21
- package/lib/app/event-processor.js +62 -49
- package/lib/app/event-response.d.ts +3 -12
- package/lib/app/event-response.js +5 -7
- package/lib/app/hook-use-api.d.ts +24 -101
- package/lib/app/hook-use-api.js +26 -187
- package/lib/app/hook-use-state.d.ts +3 -29
- package/lib/app/hook-use-state.js +4 -36
- package/lib/app/hook-use-subscribe.d.ts +12 -15
- package/lib/app/hook-use-subscribe.js +12 -48
- package/lib/app/index.d.ts +18 -0
- package/lib/app/index.js +19 -0
- package/lib/app/load_modules/index.d.ts +2 -0
- package/lib/app/load_modules/index.js +2 -0
- package/lib/app/load_modules/load.d.ts +2 -0
- package/lib/app/load_modules/load.js +34 -0
- package/lib/app/load_modules/loadChild.d.ts +2 -0
- package/lib/app/{load.js → load_modules/loadChild.js} +58 -42
- package/lib/app/message-api.d.ts +12 -28
- package/lib/app/message-api.js +17 -31
- package/lib/app/message-format.d.ts +13 -95
- package/lib/app/message-format.js +11 -151
- package/lib/app/store.d.ts +39 -55
- package/lib/app/store.js +91 -69
- package/lib/app.d.ts +18 -0
- package/lib/app.js +82 -0
- package/lib/cbp/connects/client.d.ts +2 -0
- package/lib/cbp/connects/client.js +150 -0
- package/lib/cbp/connects/connect.d.ts +9 -0
- package/lib/cbp/connects/connect.js +63 -0
- package/lib/cbp/connects/platform.d.ts +9 -0
- package/lib/cbp/connects/platform.js +142 -0
- package/lib/cbp/index.d.ts +3 -32
- package/lib/cbp/index.js +3 -348
- package/lib/cbp/processor/actions.d.ts +3 -0
- package/lib/cbp/{actions.js → processor/actions.js} +9 -17
- package/lib/cbp/processor/api.d.ts +3 -0
- package/lib/cbp/{api.js → processor/api.js} +9 -17
- package/lib/cbp/processor/config.d.ts +26 -0
- package/lib/cbp/{config.js → processor/config.js} +9 -19
- package/lib/cbp/processor/hello.html.d.ts +1 -0
- package/lib/cbp/processor/hello.html.js +47 -0
- package/lib/cbp/routers/hello.html.d.ts +2 -0
- package/lib/cbp/routers/hello.html.js +31 -0
- package/lib/cbp/routers/middleware.d.ts +2 -0
- package/lib/cbp/routers/middleware.js +40 -0
- package/lib/cbp/routers/router.d.ts +3 -0
- package/lib/cbp/routers/router.js +21 -0
- package/lib/cbp/routers/utils.d.ts +2 -0
- package/lib/cbp/routers/utils.js +39 -0
- package/lib/cbp/server/main.d.ts +1 -0
- package/lib/cbp/server/main.js +413 -0
- package/lib/cbp/server/testone.d.ts +8 -0
- package/lib/cbp/server/testone.js +270 -0
- package/lib/cbp/typings.d.ts +20 -0
- package/lib/cbp/typings.js +1 -0
- package/lib/client.d.ts +1 -0
- package/lib/client.js +87 -0
- package/lib/core/config.d.ts +4 -38
- package/lib/core/config.js +16 -51
- package/lib/core/index.d.ts +3 -0
- package/lib/core/index.js +3 -0
- package/lib/core/react.d.ts +28 -0
- package/lib/core/react.js +124 -0
- package/lib/core/utils.d.ts +12 -65
- package/lib/core/utils.js +6 -56
- package/lib/core/variable.d.ts +29 -0
- package/lib/core/variable.js +26 -29
- package/lib/global.d.ts +7 -65
- package/lib/global.js +0 -7
- package/lib/index.d.ts +6 -44
- package/lib/index.js +21 -13
- package/lib/main.d.ts +2 -42
- package/lib/main.js +55 -113
- package/lib/process/index.d.ts +2 -0
- package/lib/process/index.js +2 -0
- package/lib/process/module.d.ts +1 -0
- package/lib/process/module.js +105 -0
- package/lib/process/platform.d.ts +1 -0
- package/lib/process/platform.js +148 -0
- package/lib/server/main.d.ts +1 -0
- package/lib/server/main.js +30 -0
- package/lib/server/routers/hello.html.d.ts +2 -0
- package/lib/server/routers/hello.html.js +31 -0
- package/lib/server/routers/middleware.d.ts +2 -0
- package/lib/server/routers/middleware.js +40 -0
- package/lib/server/routers/router.d.ts +3 -0
- package/lib/server/routers/router.js +266 -0
- package/lib/server/routers/utils.d.ts +2 -0
- package/lib/server/routers/utils.js +39 -0
- package/lib/types/actions.d.ts +91 -0
- package/lib/types/actions.js +1 -0
- package/lib/{typing → types}/apis.d.ts +1 -9
- package/lib/types/apis.js +1 -0
- package/lib/types/client/index.d.ts +25 -0
- package/lib/types/client/index.js +1 -0
- package/lib/types/cycle/index.d.ts +16 -0
- package/lib/types/cycle/index.js +1 -0
- package/lib/{typing → types}/event/actions.d.ts +1 -3
- package/lib/{typing → types}/event/actions.js +0 -34
- package/lib/types/event/base/expansion.d.ts +3 -0
- package/lib/types/event/base/expansion.js +1 -0
- package/lib/types/event/base/guild.d.ts +7 -0
- package/lib/types/event/base/guild.js +1 -0
- package/lib/types/event/base/message.d.ts +11 -0
- package/lib/types/event/base/message.js +1 -0
- package/lib/types/event/base/platform.d.ts +5 -0
- package/lib/types/event/base/platform.js +1 -0
- package/lib/types/event/base/user.d.ts +8 -0
- package/lib/types/event/base/user.js +1 -0
- package/lib/types/event/channal/index.d.ts +10 -0
- package/lib/types/event/channal/index.js +1 -0
- package/lib/types/event/guild/index.d.ts +10 -0
- package/lib/types/event/guild/index.js +1 -0
- package/lib/types/event/index.d.ts +60 -0
- package/lib/types/event/index.js +1 -0
- package/lib/types/event/interaction/index.d.ts +11 -0
- package/lib/types/event/interaction/index.js +1 -0
- package/lib/{typing → types}/event/map.d.ts +13 -18
- package/lib/types/event/map.js +1 -0
- package/lib/types/event/member/index.d.ts +11 -0
- package/lib/types/event/member/index.js +1 -0
- package/lib/types/event/message/message.d.ts +20 -0
- package/lib/types/event/message/message.js +1 -0
- package/lib/types/event/message/private.message.d.ts +13 -0
- package/lib/types/event/message/private.message.js +1 -0
- package/lib/types/event/request/index.d.ts +10 -0
- package/lib/types/event/request/index.js +1 -0
- package/lib/types/index.d.ts +26 -0
- package/lib/types/index.js +1 -0
- package/lib/types/logger/index.d.ts +9 -0
- package/lib/types/logger/index.js +1 -0
- package/lib/{typing → types}/message/ark.d.ts +6 -8
- package/lib/types/message/ark.js +1 -0
- package/lib/{typing → types}/message/button.d.ts +7 -8
- package/lib/types/message/button.js +1 -0
- package/lib/types/message/image.d.ts +12 -0
- package/lib/types/message/image.js +1 -0
- package/lib/types/message/index.d.ts +16 -0
- package/lib/types/message/index.js +1 -0
- package/lib/{typing → types}/message/link.d.ts +1 -6
- package/lib/types/message/link.js +1 -0
- package/lib/types/message/markdown.d.ts +87 -0
- package/lib/types/message/markdown.js +1 -0
- package/lib/{typing → types}/message/mention.d.ts +3 -9
- package/lib/types/message/mention.js +1 -0
- package/lib/{typing → types}/message/text.d.ts +1 -6
- package/lib/types/message/text.js +1 -0
- package/lib/{typing → types}/package/index.d.ts +1 -3
- package/lib/types/package/index.js +1 -0
- package/lib/types/run.d.ts +13 -0
- package/lib/types/run.js +1 -0
- package/lib/types/state/index.d.ts +3 -0
- package/lib/types/state/index.js +1 -0
- package/lib/types/store/res.d.ts +41 -0
- package/lib/types/store/res.js +1 -0
- package/lib/types/subscribe/index.d.ts +21 -0
- package/lib/types/subscribe/index.js +1 -0
- package/lib/utils.d.ts +23 -37
- package/lib/utils.js +94 -48
- package/package.json +20 -12
- package/lib/app/define-bot.d.ts +0 -17
- package/lib/app/define-bot.js +0 -39
- package/lib/app/load.d.ts +0 -14
- package/lib/app/utils.d.ts +0 -77
- package/lib/app/utils.js +0 -162
- package/lib/cbp/connect.d.ts +0 -27
- package/lib/cbp/connect.js +0 -370
- package/lib/cbp/message.js +0 -9
- package/lib/cbp/router.js +0 -15
- package/lib/core/code.d.ts +0 -16
- package/lib/core/code.js +0 -17
- package/lib/jsx.d.ts +0 -142
- package/lib/jsx.js +0 -234
- package/lib/typing/actions.d.ts +0 -42
- package/lib/typing/client/index.d.ts +0 -67
- package/lib/typing/cycle/index.d.ts +0 -42
- package/lib/typing/event/base/guild.d.ts +0 -14
- package/lib/typing/event/base/message.d.ts +0 -28
- package/lib/typing/event/base/platform.d.ts +0 -16
- package/lib/typing/event/base/user.d.ts +0 -34
- package/lib/typing/event/channal/index.d.ts +0 -12
- package/lib/typing/event/guild/index.d.ts +0 -12
- package/lib/typing/event/index.d.ts +0 -82
- package/lib/typing/event/interaction/index.d.ts +0 -13
- package/lib/typing/event/map.js +0 -20
- package/lib/typing/event/member/index.d.ts +0 -13
- package/lib/typing/event/message/message.d.ts +0 -22
- package/lib/typing/event/message/private.message.d.ts +0 -15
- package/lib/typing/event/request/index.d.ts +0 -12
- package/lib/typing/logger/index.d.ts +0 -49
- package/lib/typing/message/image.d.ts +0 -23
- package/lib/typing/message/index.d.ts +0 -16
- package/lib/typing/message/markdown.d.ts +0 -81
- package/lib/typing/state/index.d.ts +0 -5
- package/lib/typing/store/res.d.ts +0 -75
- package/lib/typing/subscribe/index.d.ts +0 -30
package/README.md
CHANGED
|
@@ -1,33 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ALemonJS
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[alemonjs](https://alemonjs.com) 是一个专门用于开发聊天机器人的 Node.js 框架,它提供了完整的事件驱动架构来处理各种聊天平台的消息和交互。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
yarn add alemonjs @alemonjs/gui -W
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
- 启动
|
|
10
|
-
|
|
11
|
-
> src/index.js
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
import { start } from 'alemonjs'
|
|
15
|
-
start('src/index.js')
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
- 响应
|
|
19
|
-
|
|
20
|
-
> src/response/res.js
|
|
21
|
-
|
|
22
|
-
```js
|
|
23
|
-
import { Text, useMessage } from 'alemonjs'
|
|
24
|
-
// 创建事件类型
|
|
25
|
-
export const selects = onSelects(['message.create'])
|
|
26
|
-
// 导出响应
|
|
27
|
-
export default onResponse(selects, event => {
|
|
28
|
-
// 使用发送函数
|
|
29
|
-
const [message] = useMessage(event)
|
|
30
|
-
// 发送文本
|
|
31
|
-
message.send(format(Text('Hello Word!')))
|
|
32
|
-
})
|
|
33
|
-
```
|
|
5
|
+
https://alemonjs.com
|
package/README_CONFIG.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# 环境变量
|
|
2
|
+
|
|
3
|
+
`platform`:`string` 平台
|
|
4
|
+
|
|
5
|
+
`login`:`string` 登录
|
|
6
|
+
|
|
7
|
+
`LOG_PATH`:`string` log 地址
|
|
8
|
+
|
|
9
|
+
`PKG_PATH`:`string` package.json 地址
|
|
10
|
+
|
|
11
|
+
`NODE_ENV`:`development | production` 环境判断
|
|
12
|
+
|
|
13
|
+
`CFG_PATH`: `string`
|
|
14
|
+
|
|
15
|
+
# 配置
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
# 常规配置
|
|
19
|
+
port: 17117 # 端口,快捷参数 --port
|
|
20
|
+
input: 'lib/index.js' # 入口地址,快捷参数 --input
|
|
21
|
+
login: 'discord' # 选择登录的平台,快捷参数 --login
|
|
22
|
+
url: 'ws://127.0.0.1:17117' # 连接阿柠檬服务URL,快捷参数 --url
|
|
23
|
+
is_full_receive: false # 不全量接收消息(用于分流处理)
|
|
24
|
+
# 禁用设置
|
|
25
|
+
disabled_text_regular: '/闭关' # 设置正则,若匹配则禁用
|
|
26
|
+
disabled_selects: # 禁用事件。若匹配则禁用
|
|
27
|
+
'private.message.create': true # 禁用私聊
|
|
28
|
+
disabled_user_id:
|
|
29
|
+
'1715713638': true # 若匹配则禁用
|
|
30
|
+
disabled_user_key:
|
|
31
|
+
'123456': true # 多匹配则禁用
|
|
32
|
+
# 重定向:把指定的文本,转为指定的内容 (禁用规则比重定向优先)
|
|
33
|
+
redirect_text_regular: '^#' # 识别前缀 #
|
|
34
|
+
redirect_text_target: '/' # 替换为 /
|
|
35
|
+
# 映射规则
|
|
36
|
+
mapping_text:
|
|
37
|
+
- regular: '/开始游戏'
|
|
38
|
+
target: '/踏入仙途'
|
|
39
|
+
# ismaster 设置
|
|
40
|
+
master_id:
|
|
41
|
+
'1715713638': true
|
|
42
|
+
master_key:
|
|
43
|
+
'123456': true
|
|
44
|
+
# bot 设置
|
|
45
|
+
bot_id:
|
|
46
|
+
'1715713638': true # 把指定 id 视为 isBot
|
|
47
|
+
bot_key:
|
|
48
|
+
'123456': true # 把指定bot kye 视为 isBot
|
|
49
|
+
# 处理器
|
|
50
|
+
processor:
|
|
51
|
+
repeated_event_time: 60000 # 过滤掉 1分钟内出现相同 MessageId 的 event
|
|
52
|
+
repeated_user_time: 1000 # 过滤掉 1秒内出现相同UserId 的 event
|
|
53
|
+
# 加载子模块 (支持 array 写法)
|
|
54
|
+
apps:
|
|
55
|
+
'alemonjs-openai': true
|
|
56
|
+
# 模块配置, 约定。
|
|
57
|
+
# 模块对应的配置名,应是模块名。
|
|
58
|
+
alemonjs-openai:
|
|
59
|
+
baseURL: 'https://api.deepseek.com'
|
|
60
|
+
apiKey: ''
|
|
61
|
+
model: 'deepseek-chat'
|
|
62
|
+
```
|
package/bin/alemonc.js
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { updateConfig } from './updateConfig.js'
|
|
3
|
-
import { run } from './run.js'
|
|
4
|
-
import { start } from './start.js'
|
|
5
|
-
import { Command } from 'commander'
|
|
6
|
-
const program = new Command()
|
|
2
|
+
import { updateConfig } from './updateConfig.js';
|
|
3
|
+
import { run } from './run.js';
|
|
4
|
+
import { start } from './start.js';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
const program = new Command();
|
|
7
7
|
|
|
8
|
-
program.name('alemonc').description('CLI to some alemonc actions and scripts').version('1.0.0')
|
|
8
|
+
program.name('alemonc').description('CLI to some alemonc actions and scripts').version('1.0.0');
|
|
9
9
|
|
|
10
10
|
program
|
|
11
11
|
.command('add <key> [values...]')
|
|
12
12
|
.description('给key为数据的值添加元素')
|
|
13
13
|
.action((key, values) => {
|
|
14
|
-
updateConfig('add', key, values)
|
|
15
|
-
})
|
|
14
|
+
updateConfig('add', key, values);
|
|
15
|
+
});
|
|
16
16
|
|
|
17
17
|
program
|
|
18
18
|
.command('remove <key> [values...]')
|
|
19
19
|
.description('给key为数据的值移除元素')
|
|
20
20
|
.action((key, values) => {
|
|
21
|
-
updateConfig('remove', key, values)
|
|
22
|
-
})
|
|
21
|
+
updateConfig('remove', key, values);
|
|
22
|
+
});
|
|
23
23
|
|
|
24
24
|
program
|
|
25
25
|
.command('set <key> [values...]')
|
|
26
26
|
.description('给某个key设置值')
|
|
27
27
|
.action((key, values) => {
|
|
28
|
-
updateConfig('set', key, values)
|
|
29
|
-
})
|
|
28
|
+
updateConfig('set', key, values);
|
|
29
|
+
});
|
|
30
30
|
|
|
31
31
|
program
|
|
32
32
|
.command('del <key>')
|
|
33
33
|
.description('删除指定配置')
|
|
34
34
|
.action(key => {
|
|
35
|
-
updateConfig('del', key)
|
|
36
|
-
})
|
|
35
|
+
updateConfig('del', key);
|
|
36
|
+
});
|
|
37
37
|
|
|
38
38
|
program
|
|
39
39
|
.command('get <key>')
|
|
40
40
|
.description('获取指定配置')
|
|
41
41
|
.action(key => {
|
|
42
|
-
updateConfig('get', key)
|
|
43
|
-
})
|
|
42
|
+
updateConfig('get', key);
|
|
43
|
+
});
|
|
44
44
|
|
|
45
45
|
program
|
|
46
46
|
.command('run [script]')
|
|
47
47
|
.description('运行指定脚本')
|
|
48
48
|
.action(script => {
|
|
49
|
-
run(script)
|
|
50
|
-
})
|
|
49
|
+
run(script);
|
|
50
|
+
});
|
|
51
51
|
|
|
52
52
|
program
|
|
53
53
|
.command('start')
|
|
54
54
|
.description('启动 package.json 中的 main 入口')
|
|
55
55
|
.action(() => {
|
|
56
|
-
start()
|
|
57
|
-
})
|
|
56
|
+
start();
|
|
57
|
+
});
|
|
58
58
|
|
|
59
59
|
program
|
|
60
60
|
.command('help')
|
|
61
61
|
.description('获取帮助')
|
|
62
62
|
.action(() => {
|
|
63
|
-
program.help()
|
|
64
|
-
})
|
|
63
|
+
program.help();
|
|
64
|
+
});
|
|
65
65
|
|
|
66
|
-
program.parse(process.argv)
|
|
66
|
+
program.parse(process.argv);
|
package/bin/run.js
CHANGED
package/bin/start.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import path from 'path'
|
|
4
|
-
import fs from 'fs'
|
|
5
|
-
import { createRequire } from 'module'
|
|
6
|
-
const require = createRequire(import.meta.url)
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { createRequire } from 'module';
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
7
|
|
|
8
8
|
const createExports = packageJson => {
|
|
9
9
|
if (packageJson?.exports) {
|
|
10
10
|
if (typeof packageJson.exports === 'string') {
|
|
11
|
-
return packageJson.exports
|
|
11
|
+
return packageJson.exports;
|
|
12
12
|
} else if (typeof packageJson.exports === 'object') {
|
|
13
|
-
return packageJson.exports['.'] || packageJson.exports['./index.js']
|
|
13
|
+
return packageJson.exports['.'] || packageJson.exports['./index.js'];
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
}
|
|
16
|
+
};
|
|
17
17
|
|
|
18
18
|
const getInputExportPath = input => {
|
|
19
|
-
const packageJsonPath = path.join(input ?? process.cwd(), 'package.json')
|
|
19
|
+
const packageJsonPath = path.join(input ?? process.cwd(), 'package.json');
|
|
20
20
|
if (fs.existsSync(packageJsonPath)) {
|
|
21
|
-
const packageJson = require(packageJsonPath)
|
|
22
|
-
const main = packageJson?.main || createExports(packageJson)
|
|
21
|
+
const packageJson = require(packageJsonPath);
|
|
22
|
+
const main = packageJson?.main || createExports(packageJson);
|
|
23
23
|
if (main) {
|
|
24
|
-
return main
|
|
24
|
+
return main;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
}
|
|
27
|
+
};
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
*
|
|
@@ -32,8 +32,8 @@ const getInputExportPath = input => {
|
|
|
32
32
|
*/
|
|
33
33
|
export const start = () => {
|
|
34
34
|
// 读取配置文件
|
|
35
|
-
const main = getInputExportPath()
|
|
35
|
+
const main = getInputExportPath();
|
|
36
36
|
import('../lib/index.js').then(res => {
|
|
37
|
-
res.start(main)
|
|
38
|
-
})
|
|
39
|
-
}
|
|
37
|
+
res.start(main);
|
|
38
|
+
});
|
|
39
|
+
};
|
package/bin/updateConfig.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { join } from 'path'
|
|
3
|
-
import fs from 'fs'
|
|
4
|
-
import YAML from 'yaml'
|
|
5
|
-
const configPath = join(process.cwd(), 'alemon.config.yaml')
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import YAML from 'yaml';
|
|
5
|
+
const configPath = join(process.cwd(), 'alemon.config.yaml');
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* 更新配置
|
|
@@ -12,72 +12,72 @@ const configPath = join(process.cwd(), 'alemon.config.yaml')
|
|
|
12
12
|
* @returns
|
|
13
13
|
*/
|
|
14
14
|
export function updateConfig(action, key, value = []) {
|
|
15
|
-
let config = {}
|
|
15
|
+
let config = {};
|
|
16
16
|
if (fs.existsSync(configPath)) {
|
|
17
|
-
const data = fs.readFileSync(configPath, 'utf8')
|
|
18
|
-
config = YAML.parse(data) ?? {}
|
|
17
|
+
const data = fs.readFileSync(configPath, 'utf8');
|
|
18
|
+
config = YAML.parse(data) ?? {};
|
|
19
19
|
}
|
|
20
|
-
const keys = key.split('.')
|
|
21
|
-
let current = config
|
|
20
|
+
const keys = key.split('.');
|
|
21
|
+
let current = config;
|
|
22
22
|
if (action === 'add') {
|
|
23
23
|
for (let i = 0; i < keys.length - 1; i++) {
|
|
24
|
-
const currentKey = keys[i]
|
|
24
|
+
const currentKey = keys[i];
|
|
25
25
|
if (current[currentKey] === null || typeof current[currentKey] !== 'object') {
|
|
26
|
-
current[currentKey] = {} // 确保当前键的值是一个对象
|
|
26
|
+
current[currentKey] = {}; // 确保当前键的值是一个对象
|
|
27
27
|
}
|
|
28
|
-
current = current[currentKey]
|
|
28
|
+
current = current[currentKey];
|
|
29
29
|
}
|
|
30
|
-
const finalKey = keys[keys.length - 1]
|
|
30
|
+
const finalKey = keys[keys.length - 1];
|
|
31
31
|
if (!Array.isArray(current[finalKey])) {
|
|
32
|
-
current[finalKey] = [] // 如果最终键的值不是数组,则初始化为空数组
|
|
32
|
+
current[finalKey] = []; // 如果最终键的值不是数组,则初始化为空数组
|
|
33
33
|
}
|
|
34
|
-
current[finalKey] = [...new Set([...current[finalKey], ...value])] // 去重并添加新值
|
|
34
|
+
current[finalKey] = [...new Set([...current[finalKey], ...value])]; // 去重并添加新值
|
|
35
35
|
} else if (action === 'remove') {
|
|
36
36
|
for (let i = 0; i < keys.length - 1; i++) {
|
|
37
|
-
const currentKey = keys[i]
|
|
37
|
+
const currentKey = keys[i];
|
|
38
38
|
if (current[currentKey] === null || typeof current[currentKey] !== 'object') {
|
|
39
|
-
return // 如果路径不存在,直接返回
|
|
39
|
+
return; // 如果路径不存在,直接返回
|
|
40
40
|
}
|
|
41
|
-
current = current[currentKey]
|
|
41
|
+
current = current[currentKey];
|
|
42
42
|
}
|
|
43
|
-
const finalKey = keys[keys.length - 1]
|
|
43
|
+
const finalKey = keys[keys.length - 1];
|
|
44
44
|
if (Array.isArray(current[finalKey])) {
|
|
45
|
-
current[finalKey] = current[finalKey].filter(item => !value.includes(item)) // 过滤掉要删除的值
|
|
45
|
+
current[finalKey] = current[finalKey].filter(item => !value.includes(item)); // 过滤掉要删除的值
|
|
46
46
|
}
|
|
47
47
|
} else if (action === 'set') {
|
|
48
48
|
for (let i = 0; i < keys.length - 1; i++) {
|
|
49
|
-
const currentKey = keys[i]
|
|
49
|
+
const currentKey = keys[i];
|
|
50
50
|
if (current[currentKey] === null || typeof current[currentKey] !== 'object') {
|
|
51
|
-
current[currentKey] = {} // 确保当前键的值是一个对象
|
|
51
|
+
current[currentKey] = {}; // 确保当前键的值是一个对象
|
|
52
52
|
}
|
|
53
|
-
current = current[currentKey]
|
|
53
|
+
current = current[currentKey];
|
|
54
54
|
}
|
|
55
|
-
current[keys[keys.length - 1]] = value[0]
|
|
55
|
+
current[keys[keys.length - 1]] = value[0];
|
|
56
56
|
} else if (action === 'del') {
|
|
57
57
|
for (let i = 0; i < keys.length - 1; i++) {
|
|
58
|
-
const currentKey = keys[i]
|
|
58
|
+
const currentKey = keys[i];
|
|
59
59
|
if (current[currentKey] === null || typeof current[currentKey] !== 'object') {
|
|
60
|
-
return // 如果路径不存在,直接返回
|
|
60
|
+
return; // 如果路径不存在,直接返回
|
|
61
61
|
}
|
|
62
|
-
current = current[currentKey]
|
|
62
|
+
current = current[currentKey];
|
|
63
63
|
}
|
|
64
|
-
delete current[keys[keys.length - 1]]
|
|
64
|
+
delete current[keys[keys.length - 1]];
|
|
65
65
|
} else if (action === 'get') {
|
|
66
66
|
for (let i = 0; i < keys.length; i++) {
|
|
67
|
-
const currentKey = keys[i]
|
|
67
|
+
const currentKey = keys[i];
|
|
68
68
|
if (current[currentKey] === null || typeof current[currentKey] !== 'object') {
|
|
69
69
|
if (i === keys.length - 1) {
|
|
70
|
-
console.log(current[currentKey]) // 输出最终值
|
|
70
|
+
console.log(current[currentKey]); // 输出最终值
|
|
71
71
|
} else {
|
|
72
|
-
console.log(undefined) // 路径不存在
|
|
72
|
+
console.log(undefined); // 路径不存在
|
|
73
73
|
}
|
|
74
|
-
return
|
|
74
|
+
return;
|
|
75
75
|
}
|
|
76
|
-
current = current[currentKey]
|
|
76
|
+
current = current[currentKey];
|
|
77
77
|
}
|
|
78
|
-
console.log(current) // 输出最终值
|
|
79
|
-
return
|
|
78
|
+
console.log(current); // 输出最终值
|
|
79
|
+
return;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
fs.writeFileSync(configPath, YAML.stringify(config))
|
|
82
|
+
fs.writeFileSync(configPath, YAML.stringify(config));
|
|
83
83
|
}
|
|
@@ -3,7 +3,7 @@ declare class ListNode<T> {
|
|
|
3
3
|
next: ListNode<T> | null;
|
|
4
4
|
constructor(data: T);
|
|
5
5
|
}
|
|
6
|
-
declare class SinglyLinkedList<T> {
|
|
6
|
+
export declare class SinglyLinkedList<T> {
|
|
7
7
|
private head;
|
|
8
8
|
private size;
|
|
9
9
|
private current;
|
|
@@ -13,5 +13,4 @@ declare class SinglyLinkedList<T> {
|
|
|
13
13
|
removeCurrent(): void;
|
|
14
14
|
getSize(): number;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
export { SinglyLinkedList };
|
|
16
|
+
export {};
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
class ListNode {
|
|
2
|
-
data;
|
|
3
|
-
next;
|
|
2
|
+
data;
|
|
3
|
+
next;
|
|
4
4
|
constructor(data) {
|
|
5
5
|
this.data = data;
|
|
6
6
|
this.next = null;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
class SinglyLinkedList {
|
|
10
|
-
head;
|
|
11
|
-
size;
|
|
12
|
-
current;
|
|
10
|
+
head;
|
|
11
|
+
size;
|
|
12
|
+
current;
|
|
13
13
|
constructor(initialValues) {
|
|
14
14
|
this.head = null;
|
|
15
15
|
this.size = 0;
|
|
16
|
-
this.current = null;
|
|
16
|
+
this.current = null;
|
|
17
17
|
if (initialValues) {
|
|
18
|
-
initialValues.forEach(value => this.append(value));
|
|
18
|
+
initialValues.forEach(value => this.append(value));
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
// 在链表末尾添加新节点
|
|
22
21
|
append(data) {
|
|
23
22
|
const newNode = new ListNode(data);
|
|
24
23
|
if (!this.head) {
|
|
@@ -33,23 +32,22 @@ class SinglyLinkedList {
|
|
|
33
32
|
}
|
|
34
33
|
this.size++;
|
|
35
34
|
}
|
|
36
|
-
// 获取下一个节点并移动指针
|
|
37
35
|
popNext() {
|
|
38
36
|
if (!this.current) {
|
|
39
|
-
this.current = this.head;
|
|
37
|
+
this.current = this.head;
|
|
40
38
|
}
|
|
41
39
|
else {
|
|
42
|
-
this.current = this.current.next;
|
|
40
|
+
this.current = this.current.next;
|
|
43
41
|
}
|
|
44
|
-
return this.current;
|
|
42
|
+
return this.current;
|
|
45
43
|
}
|
|
46
|
-
// 删除当前节点
|
|
47
44
|
removeCurrent() {
|
|
48
|
-
if (!this.head)
|
|
45
|
+
if (!this.head) {
|
|
49
46
|
return;
|
|
47
|
+
}
|
|
50
48
|
if (this.current === this.head) {
|
|
51
|
-
this.head = this.head.next;
|
|
52
|
-
this.current = null;
|
|
49
|
+
this.head = this.head.next;
|
|
50
|
+
this.current = null;
|
|
53
51
|
this.size--;
|
|
54
52
|
return;
|
|
55
53
|
}
|
|
@@ -58,12 +56,11 @@ class SinglyLinkedList {
|
|
|
58
56
|
previous = previous.next;
|
|
59
57
|
}
|
|
60
58
|
if (previous && this.current) {
|
|
61
|
-
previous.next = this.current.next;
|
|
62
|
-
this.current = null;
|
|
59
|
+
previous.next = this.current.next;
|
|
60
|
+
this.current = null;
|
|
63
61
|
this.size--;
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
|
-
// 获取链表的大小
|
|
67
64
|
getSize() {
|
|
68
65
|
return this.size;
|
|
69
66
|
}
|
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
import { DefineChildrenFunc } from '../
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* 定义子事件
|
|
6
|
-
* @param callback
|
|
7
|
-
* @throws {Error} - 如果 callback 无效,抛出错误。
|
|
8
|
-
* @returns
|
|
9
|
-
*/
|
|
10
|
-
declare const defineChildren: DefineChildrenFunc;
|
|
11
|
-
|
|
12
|
-
export { defineChildren };
|
|
1
|
+
import { DefineChildrenFunc } from '../types';
|
|
2
|
+
export declare const defineChildren: DefineChildrenFunc;
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import { ResultCode } from '../core/
|
|
1
|
+
import { ResultCode } from '../core/variable.js';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* 定义子事件
|
|
5
|
-
* @param callback
|
|
6
|
-
* @throws {Error} - 如果 callback 无效,抛出错误。
|
|
7
|
-
* @returns
|
|
8
|
-
*/
|
|
9
3
|
const defineChildren = callback => {
|
|
10
4
|
if (typeof callback === 'function' || typeof callback === 'object') {
|
|
11
5
|
return {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const onGroup = (...calls) => {
|
|
2
|
+
if (calls.length === 0) {
|
|
3
|
+
throw new Error('onGroup: 至少需要一个响应或中间件');
|
|
4
|
+
}
|
|
5
|
+
const firstItem = calls[0];
|
|
6
|
+
const baseSelects = firstItem.select;
|
|
7
|
+
const currents = calls.reduce((acc, item) => {
|
|
8
|
+
if (Array.isArray(item.current)) {
|
|
9
|
+
return acc.concat(item.current);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return acc.concat(item.current);
|
|
13
|
+
}
|
|
14
|
+
}, []);
|
|
15
|
+
return {
|
|
16
|
+
select: baseSelects,
|
|
17
|
+
current: currents
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
global.onGroup = onGroup;
|
|
21
|
+
|
|
22
|
+
export { onGroup };
|
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
import { OnMiddlewareReversalFunc } from '../
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @fileoverview 中间件
|
|
6
|
-
* @module middleware
|
|
7
|
-
* @author ningmengchongshui
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 中间件
|
|
12
|
-
* @param select 事件选择
|
|
13
|
-
* @param callback 回调函数,处理事件和 API
|
|
14
|
-
* @throws {Error} - 如果 select 无效,抛出错误。
|
|
15
|
-
* @throws {Error} - 如果 callback 无效,抛出错误。
|
|
16
|
-
* @returns
|
|
17
|
-
*/
|
|
18
|
-
declare const onMiddleware: OnMiddlewareReversalFunc;
|
|
19
|
-
|
|
20
|
-
export { onMiddleware };
|
|
1
|
+
import { OnMiddlewareReversalFunc, OnMiddlewareReversalFuncBack } from '../types';
|
|
2
|
+
export declare const onMiddleware: OnMiddlewareReversalFunc;
|
|
3
|
+
export declare const OnMiddleware: OnMiddlewareReversalFuncBack;
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import { ResultCode } from '../core/
|
|
1
|
+
import { ResultCode } from '../core/variable.js';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* 中间件
|
|
5
|
-
* @param select 事件选择
|
|
6
|
-
* @param callback 回调函数,处理事件和 API
|
|
7
|
-
* @throws {Error} - 如果 select 无效,抛出错误。
|
|
8
|
-
* @throws {Error} - 如果 callback 无效,抛出错误。
|
|
9
|
-
* @returns
|
|
10
|
-
*/
|
|
11
3
|
const onMiddleware = (select, callback) => {
|
|
12
|
-
// 参数检查
|
|
13
4
|
if (typeof callback !== 'function') {
|
|
14
5
|
logger.error({
|
|
15
6
|
code: ResultCode.FailParams,
|
|
@@ -29,5 +20,9 @@ const onMiddleware = (select, callback) => {
|
|
|
29
20
|
throw new Error('Invalid select: select must be a string or object');
|
|
30
21
|
};
|
|
31
22
|
global.onMiddleware = onMiddleware;
|
|
23
|
+
const OnMiddleware = (callback, select) => {
|
|
24
|
+
return onMiddleware(select, callback);
|
|
25
|
+
};
|
|
26
|
+
global.OnMiddleware = OnMiddleware;
|
|
32
27
|
|
|
33
|
-
export { onMiddleware };
|
|
28
|
+
export { OnMiddleware, onMiddleware };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createCallHandler: (valueEvent: any) => (currents: any, nextEvent: any) => void;
|