@yunzai-ng/core 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 +661 -0
- package/README.md +51 -0
- package/dist/adapter/accounts.d.ts +174 -0
- package/dist/adapter/accounts.d.ts.map +1 -0
- package/dist/adapter/accounts.js +653 -0
- package/dist/adapter/accounts.js.map +1 -0
- package/dist/adapter/bots.d.ts +142 -0
- package/dist/adapter/bots.d.ts.map +1 -0
- package/dist/adapter/bots.js +454 -0
- package/dist/adapter/bots.js.map +1 -0
- package/dist/adapter/host.d.ts +114 -0
- package/dist/adapter/host.d.ts.map +1 -0
- package/dist/adapter/host.js +90 -0
- package/dist/adapter/host.js.map +1 -0
- package/dist/adapter/login.d.ts +174 -0
- package/dist/adapter/login.d.ts.map +1 -0
- package/dist/adapter/login.js +345 -0
- package/dist/adapter/login.js.map +1 -0
- package/dist/adapter/registry.d.ts +102 -0
- package/dist/adapter/registry.d.ts.map +1 -0
- package/dist/adapter/registry.js +150 -0
- package/dist/adapter/registry.js.map +1 -0
- package/dist/config/core-config.d.ts +151 -0
- package/dist/config/core-config.d.ts.map +1 -0
- package/dist/config/core-config.js +338 -0
- package/dist/config/core-config.js.map +1 -0
- package/dist/config/schema.d.ts +449 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +871 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/store.d.ts +184 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +428 -0
- package/dist/config/store.js.map +1 -0
- package/dist/config/yaml.d.ts +23 -0
- package/dist/config/yaml.d.ts.map +1 -0
- package/dist/config/yaml.js +108 -0
- package/dist/config/yaml.js.map +1 -0
- package/dist/http/client.d.ts +82 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +658 -0
- package/dist/http/client.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/app.d.ts +244 -0
- package/dist/kernel/app.d.ts.map +1 -0
- package/dist/kernel/app.js +654 -0
- package/dist/kernel/app.js.map +1 -0
- package/dist/kernel/kv-sink.d.ts +34 -0
- package/dist/kernel/kv-sink.d.ts.map +1 -0
- package/dist/kernel/kv-sink.js +25 -0
- package/dist/kernel/kv-sink.js.map +1 -0
- package/dist/kernel/policy.d.ts +77 -0
- package/dist/kernel/policy.d.ts.map +1 -0
- package/dist/kernel/policy.js +99 -0
- package/dist/kernel/policy.js.map +1 -0
- package/dist/kernel/runtime.d.ts +117 -0
- package/dist/kernel/runtime.d.ts.map +1 -0
- package/dist/kernel/runtime.js +197 -0
- package/dist/kernel/runtime.js.map +1 -0
- package/dist/kernel/sql-sink.d.ts +36 -0
- package/dist/kernel/sql-sink.d.ts.map +1 -0
- package/dist/kernel/sql-sink.js +114 -0
- package/dist/kernel/sql-sink.js.map +1 -0
- package/dist/logger/format.d.ts +67 -0
- package/dist/logger/format.d.ts.map +1 -0
- package/dist/logger/format.js +218 -0
- package/dist/logger/format.js.map +1 -0
- package/dist/logger/index.d.ts +97 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +363 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/rotate.d.ts +47 -0
- package/dist/logger/rotate.d.ts.map +1 -0
- package/dist/logger/rotate.js +242 -0
- package/dist/logger/rotate.js.map +1 -0
- package/dist/message/segment.d.ts +255 -0
- package/dist/message/segment.d.ts.map +1 -0
- package/dist/message/segment.js +510 -0
- package/dist/message/segment.js.map +1 -0
- package/dist/message/split.d.ts +34 -0
- package/dist/message/split.d.ts.map +1 -0
- package/dist/message/split.js +79 -0
- package/dist/message/split.js.map +1 -0
- package/dist/message/target.d.ts +29 -0
- package/dist/message/target.d.ts.map +1 -0
- package/dist/message/target.js +34 -0
- package/dist/message/target.js.map +1 -0
- package/dist/pipeline/cooldown.d.ts +84 -0
- package/dist/pipeline/cooldown.d.ts.map +1 -0
- package/dist/pipeline/cooldown.js +94 -0
- package/dist/pipeline/cooldown.js.map +1 -0
- package/dist/pipeline/dispatch.d.ts +98 -0
- package/dist/pipeline/dispatch.d.ts.map +1 -0
- package/dist/pipeline/dispatch.js +323 -0
- package/dist/pipeline/dispatch.js.map +1 -0
- package/dist/pipeline/event.d.ts +130 -0
- package/dist/pipeline/event.d.ts.map +1 -0
- package/dist/pipeline/event.js +538 -0
- package/dist/pipeline/event.js.map +1 -0
- package/dist/pipeline/middleware.d.ts +63 -0
- package/dist/pipeline/middleware.d.ts.map +1 -0
- package/dist/pipeline/middleware.js +174 -0
- package/dist/pipeline/middleware.js.map +1 -0
- package/dist/pipeline/prompt.d.ts +80 -0
- package/dist/pipeline/prompt.d.ts.map +1 -0
- package/dist/pipeline/prompt.js +155 -0
- package/dist/pipeline/prompt.js.map +1 -0
- package/dist/pipeline/router.d.ts +98 -0
- package/dist/pipeline/router.d.ts.map +1 -0
- package/dist/pipeline/router.js +489 -0
- package/dist/pipeline/router.js.map +1 -0
- package/dist/platform/detect.d.ts +24 -0
- package/dist/platform/detect.d.ts.map +1 -0
- package/dist/platform/detect.js +178 -0
- package/dist/platform/detect.js.map +1 -0
- package/dist/platform/paths.d.ts +38 -0
- package/dist/platform/paths.d.ts.map +1 -0
- package/dist/platform/paths.js +129 -0
- package/dist/platform/paths.js.map +1 -0
- package/dist/platform/system.d.ts +71 -0
- package/dist/platform/system.d.ts.map +1 -0
- package/dist/platform/system.js +242 -0
- package/dist/platform/system.js.map +1 -0
- package/dist/plugin/context.d.ts +92 -0
- package/dist/plugin/context.d.ts.map +1 -0
- package/dist/plugin/context.js +573 -0
- package/dist/plugin/context.js.map +1 -0
- package/dist/plugin/define.d.ts +92 -0
- package/dist/plugin/define.d.ts.map +1 -0
- package/dist/plugin/define.js +82 -0
- package/dist/plugin/define.js.map +1 -0
- package/dist/plugin/discover.d.ts +106 -0
- package/dist/plugin/discover.d.ts.map +1 -0
- package/dist/plugin/discover.js +254 -0
- package/dist/plugin/discover.js.map +1 -0
- package/dist/plugin/events.d.ts +109 -0
- package/dist/plugin/events.d.ts.map +1 -0
- package/dist/plugin/events.js +209 -0
- package/dist/plugin/events.js.map +1 -0
- package/dist/plugin/hooks.d.ts +266 -0
- package/dist/plugin/hooks.d.ts.map +1 -0
- package/dist/plugin/hooks.js +84 -0
- package/dist/plugin/hooks.js.map +1 -0
- package/dist/plugin/host.d.ts +160 -0
- package/dist/plugin/host.d.ts.map +1 -0
- package/dist/plugin/host.js +546 -0
- package/dist/plugin/host.js.map +1 -0
- package/dist/plugin/market.d.ts +264 -0
- package/dist/plugin/market.d.ts.map +1 -0
- package/dist/plugin/market.js +700 -0
- package/dist/plugin/market.js.map +1 -0
- package/dist/plugin/services.d.ts +116 -0
- package/dist/plugin/services.d.ts.map +1 -0
- package/dist/plugin/services.js +213 -0
- package/dist/plugin/services.js.map +1 -0
- package/dist/plugin/tar.d.ts +65 -0
- package/dist/plugin/tar.d.ts.map +1 -0
- package/dist/plugin/tar.js +277 -0
- package/dist/plugin/tar.js.map +1 -0
- package/dist/render/registry.d.ts +127 -0
- package/dist/render/registry.d.ts.map +1 -0
- package/dist/render/registry.js +306 -0
- package/dist/render/registry.js.map +1 -0
- package/dist/scheduler/index.d.ts +67 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +279 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/server/api.d.ts +179 -0
- package/dist/server/api.d.ts.map +1 -0
- package/dist/server/api.js +602 -0
- package/dist/server/api.js.map +1 -0
- package/dist/server/auth.d.ts +83 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +178 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/browse.d.ts +60 -0
- package/dist/server/browse.d.ts.map +1 -0
- package/dist/server/browse.js +187 -0
- package/dist/server/browse.js.map +1 -0
- package/dist/server/files.d.ts +27 -0
- package/dist/server/files.d.ts.map +1 -0
- package/dist/server/files.js +76 -0
- package/dist/server/files.js.map +1 -0
- package/dist/server/index.d.ts +189 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1123 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/table.d.ts +105 -0
- package/dist/server/table.d.ts.map +1 -0
- package/dist/server/table.js +289 -0
- package/dist/server/table.js.map +1 -0
- package/dist/store/index.d.ts +50 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +120 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/json.d.ts +73 -0
- package/dist/store/json.d.ts.map +1 -0
- package/dist/store/json.js +174 -0
- package/dist/store/json.js.map +1 -0
- package/dist/store/kv.d.ts +126 -0
- package/dist/store/kv.d.ts.map +1 -0
- package/dist/store/kv.js +232 -0
- package/dist/store/kv.js.map +1 -0
- package/dist/store/level.d.ts +103 -0
- package/dist/store/level.d.ts.map +1 -0
- package/dist/store/level.js +119 -0
- package/dist/store/level.js.map +1 -0
- package/dist/store/memory.d.ts +61 -0
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +94 -0
- package/dist/store/memory.js.map +1 -0
- package/dist/store/sql.d.ts +142 -0
- package/dist/store/sql.d.ts.map +1 -0
- package/dist/store/sql.js +246 -0
- package/dist/store/sql.js.map +1 -0
- package/dist/testing/fake.d.ts +109 -0
- package/dist/testing/fake.d.ts.map +1 -0
- package/dist/testing/fake.js +196 -0
- package/dist/testing/fake.js.map +1 -0
- package/dist/testing/index.d.ts +16 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +16 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-adapter.d.ts +205 -0
- package/dist/testing/mock-adapter.d.ts.map +1 -0
- package/dist/testing/mock-adapter.js +309 -0
- package/dist/testing/mock-adapter.js.map +1 -0
- package/dist/util/deep.d.ts +108 -0
- package/dist/util/deep.d.ts.map +1 -0
- package/dist/util/deep.js +275 -0
- package/dist/util/deep.js.map +1 -0
- package/dist/util/defer.d.ts +107 -0
- package/dist/util/defer.d.ts.map +1 -0
- package/dist/util/defer.js +163 -0
- package/dist/util/defer.js.map +1 -0
- package/dist/util/dispose.d.ts +88 -0
- package/dist/util/dispose.d.ts.map +1 -0
- package/dist/util/dispose.js +143 -0
- package/dist/util/dispose.js.map +1 -0
- package/dist/util/duration.d.ts +28 -0
- package/dist/util/duration.d.ts.map +1 -0
- package/dist/util/duration.js +77 -0
- package/dist/util/duration.js.map +1 -0
- package/dist/util/fs.d.ts +110 -0
- package/dist/util/fs.d.ts.map +1 -0
- package/dist/util/fs.js +269 -0
- package/dist/util/fs.js.map +1 -0
- package/dist/util/id.d.ts +49 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +87 -0
- package/dist/util/id.js.map +1 -0
- package/dist/util/lru.d.ts +74 -0
- package/dist/util/lru.d.ts.map +1 -0
- package/dist/util/lru.js +156 -0
- package/dist/util/lru.js.map +1 -0
- package/dist/util/queue.d.ts +64 -0
- package/dist/util/queue.d.ts.map +1 -0
- package/dist/util/queue.js +147 -0
- package/dist/util/queue.js.map +1 -0
- package/dist/util/text.d.ts +86 -0
- package/dist/util/text.d.ts.map +1 -0
- package/dist/util/text.js +182 -0
- package/dist/util/text.js.map +1 -0
- package/package.json +44 -0
- package/src/adapter/accounts.ts +758 -0
- package/src/adapter/bots.ts +582 -0
- package/src/adapter/host.ts +224 -0
- package/src/adapter/login.ts +481 -0
- package/src/adapter/registry.ts +202 -0
- package/src/config/core-config.test.ts +60 -0
- package/src/config/core-config.ts +401 -0
- package/src/config/schema.test.ts +179 -0
- package/src/config/schema.ts +1036 -0
- package/src/config/store.test.ts +245 -0
- package/src/config/store.ts +506 -0
- package/src/config/yaml.ts +119 -0
- package/src/http/client.test.ts +568 -0
- package/src/http/client.ts +777 -0
- package/src/index.ts +106 -0
- package/src/kernel/app.test.ts +267 -0
- package/src/kernel/app.ts +843 -0
- package/src/kernel/kv-sink.ts +58 -0
- package/src/kernel/policy.ts +120 -0
- package/src/kernel/runtime.test.ts +542 -0
- package/src/kernel/runtime.ts +307 -0
- package/src/kernel/sql-sink.ts +154 -0
- package/src/logger/format.ts +259 -0
- package/src/logger/index.ts +427 -0
- package/src/logger/rotate.ts +265 -0
- package/src/message/segment.test.ts +335 -0
- package/src/message/segment.ts +569 -0
- package/src/message/split.ts +97 -0
- package/src/message/target.ts +48 -0
- package/src/pipeline/cooldown.ts +136 -0
- package/src/pipeline/dispatch.ts +419 -0
- package/src/pipeline/event.ts +735 -0
- package/src/pipeline/middleware.test.ts +426 -0
- package/src/pipeline/middleware.ts +199 -0
- package/src/pipeline/prompt.ts +212 -0
- package/src/pipeline/router.test.ts +432 -0
- package/src/pipeline/router.ts +575 -0
- package/src/platform/detect.ts +178 -0
- package/src/platform/paths.ts +147 -0
- package/src/platform/system.test.ts +102 -0
- package/src/platform/system.ts +289 -0
- package/src/plugin/context.test.ts +459 -0
- package/src/plugin/context.ts +757 -0
- package/src/plugin/define.test.ts +120 -0
- package/src/plugin/define.ts +142 -0
- package/src/plugin/discover.test.ts +253 -0
- package/src/plugin/discover.ts +353 -0
- package/src/plugin/events.test.ts +162 -0
- package/src/plugin/events.ts +266 -0
- package/src/plugin/hooks.ts +373 -0
- package/src/plugin/host.test.ts +696 -0
- package/src/plugin/host.ts +738 -0
- package/src/plugin/market.test.ts +781 -0
- package/src/plugin/market.ts +870 -0
- package/src/plugin/services.test.ts +135 -0
- package/src/plugin/services.ts +261 -0
- package/src/plugin/tar.test.ts +158 -0
- package/src/plugin/tar.ts +309 -0
- package/src/render/registry.test.ts +127 -0
- package/src/render/registry.ts +439 -0
- package/src/scheduler/index.ts +357 -0
- package/src/server/api.test.ts +802 -0
- package/src/server/api.ts +869 -0
- package/src/server/auth.ts +201 -0
- package/src/server/browse.test.ts +193 -0
- package/src/server/browse.ts +240 -0
- package/src/server/files.ts +97 -0
- package/src/server/index.test.ts +566 -0
- package/src/server/index.ts +1386 -0
- package/src/server/table.ts +351 -0
- package/src/store/index.ts +156 -0
- package/src/store/json.ts +198 -0
- package/src/store/kv.test.ts +307 -0
- package/src/store/kv.ts +256 -0
- package/src/store/level.ts +167 -0
- package/src/store/memory.ts +109 -0
- package/src/store/sql.test.ts +204 -0
- package/src/store/sql.ts +324 -0
- package/src/testing/fake.ts +297 -0
- package/src/testing/index.ts +15 -0
- package/src/testing/mock-adapter.ts +588 -0
- package/src/util/deep.ts +272 -0
- package/src/util/defer.ts +211 -0
- package/src/util/dispose.ts +169 -0
- package/src/util/duration.ts +82 -0
- package/src/util/fs.ts +279 -0
- package/src/util/id.ts +94 -0
- package/src/util/lru.ts +185 -0
- package/src/util/queue.ts +167 -0
- package/src/util/text.ts +189 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模块职责:文本处理(正则转义、宽度对齐、截断、脱敏、长文本切分)
|
|
3
|
+
* 依赖方向:无
|
|
4
|
+
* 生命周期:纯函数
|
|
5
|
+
* 注意事项:`visualWidth` 按东亚全角字符计 2 列宽 —— 日志表格中混排中英文时,
|
|
6
|
+
* 以 `String.length` 对齐将出现偏移。
|
|
7
|
+
*
|
|
8
|
+
* `maskSecret` 并非装饰:CK、token、Cookie 一旦写入日志文件,使用者发送
|
|
9
|
+
* 日志求助即等同于公开账号凭据。配置项标注 `secret` 者必须经由它处理。
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 转义字符串使其可安全嵌入正则
|
|
13
|
+
*
|
|
14
|
+
* 命令前缀可能含 `#`、`*`、`(` 等字符,直接拼进正则会改变语义甚至抛错。
|
|
15
|
+
* @param input 原始字符串
|
|
16
|
+
* @returns 转义后的字符串
|
|
17
|
+
*/
|
|
18
|
+
export declare function escapeRegExp(input: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* 去掉 ANSI 颜色码
|
|
21
|
+
* @param input 原始字符串
|
|
22
|
+
* @returns 纯文本
|
|
23
|
+
*/
|
|
24
|
+
export declare function stripAnsi(input: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* 计算字符串的终端显示列宽
|
|
27
|
+
* @param input 字符串
|
|
28
|
+
* @returns 列宽(全角字符计 2)
|
|
29
|
+
*/
|
|
30
|
+
export declare function visualWidth(input: string): number;
|
|
31
|
+
/**
|
|
32
|
+
* 按显示宽度右侧补空格
|
|
33
|
+
* @param input 字符串
|
|
34
|
+
* @param width 目标列宽
|
|
35
|
+
* @returns 补齐后的字符串;已超宽时原样返回
|
|
36
|
+
*/
|
|
37
|
+
export declare function padVisualEnd(input: string, width: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* 按显示宽度左侧补空格
|
|
40
|
+
* @param input 字符串
|
|
41
|
+
* @param width 目标列宽
|
|
42
|
+
* @returns 补齐后的字符串
|
|
43
|
+
*/
|
|
44
|
+
export declare function padVisualStart(input: string, width: number): string;
|
|
45
|
+
/**
|
|
46
|
+
* 截断字符串
|
|
47
|
+
*
|
|
48
|
+
* 按码点而非 UTF-16 单元切分,不会把 emoji 劈成两半(`slice` 会)。
|
|
49
|
+
* @param input 字符串
|
|
50
|
+
* @param max 最大字符数
|
|
51
|
+
* @param suffix 超长时的省略号,缺省 `"…"`
|
|
52
|
+
* @returns 截断后的字符串
|
|
53
|
+
*/
|
|
54
|
+
export declare function truncate(input: string, max: number, suffix?: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* 把连续空白折叠成单个空格并去首尾空白
|
|
57
|
+
* @param input 字符串
|
|
58
|
+
* @returns 规整后的字符串
|
|
59
|
+
*/
|
|
60
|
+
export declare function normalizeSpace(input: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* 敏感信息脱敏
|
|
63
|
+
*
|
|
64
|
+
* 保留首尾各若干字符,中间部分打码;长度不足时整体打码,以避免脱敏后仍可推断原值。
|
|
65
|
+
* @param input 原始值
|
|
66
|
+
* @param keep 头尾各保留的字符数,缺省 4
|
|
67
|
+
* @returns 脱敏后的字符串
|
|
68
|
+
*/
|
|
69
|
+
export declare function maskSecret(input: string, keep?: number): string;
|
|
70
|
+
/**
|
|
71
|
+
* 将长文本按最大长度切分为多段
|
|
72
|
+
*
|
|
73
|
+
* 优先在换行处切分,其次在空白处切分,两者均不可行时才强制切分 —— 直接强制切分会使
|
|
74
|
+
* 长文本回复难以阅读。
|
|
75
|
+
* @param input 文本
|
|
76
|
+
* @param max 单段最大字符数
|
|
77
|
+
* @returns 分段数组;输入为空时返回空数组
|
|
78
|
+
*/
|
|
79
|
+
export declare function splitText(input: string, max: number): string[];
|
|
80
|
+
/**
|
|
81
|
+
* 判断字符串是否可能是纯数字 id(QQ 号、群号)
|
|
82
|
+
* @param input 字符串
|
|
83
|
+
* @returns 是否为 1~20 位纯数字
|
|
84
|
+
*/
|
|
85
|
+
export declare function isNumericId(input: string): boolean;
|
|
86
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/util/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AA0BD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAIzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,MAAM,CAO1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模块职责:文本处理(正则转义、宽度对齐、截断、脱敏、长文本切分)
|
|
3
|
+
* 依赖方向:无
|
|
4
|
+
* 生命周期:纯函数
|
|
5
|
+
* 注意事项:`visualWidth` 按东亚全角字符计 2 列宽 —— 日志表格中混排中英文时,
|
|
6
|
+
* 以 `String.length` 对齐将出现偏移。
|
|
7
|
+
*
|
|
8
|
+
* `maskSecret` 并非装饰:CK、token、Cookie 一旦写入日志文件,使用者发送
|
|
9
|
+
* 日志求助即等同于公开账号凭据。配置项标注 `secret` 者必须经由它处理。
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* ANSI 转义序列(用于清理日志文本)
|
|
13
|
+
*
|
|
14
|
+
* `no-control-regex` 是为"误将控制字符写入正则"而设,而此处需要匹配的目标本身
|
|
15
|
+
* 即为控制字符 —— 以 ESC(0x1b) 开头的 CSI 序列,不写入它则无法剥离颜色码。
|
|
16
|
+
*/
|
|
17
|
+
// eslint-disable-next-line no-control-regex
|
|
18
|
+
const ANSI_RE = /\u001b\[[0-9;]*[A-Za-z]/g;
|
|
19
|
+
/** 需要在正则里转义的字符 */
|
|
20
|
+
const REGEX_SPECIAL_RE = /[.*+?^${}()|[\]\\]/g;
|
|
21
|
+
/**
|
|
22
|
+
* 转义字符串使其可安全嵌入正则
|
|
23
|
+
*
|
|
24
|
+
* 命令前缀可能含 `#`、`*`、`(` 等字符,直接拼进正则会改变语义甚至抛错。
|
|
25
|
+
* @param input 原始字符串
|
|
26
|
+
* @returns 转义后的字符串
|
|
27
|
+
*/
|
|
28
|
+
export function escapeRegExp(input) {
|
|
29
|
+
return input.replace(REGEX_SPECIAL_RE, "\\$&");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 去掉 ANSI 颜色码
|
|
33
|
+
* @param input 原始字符串
|
|
34
|
+
* @returns 纯文本
|
|
35
|
+
*/
|
|
36
|
+
export function stripAnsi(input) {
|
|
37
|
+
return input.replace(ANSI_RE, "");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 判断码点是否占两列宽(东亚全角、表意文字、部分符号)
|
|
41
|
+
* @param code 码点
|
|
42
|
+
* @returns 是否全角
|
|
43
|
+
*/
|
|
44
|
+
function isWide(code) {
|
|
45
|
+
return ((code >= 0x1100 && code <= 0x115f) || // 谚文字母
|
|
46
|
+
(code >= 0x2e80 && code <= 0x303e) || // CJK 部首、标点
|
|
47
|
+
(code >= 0x3041 && code <= 0x33ff) || // 假名、CJK 兼容
|
|
48
|
+
(code >= 0x3400 && code <= 0x4dbf) || // CJK 扩展 A
|
|
49
|
+
(code >= 0x4e00 && code <= 0x9fff) || // CJK 基本区
|
|
50
|
+
(code >= 0xa000 && code <= 0xa4cf) || // 彝文
|
|
51
|
+
(code >= 0xac00 && code <= 0xd7a3) || // 谚文音节
|
|
52
|
+
(code >= 0xf900 && code <= 0xfaff) || // CJK 兼容表意
|
|
53
|
+
(code >= 0xfe30 && code <= 0xfe6f) || // CJK 兼容形式
|
|
54
|
+
(code >= 0xff00 && code <= 0xff60) || // 全角 ASCII
|
|
55
|
+
(code >= 0xffe0 && code <= 0xffe6) || // 全角符号
|
|
56
|
+
(code >= 0x1f300 && code <= 0x1f64f) || // 绘文字
|
|
57
|
+
(code >= 0x1f900 && code <= 0x1f9ff) ||
|
|
58
|
+
(code >= 0x20000 && code <= 0x3fffd) // CJK 扩展 B+
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 计算字符串的终端显示列宽
|
|
63
|
+
* @param input 字符串
|
|
64
|
+
* @returns 列宽(全角字符计 2)
|
|
65
|
+
*/
|
|
66
|
+
export function visualWidth(input) {
|
|
67
|
+
let width = 0;
|
|
68
|
+
for (const ch of stripAnsi(input)) {
|
|
69
|
+
const code = ch.codePointAt(0);
|
|
70
|
+
if (code === undefined)
|
|
71
|
+
continue;
|
|
72
|
+
if (code < 0x20 || (code >= 0x7f && code < 0xa0))
|
|
73
|
+
continue; // 控制字符不占宽
|
|
74
|
+
width += isWide(code) ? 2 : 1;
|
|
75
|
+
}
|
|
76
|
+
return width;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 按显示宽度右侧补空格
|
|
80
|
+
* @param input 字符串
|
|
81
|
+
* @param width 目标列宽
|
|
82
|
+
* @returns 补齐后的字符串;已超宽时原样返回
|
|
83
|
+
*/
|
|
84
|
+
export function padVisualEnd(input, width) {
|
|
85
|
+
const pad = width - visualWidth(input);
|
|
86
|
+
return pad > 0 ? input + " ".repeat(pad) : input;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 按显示宽度左侧补空格
|
|
90
|
+
* @param input 字符串
|
|
91
|
+
* @param width 目标列宽
|
|
92
|
+
* @returns 补齐后的字符串
|
|
93
|
+
*/
|
|
94
|
+
export function padVisualStart(input, width) {
|
|
95
|
+
const pad = width - visualWidth(input);
|
|
96
|
+
return pad > 0 ? " ".repeat(pad) + input : input;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 截断字符串
|
|
100
|
+
*
|
|
101
|
+
* 按码点而非 UTF-16 单元切分,不会把 emoji 劈成两半(`slice` 会)。
|
|
102
|
+
* @param input 字符串
|
|
103
|
+
* @param max 最大字符数
|
|
104
|
+
* @param suffix 超长时的省略号,缺省 `"…"`
|
|
105
|
+
* @returns 截断后的字符串
|
|
106
|
+
*/
|
|
107
|
+
export function truncate(input, max, suffix = "…") {
|
|
108
|
+
const chars = [...input];
|
|
109
|
+
if (chars.length <= max)
|
|
110
|
+
return input;
|
|
111
|
+
return chars.slice(0, Math.max(0, max)).join("") + suffix;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 把连续空白折叠成单个空格并去首尾空白
|
|
115
|
+
* @param input 字符串
|
|
116
|
+
* @returns 规整后的字符串
|
|
117
|
+
*/
|
|
118
|
+
export function normalizeSpace(input) {
|
|
119
|
+
return input.replace(/\s+/g, " ").trim();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 敏感信息脱敏
|
|
123
|
+
*
|
|
124
|
+
* 保留首尾各若干字符,中间部分打码;长度不足时整体打码,以避免脱敏后仍可推断原值。
|
|
125
|
+
* @param input 原始值
|
|
126
|
+
* @param keep 头尾各保留的字符数,缺省 4
|
|
127
|
+
* @returns 脱敏后的字符串
|
|
128
|
+
*/
|
|
129
|
+
export function maskSecret(input, keep = 4) {
|
|
130
|
+
if (input === "")
|
|
131
|
+
return "";
|
|
132
|
+
const chars = [...input];
|
|
133
|
+
if (chars.length <= keep * 2)
|
|
134
|
+
return "*".repeat(chars.length);
|
|
135
|
+
const head = chars.slice(0, keep).join("");
|
|
136
|
+
const tail = chars.slice(-keep).join("");
|
|
137
|
+
return `${head}${"*".repeat(Math.min(8, chars.length - keep * 2))}${tail}`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 将长文本按最大长度切分为多段
|
|
141
|
+
*
|
|
142
|
+
* 优先在换行处切分,其次在空白处切分,两者均不可行时才强制切分 —— 直接强制切分会使
|
|
143
|
+
* 长文本回复难以阅读。
|
|
144
|
+
* @param input 文本
|
|
145
|
+
* @param max 单段最大字符数
|
|
146
|
+
* @returns 分段数组;输入为空时返回空数组
|
|
147
|
+
*/
|
|
148
|
+
export function splitText(input, max) {
|
|
149
|
+
if (max <= 0)
|
|
150
|
+
return [input];
|
|
151
|
+
const chars = [...input];
|
|
152
|
+
if (chars.length === 0)
|
|
153
|
+
return [];
|
|
154
|
+
if (chars.length <= max)
|
|
155
|
+
return [input];
|
|
156
|
+
const out = [];
|
|
157
|
+
let rest = input;
|
|
158
|
+
while ([...rest].length > max) {
|
|
159
|
+
const window = [...rest].slice(0, max).join("");
|
|
160
|
+
let cut = window.lastIndexOf("\n");
|
|
161
|
+
if (cut < max * 0.5) {
|
|
162
|
+
const space = window.search(/\s+\S*$/);
|
|
163
|
+
cut = space > max * 0.5 ? space : -1;
|
|
164
|
+
}
|
|
165
|
+
if (cut <= 0)
|
|
166
|
+
cut = window.length;
|
|
167
|
+
out.push(rest.slice(0, cut).trimEnd());
|
|
168
|
+
rest = rest.slice(cut).replace(/^\s+/, "");
|
|
169
|
+
}
|
|
170
|
+
if (rest !== "")
|
|
171
|
+
out.push(rest);
|
|
172
|
+
return out;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* 判断字符串是否可能是纯数字 id(QQ 号、群号)
|
|
176
|
+
* @param input 字符串
|
|
177
|
+
* @returns 是否为 1~20 位纯数字
|
|
178
|
+
*/
|
|
179
|
+
export function isNumericId(input) {
|
|
180
|
+
return /^\d{1,20}$/.test(input);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/util/text.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yunzai-ng/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Yunzai NG 内核:插件宿主、统一事件模型、中间件管线、存储与渲染抽象",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "AGPL-3.0-or-later",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./testing": {
|
|
15
|
+
"types": "./dist/testing/index.d.ts",
|
|
16
|
+
"import": "./dist/testing/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"src"
|
|
23
|
+
],
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@fastify/static": "^8.0.4",
|
|
26
|
+
"@fastify/websocket": "^11.0.2",
|
|
27
|
+
"croner": "^9.0.0",
|
|
28
|
+
"fastify": "^5.2.1",
|
|
29
|
+
"pino": "^9.6.0",
|
|
30
|
+
"undici": "^7.3.0",
|
|
31
|
+
"yaml": "^2.7.0",
|
|
32
|
+
"@yunzai-ng/types": "0.1.0"
|
|
33
|
+
},
|
|
34
|
+
"optionalDependencies": {
|
|
35
|
+
"better-sqlite3": "^11.8.1",
|
|
36
|
+
"classic-level": "^2.0.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/better-sqlite3": "^7.6.12"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -b"
|
|
43
|
+
}
|
|
44
|
+
}
|