node-karin 0.0.3 → 0.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/LICENSE +674 -674
- package/README.md +57 -57
- package/config/defSet/App.yaml +37 -37
- package/config/defSet/config.yaml +43 -43
- package/config/defSet/group.yaml +18 -18
- package/config/defSet/pm2.yaml +21 -21
- package/config/defSet/server.yaml +42 -42
- package/config/view/App.yaml +74 -74
- package/config/view/config.yaml +100 -100
- package/config/view/group.yaml +62 -62
- package/config/view/pm2.yaml +41 -41
- package/config/view/redis.yaml +25 -25
- package/config/view/server.yaml +93 -93
- package/lib/adapter/onebot/onebot11.d.ts +430 -430
- package/lib/adapter/onebot/onebot11.js +1265 -1302
- package/lib/core/init.js +4 -4
- package/lib/core/karin.d.ts +72 -72
- package/lib/core/karin.js +51 -51
- package/lib/core/listener.d.ts +121 -121
- package/lib/core/listener.js +178 -178
- package/lib/core/plugin.app.d.ts +15 -15
- package/lib/core/plugin.app.js +18 -18
- package/lib/core/plugin.d.ts +182 -182
- package/lib/core/plugin.js +132 -132
- package/lib/core/plugin.loader.d.ts +149 -149
- package/lib/core/plugin.loader.js +451 -451
- package/lib/core/server.d.ts +26 -26
- package/lib/core/server.js +209 -209
- package/lib/db/level.d.ts +20 -20
- package/lib/db/level.js +36 -36
- package/lib/db/redis.d.ts +41 -41
- package/lib/db/redis.js +131 -131
- package/lib/db/redis_level.d.ts +113 -113
- package/lib/db/redis_level.js +274 -274
- package/lib/event/event.d.ts +138 -138
- package/lib/event/event.handler.d.ts +29 -29
- package/lib/event/event.handler.js +138 -138
- package/lib/event/event.js +120 -120
- package/lib/event/message.d.ts +102 -102
- package/lib/event/message.handler.d.ts +25 -25
- package/lib/event/message.handler.js +237 -237
- package/lib/event/message.js +69 -69
- package/lib/event/notice.d.ts +49 -49
- package/lib/event/notice.js +14 -14
- package/lib/event/request.d.ts +49 -49
- package/lib/event/request.js +14 -14
- package/lib/event/review.handler.d.ts +54 -54
- package/lib/event/review.handler.js +374 -374
- package/lib/index.d.ts +23 -23
- package/lib/index.js +39 -40
- package/lib/renderer/app.d.ts +53 -53
- package/lib/renderer/app.js +88 -88
- package/lib/renderer/base.d.ts +30 -30
- package/lib/renderer/base.js +68 -68
- package/lib/renderer/client.d.ts +30 -30
- package/lib/renderer/client.js +155 -155
- package/lib/renderer/http.d.ts +19 -19
- package/lib/renderer/http.js +50 -50
- package/lib/renderer/server.d.ts +42 -42
- package/lib/renderer/server.js +110 -110
- package/lib/renderer/wormhole.d.ts +1 -1
- package/lib/renderer/wormhole.js +154 -154
- package/lib/types/adapter.d.ts +575 -575
- package/lib/types/adapter.js +1 -1
- package/lib/types/config.d.ts +327 -327
- package/lib/types/config.js +1 -1
- package/lib/types/element.d.ts +576 -576
- package/lib/types/element.js +1 -1
- package/lib/types/index.d.ts +8 -8
- package/lib/types/index.js +8 -8
- package/lib/types/logger.d.ts +109 -109
- package/lib/types/logger.js +1 -1
- package/lib/types/onebots11.d.ts +1371 -1371
- package/lib/types/onebots11.js +1 -1
- package/lib/types/plugin.d.ts +282 -282
- package/lib/types/plugin.js +1 -1
- package/lib/types/render.d.ts +111 -111
- package/lib/types/render.js +1 -1
- package/lib/types/reply.d.ts +40 -40
- package/lib/types/reply.js +1 -1
- package/lib/types/types.d.ts +898 -898
- package/lib/types/types.js +1 -1
- package/lib/utils/YamlEditor.d.ts +62 -62
- package/lib/utils/YamlEditor.js +197 -197
- package/lib/utils/button.d.ts +49 -49
- package/lib/utils/button.js +75 -75
- package/lib/utils/common.d.ts +123 -123
- package/lib/utils/common.js +396 -396
- package/lib/utils/config.d.ts +72 -72
- package/lib/utils/config.js +254 -254
- package/lib/utils/exec.d.ts +22 -22
- package/lib/utils/exec.js +36 -36
- package/lib/utils/ffmpeg.d.ts +12 -12
- package/lib/utils/ffmpeg.js +25 -25
- package/lib/utils/handler.d.ts +76 -76
- package/lib/utils/handler.js +98 -98
- package/lib/utils/logger.d.ts +3 -3
- package/lib/utils/logger.js +104 -104
- package/lib/utils/segment.d.ts +276 -276
- package/lib/utils/segment.js +420 -420
- package/lib/utils/update.d.ts +69 -69
- package/lib/utils/update.js +145 -145
- package/lib/utils/updateVersion.d.ts +33 -33
- package/lib/utils/updateVersion.js +140 -140
- package/package.json +92 -91
package/lib/utils/exec.d.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 执行 shell 命令
|
|
3
|
-
* @param cmd 命令
|
|
4
|
-
* @param log 是否打印日志
|
|
5
|
-
* @param options 选项
|
|
6
|
-
*/
|
|
7
|
-
export declare const exec: (cmd: string, log?: boolean, options?: {
|
|
8
|
-
cwd: string;
|
|
9
|
-
encoding: string;
|
|
10
|
-
}) => Promise<{
|
|
11
|
-
/**
|
|
12
|
-
* - 执行状态
|
|
13
|
-
*/
|
|
14
|
-
status: 'ok' | 'failed';
|
|
15
|
-
/**
|
|
16
|
-
* - 错误信息
|
|
17
|
-
*/
|
|
18
|
-
error: Error | null;
|
|
19
|
-
stdout: string | '';
|
|
20
|
-
stderr: string | '';
|
|
21
|
-
}>;
|
|
22
|
-
export default exec;
|
|
1
|
+
/**
|
|
2
|
+
* 执行 shell 命令
|
|
3
|
+
* @param cmd 命令
|
|
4
|
+
* @param log 是否打印日志
|
|
5
|
+
* @param options 选项
|
|
6
|
+
*/
|
|
7
|
+
export declare const exec: (cmd: string, log?: boolean, options?: {
|
|
8
|
+
cwd: string;
|
|
9
|
+
encoding: string;
|
|
10
|
+
}) => Promise<{
|
|
11
|
+
/**
|
|
12
|
+
* - 执行状态
|
|
13
|
+
*/
|
|
14
|
+
status: 'ok' | 'failed';
|
|
15
|
+
/**
|
|
16
|
+
* - 错误信息
|
|
17
|
+
*/
|
|
18
|
+
error: Error | null;
|
|
19
|
+
stdout: string | '';
|
|
20
|
+
stderr: string | '';
|
|
21
|
+
}>;
|
|
22
|
+
export default exec;
|
package/lib/utils/exec.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import logger from './logger.js'
|
|
2
|
-
import { exec as execCmd } from 'child_process'
|
|
3
|
-
/**
|
|
4
|
-
* 执行 shell 命令
|
|
5
|
-
* @param cmd 命令
|
|
6
|
-
* @param log 是否打印日志
|
|
7
|
-
* @param options 选项
|
|
8
|
-
*/
|
|
9
|
-
export const exec = (cmd, log = true, options = { cwd: process.cwd(), encoding: 'utf-8' }) => {
|
|
10
|
-
return new Promise(resolve => {
|
|
11
|
-
const logMessage = (level, message) => {
|
|
12
|
-
if (log) { logger[level](message) }
|
|
13
|
-
}
|
|
14
|
-
const logType = (status) => {
|
|
15
|
-
switch (status) {
|
|
16
|
-
case '开始执行':
|
|
17
|
-
return logger.yellow('[exec][开始执行]')
|
|
18
|
-
case 'ok':
|
|
19
|
-
return logger.green('[exec][执行成功]')
|
|
20
|
-
case 'failed':
|
|
21
|
-
return logger.red('[exec][执行失败]')
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
const formatMessage = (status, details) => [logType(status), `cmd: ${cmd}`, `cwd: ${options.cwd || process.cwd()}`, details, '--------'].join('\n')
|
|
25
|
-
logMessage('info', formatMessage('开始执行', ''))
|
|
26
|
-
execCmd(cmd, options, (error, stdout, stderr) => {
|
|
27
|
-
if (error) {
|
|
28
|
-
logMessage('error', formatMessage('failed', `Error: ${error.message || error.stack || error.toString()}`))
|
|
29
|
-
return resolve({ status: 'failed', error, stdout, stderr })
|
|
30
|
-
}
|
|
31
|
-
logMessage('mark', formatMessage('ok', `stdout: ${stdout}\nstderr: ${stderr}`))
|
|
32
|
-
resolve({ status: 'ok', error, stdout, stderr })
|
|
33
|
-
})
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
export default exec
|
|
1
|
+
import logger from './logger.js'
|
|
2
|
+
import { exec as execCmd } from 'child_process'
|
|
3
|
+
/**
|
|
4
|
+
* 执行 shell 命令
|
|
5
|
+
* @param cmd 命令
|
|
6
|
+
* @param log 是否打印日志
|
|
7
|
+
* @param options 选项
|
|
8
|
+
*/
|
|
9
|
+
export const exec = (cmd, log = true, options = { cwd: process.cwd(), encoding: 'utf-8' }) => {
|
|
10
|
+
return new Promise(resolve => {
|
|
11
|
+
const logMessage = (level, message) => {
|
|
12
|
+
if (log) { logger[level](message) }
|
|
13
|
+
}
|
|
14
|
+
const logType = (status) => {
|
|
15
|
+
switch (status) {
|
|
16
|
+
case '开始执行':
|
|
17
|
+
return logger.yellow('[exec][开始执行]')
|
|
18
|
+
case 'ok':
|
|
19
|
+
return logger.green('[exec][执行成功]')
|
|
20
|
+
case 'failed':
|
|
21
|
+
return logger.red('[exec][执行失败]')
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const formatMessage = (status, details) => [logType(status), `cmd: ${cmd}`, `cwd: ${options.cwd || process.cwd()}`, details, '--------'].join('\n')
|
|
25
|
+
logMessage('info', formatMessage('开始执行', ''))
|
|
26
|
+
execCmd(cmd, options, (error, stdout, stderr) => {
|
|
27
|
+
if (error) {
|
|
28
|
+
logMessage('error', formatMessage('failed', `Error: ${error.message || error.stack || error.toString()}`))
|
|
29
|
+
return resolve({ status: 'failed', error, stdout, stderr })
|
|
30
|
+
}
|
|
31
|
+
logMessage('mark', formatMessage('ok', `stdout: ${stdout}\nstderr: ${stderr}`))
|
|
32
|
+
resolve({ status: 'ok', error, stdout, stderr })
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
export default exec
|
package/lib/utils/ffmpeg.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 执行 ffmpeg 命令
|
|
3
|
-
*/
|
|
4
|
-
export default function ffmpeg(): Promise<false | ((cmd: string, log?: boolean, options?: {
|
|
5
|
-
cwd: string;
|
|
6
|
-
encoding: string;
|
|
7
|
-
}) => Promise<{
|
|
8
|
-
status: "failed" | "ok";
|
|
9
|
-
error: Error | null;
|
|
10
|
-
stdout: string;
|
|
11
|
-
stderr: string;
|
|
12
|
-
}>)>;
|
|
1
|
+
/**
|
|
2
|
+
* 执行 ffmpeg 命令
|
|
3
|
+
*/
|
|
4
|
+
export default function ffmpeg(): Promise<false | ((cmd: string, log?: boolean, options?: {
|
|
5
|
+
cwd: string;
|
|
6
|
+
encoding: string;
|
|
7
|
+
}) => Promise<{
|
|
8
|
+
status: "failed" | "ok";
|
|
9
|
+
error: Error | null;
|
|
10
|
+
stdout: string;
|
|
11
|
+
stderr: string;
|
|
12
|
+
}>)>;
|
package/lib/utils/ffmpeg.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import exec from './exec.js'
|
|
2
|
-
import logger from './logger.js'
|
|
3
|
-
import Config from './config.js'
|
|
4
|
-
/**
|
|
5
|
-
* 执行 ffmpeg 命令
|
|
6
|
-
*/
|
|
7
|
-
export default async function ffmpeg () {
|
|
8
|
-
let ffmpeg = 'ffmpeg'
|
|
9
|
-
const { status } = await exec('ffmpeg -version', false)
|
|
10
|
-
if (status !== 'ok') {
|
|
11
|
-
logger.debug('ffmpeg 未安装,开始尝试读取配置文件是否存在ffmpeg路径')
|
|
12
|
-
const ffmpegPath = Config.Config.ffmpeg_path
|
|
13
|
-
if (!ffmpegPath) {
|
|
14
|
-
logger.warn('ffmpeg 未安装,请安装 ffmpeg 或手动配置 ffmpeg 路径后重启')
|
|
15
|
-
return false
|
|
16
|
-
}
|
|
17
|
-
ffmpeg = `"${ffmpegPath}"`
|
|
18
|
-
}
|
|
19
|
-
// 返回函数
|
|
20
|
-
return async (cmd, log = true, options = { cwd: process.cwd(), encoding: 'utf-8' }) => {
|
|
21
|
-
cmd = cmd.replace(/^ffmpeg/, '').trim()
|
|
22
|
-
cmd = `${ffmpeg} ${cmd}`
|
|
23
|
-
return await exec(cmd, log, options)
|
|
24
|
-
}
|
|
25
|
-
}
|
|
1
|
+
import exec from './exec.js'
|
|
2
|
+
import logger from './logger.js'
|
|
3
|
+
import Config from './config.js'
|
|
4
|
+
/**
|
|
5
|
+
* 执行 ffmpeg 命令
|
|
6
|
+
*/
|
|
7
|
+
export default async function ffmpeg () {
|
|
8
|
+
let ffmpeg = 'ffmpeg'
|
|
9
|
+
const { status } = await exec('ffmpeg -version', false)
|
|
10
|
+
if (status !== 'ok') {
|
|
11
|
+
logger.debug('ffmpeg 未安装,开始尝试读取配置文件是否存在ffmpeg路径')
|
|
12
|
+
const ffmpegPath = Config.Config.ffmpeg_path
|
|
13
|
+
if (!ffmpegPath) {
|
|
14
|
+
logger.warn('ffmpeg 未安装,请安装 ffmpeg 或手动配置 ffmpeg 路径后重启')
|
|
15
|
+
return false
|
|
16
|
+
}
|
|
17
|
+
ffmpeg = `"${ffmpegPath}"`
|
|
18
|
+
}
|
|
19
|
+
// 返回函数
|
|
20
|
+
return async (cmd, log = true, options = { cwd: process.cwd(), encoding: 'utf-8' }) => {
|
|
21
|
+
cmd = cmd.replace(/^ffmpeg/, '').trim()
|
|
22
|
+
cmd = `${ffmpeg} ${cmd}`
|
|
23
|
+
return await exec(cmd, log, options)
|
|
24
|
+
}
|
|
25
|
+
}
|
package/lib/utils/handler.d.ts
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
import Plugin from '../core/plugin.js';
|
|
2
|
-
import { dirName, fileName } from '../types/plugin.js';
|
|
3
|
-
/**
|
|
4
|
-
* 事件处理器类
|
|
5
|
-
*/
|
|
6
|
-
declare const _default: {
|
|
7
|
-
events: {
|
|
8
|
-
[key: string]: {
|
|
9
|
-
/**
|
|
10
|
-
* - 文件信息
|
|
11
|
-
*/
|
|
12
|
-
file: {
|
|
13
|
-
/**
|
|
14
|
-
* - 插件包名称
|
|
15
|
-
*/
|
|
16
|
-
dir: dirName;
|
|
17
|
-
/**
|
|
18
|
-
* - 文件名称
|
|
19
|
-
*/
|
|
20
|
-
name: fileName;
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* - 事件class
|
|
24
|
-
*/
|
|
25
|
-
App: new () => Plugin;
|
|
26
|
-
/**
|
|
27
|
-
* - 事件键
|
|
28
|
-
*/
|
|
29
|
-
key: string;
|
|
30
|
-
/**
|
|
31
|
-
* - 事件处理函数名称
|
|
32
|
-
*/
|
|
33
|
-
fnc: string;
|
|
34
|
-
/**
|
|
35
|
-
* - 优先级
|
|
36
|
-
*/
|
|
37
|
-
priority: number;
|
|
38
|
-
}[];
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* 添加事件处理器
|
|
42
|
-
* @param {Object} config 配置对象
|
|
43
|
-
* @param {string} config.name 处理器名称
|
|
44
|
-
* @param {string} config.dir 处理器所在目录
|
|
45
|
-
* @param {Function} config.App 应用构造函数
|
|
46
|
-
* @param {Object} config.Class 类配置
|
|
47
|
-
*/
|
|
48
|
-
add({ name, dir, App, Class }: {
|
|
49
|
-
dir: dirName;
|
|
50
|
-
name: fileName;
|
|
51
|
-
App: new () => Plugin;
|
|
52
|
-
Class: Plugin;
|
|
53
|
-
}): void;
|
|
54
|
-
/**
|
|
55
|
-
* 删除事件处理器
|
|
56
|
-
*/
|
|
57
|
-
del({ dir, name, key, }: {
|
|
58
|
-
dir: dirName | '';
|
|
59
|
-
name: fileName | '';
|
|
60
|
-
/**
|
|
61
|
-
* 事件键 未传入则删除所有处理器
|
|
62
|
-
*/
|
|
63
|
-
key: string | '';
|
|
64
|
-
}): boolean;
|
|
65
|
-
/**
|
|
66
|
-
* 调用事件处理器
|
|
67
|
-
* @param key 事件键
|
|
68
|
-
* @param args 自定义参数 一般用来传递e之类的
|
|
69
|
-
*/
|
|
70
|
-
call(key: string, args?: {}): Promise<any>;
|
|
71
|
-
/**
|
|
72
|
-
* 检查是否存在指定键的事件处理器
|
|
73
|
-
*/
|
|
74
|
-
has(key: string): boolean;
|
|
75
|
-
};
|
|
76
|
-
export default _default;
|
|
1
|
+
import Plugin from '../core/plugin.js';
|
|
2
|
+
import { dirName, fileName } from '../types/plugin.js';
|
|
3
|
+
/**
|
|
4
|
+
* 事件处理器类
|
|
5
|
+
*/
|
|
6
|
+
declare const _default: {
|
|
7
|
+
events: {
|
|
8
|
+
[key: string]: {
|
|
9
|
+
/**
|
|
10
|
+
* - 文件信息
|
|
11
|
+
*/
|
|
12
|
+
file: {
|
|
13
|
+
/**
|
|
14
|
+
* - 插件包名称
|
|
15
|
+
*/
|
|
16
|
+
dir: dirName;
|
|
17
|
+
/**
|
|
18
|
+
* - 文件名称
|
|
19
|
+
*/
|
|
20
|
+
name: fileName;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* - 事件class
|
|
24
|
+
*/
|
|
25
|
+
App: new () => Plugin;
|
|
26
|
+
/**
|
|
27
|
+
* - 事件键
|
|
28
|
+
*/
|
|
29
|
+
key: string;
|
|
30
|
+
/**
|
|
31
|
+
* - 事件处理函数名称
|
|
32
|
+
*/
|
|
33
|
+
fnc: string;
|
|
34
|
+
/**
|
|
35
|
+
* - 优先级
|
|
36
|
+
*/
|
|
37
|
+
priority: number;
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* 添加事件处理器
|
|
42
|
+
* @param {Object} config 配置对象
|
|
43
|
+
* @param {string} config.name 处理器名称
|
|
44
|
+
* @param {string} config.dir 处理器所在目录
|
|
45
|
+
* @param {Function} config.App 应用构造函数
|
|
46
|
+
* @param {Object} config.Class 类配置
|
|
47
|
+
*/
|
|
48
|
+
add({ name, dir, App, Class }: {
|
|
49
|
+
dir: dirName;
|
|
50
|
+
name: fileName;
|
|
51
|
+
App: new () => Plugin;
|
|
52
|
+
Class: Plugin;
|
|
53
|
+
}): void;
|
|
54
|
+
/**
|
|
55
|
+
* 删除事件处理器
|
|
56
|
+
*/
|
|
57
|
+
del({ dir, name, key, }: {
|
|
58
|
+
dir: dirName | '';
|
|
59
|
+
name: fileName | '';
|
|
60
|
+
/**
|
|
61
|
+
* 事件键 未传入则删除所有处理器
|
|
62
|
+
*/
|
|
63
|
+
key: string | '';
|
|
64
|
+
}): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* 调用事件处理器
|
|
67
|
+
* @param key 事件键
|
|
68
|
+
* @param args 自定义参数 一般用来传递e之类的
|
|
69
|
+
*/
|
|
70
|
+
call(key: string, args?: {}): Promise<any>;
|
|
71
|
+
/**
|
|
72
|
+
* 检查是否存在指定键的事件处理器
|
|
73
|
+
*/
|
|
74
|
+
has(key: string): boolean;
|
|
75
|
+
};
|
|
76
|
+
export default _default;
|
package/lib/utils/handler.js
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import util from 'util'
|
|
2
|
-
import lodash from 'lodash'
|
|
3
|
-
import logger from './logger.js'
|
|
4
|
-
/**
|
|
5
|
-
* 事件处理器类
|
|
6
|
-
*/
|
|
7
|
-
export default new (class EventHandler {
|
|
8
|
-
events
|
|
9
|
-
constructor () {
|
|
10
|
-
this.events = {}
|
|
1
|
+
import util from 'util'
|
|
2
|
+
import lodash from 'lodash'
|
|
3
|
+
import logger from './logger.js'
|
|
4
|
+
/**
|
|
5
|
+
* 事件处理器类
|
|
6
|
+
*/
|
|
7
|
+
export default new (class EventHandler {
|
|
8
|
+
events
|
|
9
|
+
constructor () {
|
|
10
|
+
this.events = {}
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* 添加事件处理器
|
|
15
|
-
* @param {Object} config 配置对象
|
|
16
|
-
* @param {string} config.name 处理器名称
|
|
17
|
-
* @param {string} config.dir 处理器所在目录
|
|
18
|
-
* @param {Function} config.App 应用构造函数
|
|
19
|
-
* @param {Object} config.Class 类配置
|
|
20
|
-
*/
|
|
21
|
-
add ({ name, dir, App, Class }) {
|
|
22
|
-
for (const cfg of Class.handler) {
|
|
23
|
-
const { key = '', fnc = '', priority = 2000 } = cfg
|
|
24
|
-
if (!key) {
|
|
25
|
-
return logger.error(`[Handler][Add]: [${name}] 缺少 key`)
|
|
26
|
-
}
|
|
27
|
-
if (!fnc) {
|
|
28
|
-
return logger.error(`[Handler][Add]: [${name}] 缺少 fnc`)
|
|
29
|
-
}
|
|
30
|
-
logger.debug(`[Handler][Reg]: [${name}][${key}]`)
|
|
31
|
-
if (!Array.isArray(this.events[key])) { this.events[key] = [] }
|
|
32
|
-
this.events[key].push({ file: { name, dir }, App, key, fnc, priority })
|
|
33
|
-
this.events[key] = lodash.orderBy(this.events[key], ['priority'], ['asc'])
|
|
34
|
-
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 添加事件处理器
|
|
15
|
+
* @param {Object} config 配置对象
|
|
16
|
+
* @param {string} config.name 处理器名称
|
|
17
|
+
* @param {string} config.dir 处理器所在目录
|
|
18
|
+
* @param {Function} config.App 应用构造函数
|
|
19
|
+
* @param {Object} config.Class 类配置
|
|
20
|
+
*/
|
|
21
|
+
add ({ name, dir, App, Class }) {
|
|
22
|
+
for (const cfg of Class.handler) {
|
|
23
|
+
const { key = '', fnc = '', priority = 2000 } = cfg
|
|
24
|
+
if (!key) {
|
|
25
|
+
return logger.error(`[Handler][Add]: [${name}] 缺少 key`)
|
|
26
|
+
}
|
|
27
|
+
if (!fnc) {
|
|
28
|
+
return logger.error(`[Handler][Add]: [${name}] 缺少 fnc`)
|
|
29
|
+
}
|
|
30
|
+
logger.debug(`[Handler][Reg]: [${name}][${key}]`)
|
|
31
|
+
if (!Array.isArray(this.events[key])) { this.events[key] = [] }
|
|
32
|
+
this.events[key].push({ file: { name, dir }, App, key, fnc, priority })
|
|
33
|
+
this.events[key] = lodash.orderBy(this.events[key], ['priority'], ['asc'])
|
|
34
|
+
}
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* 删除事件处理器
|
|
39
|
-
*/
|
|
40
|
-
del ({ dir = '', name = '', key = '' }) {
|
|
41
|
-
/** 这里是删除所有 全部重新初始化 */
|
|
42
|
-
if (!key && !dir && !name) {
|
|
43
|
-
this.events = {}
|
|
44
|
-
return true
|
|
45
|
-
}
|
|
46
|
-
/** 热重载 删除指定目录 */
|
|
47
|
-
if (!key) {
|
|
48
|
-
for (const v of Object.keys(this.events)) {
|
|
49
|
-
this.events[v] = this.events[v].filter(v => v.file.dir !== dir || v.file.name !== name)
|
|
50
|
-
// 如果处理器为空则删除键
|
|
51
|
-
if (!this.events[v].length) {
|
|
52
|
-
delete this.events[v]
|
|
53
|
-
} else {
|
|
54
|
-
this.events[v] = lodash.orderBy(this.events[v], ['priority'], ['asc'])
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return true
|
|
58
|
-
}
|
|
59
|
-
if (!this.events[key]) { return false }
|
|
60
|
-
this.events[key] = this.events[key].filter(v => v.file.dir !== dir || v.file.name !== name)
|
|
61
|
-
this.events[key] = lodash.orderBy(this.events[key], ['priority'], ['asc'])
|
|
62
|
-
return true
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 删除事件处理器
|
|
39
|
+
*/
|
|
40
|
+
del ({ dir = '', name = '', key = '' }) {
|
|
41
|
+
/** 这里是删除所有 全部重新初始化 */
|
|
42
|
+
if (!key && !dir && !name) {
|
|
43
|
+
this.events = {}
|
|
44
|
+
return true
|
|
45
|
+
}
|
|
46
|
+
/** 热重载 删除指定目录 */
|
|
47
|
+
if (!key) {
|
|
48
|
+
for (const v of Object.keys(this.events)) {
|
|
49
|
+
this.events[v] = this.events[v].filter(v => v.file.dir !== dir || v.file.name !== name)
|
|
50
|
+
// 如果处理器为空则删除键
|
|
51
|
+
if (!this.events[v].length) {
|
|
52
|
+
delete this.events[v]
|
|
53
|
+
} else {
|
|
54
|
+
this.events[v] = lodash.orderBy(this.events[v], ['priority'], ['asc'])
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return true
|
|
58
|
+
}
|
|
59
|
+
if (!this.events[key]) { return false }
|
|
60
|
+
this.events[key] = this.events[key].filter(v => v.file.dir !== dir || v.file.name !== name)
|
|
61
|
+
this.events[key] = lodash.orderBy(this.events[key], ['priority'], ['asc'])
|
|
62
|
+
return true
|
|
63
63
|
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* 调用事件处理器
|
|
67
|
-
* @param key 事件键
|
|
68
|
-
* @param args 自定义参数 一般用来传递e之类的
|
|
69
|
-
*/
|
|
70
|
-
async call (key, args = {}) {
|
|
71
|
-
let ret
|
|
72
|
-
for (const v of this.events[key] || []) {
|
|
73
|
-
const App = new v.App()
|
|
74
|
-
if ('e' in args && args.e) { App.e = args.e }
|
|
75
|
-
let done = true
|
|
76
|
-
// 标记函数,用于标记处理器是否执行成功,由处理器自行调用,如果未调用则认为处理器未执行成功
|
|
77
|
-
const reject = (msg = '') => {
|
|
78
|
-
if (msg) { logger.mark(`[Handler][Reject]: [${v.file.dir}][${v.file.name}][${key}] ${msg}`) }
|
|
79
|
-
done = false
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
ret = await App[v.fnc](args, reject)
|
|
83
|
-
if (util.types.isPromise(ret)) { ret = await ret }
|
|
84
|
-
if (done) {
|
|
85
|
-
logger.mark(`[Handler][Done]: [${v.file.dir}][${v.file.name}][${key}]`)
|
|
86
|
-
return ret
|
|
87
|
-
}
|
|
88
|
-
} catch (e) {
|
|
89
|
-
// 产生错误继续下一个处理器
|
|
90
|
-
logger.error(`[Handler][Error]: [${v.file.dir}][${v.file.name}][${key}] ${e}`)
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return ret
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 调用事件处理器
|
|
67
|
+
* @param key 事件键
|
|
68
|
+
* @param args 自定义参数 一般用来传递e之类的
|
|
69
|
+
*/
|
|
70
|
+
async call (key, args = {}) {
|
|
71
|
+
let ret
|
|
72
|
+
for (const v of this.events[key] || []) {
|
|
73
|
+
const App = new v.App()
|
|
74
|
+
if ('e' in args && args.e) { App.e = args.e }
|
|
75
|
+
let done = true
|
|
76
|
+
// 标记函数,用于标记处理器是否执行成功,由处理器自行调用,如果未调用则认为处理器未执行成功
|
|
77
|
+
const reject = (msg = '') => {
|
|
78
|
+
if (msg) { logger.mark(`[Handler][Reject]: [${v.file.dir}][${v.file.name}][${key}] ${msg}`) }
|
|
79
|
+
done = false
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
ret = await App[v.fnc](args, reject)
|
|
83
|
+
if (util.types.isPromise(ret)) { ret = await ret }
|
|
84
|
+
if (done) {
|
|
85
|
+
logger.mark(`[Handler][Done]: [${v.file.dir}][${v.file.name}][${key}]`)
|
|
86
|
+
return ret
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
// 产生错误继续下一个处理器
|
|
90
|
+
logger.error(`[Handler][Error]: [${v.file.dir}][${v.file.name}][${key}] ${e}`)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return ret
|
|
94
94
|
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* 检查是否存在指定键的事件处理器
|
|
98
|
-
*/
|
|
99
|
-
has (key) {
|
|
100
|
-
return !!this.events[key]
|
|
101
|
-
}
|
|
102
|
-
})()
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* 检查是否存在指定键的事件处理器
|
|
98
|
+
*/
|
|
99
|
+
has (key) {
|
|
100
|
+
return !!this.events[key]
|
|
101
|
+
}
|
|
102
|
+
})()
|
package/lib/utils/logger.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import log4js from 'log4js';
|
|
2
|
-
declare const logger: log4js.Logger;
|
|
3
|
-
export default logger;
|
|
1
|
+
import log4js from 'log4js';
|
|
2
|
+
declare const logger: log4js.Logger;
|
|
3
|
+
export default logger;
|