@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.
Files changed (357) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +51 -0
  3. package/dist/adapter/accounts.d.ts +174 -0
  4. package/dist/adapter/accounts.d.ts.map +1 -0
  5. package/dist/adapter/accounts.js +653 -0
  6. package/dist/adapter/accounts.js.map +1 -0
  7. package/dist/adapter/bots.d.ts +142 -0
  8. package/dist/adapter/bots.d.ts.map +1 -0
  9. package/dist/adapter/bots.js +454 -0
  10. package/dist/adapter/bots.js.map +1 -0
  11. package/dist/adapter/host.d.ts +114 -0
  12. package/dist/adapter/host.d.ts.map +1 -0
  13. package/dist/adapter/host.js +90 -0
  14. package/dist/adapter/host.js.map +1 -0
  15. package/dist/adapter/login.d.ts +174 -0
  16. package/dist/adapter/login.d.ts.map +1 -0
  17. package/dist/adapter/login.js +345 -0
  18. package/dist/adapter/login.js.map +1 -0
  19. package/dist/adapter/registry.d.ts +102 -0
  20. package/dist/adapter/registry.d.ts.map +1 -0
  21. package/dist/adapter/registry.js +150 -0
  22. package/dist/adapter/registry.js.map +1 -0
  23. package/dist/config/core-config.d.ts +151 -0
  24. package/dist/config/core-config.d.ts.map +1 -0
  25. package/dist/config/core-config.js +338 -0
  26. package/dist/config/core-config.js.map +1 -0
  27. package/dist/config/schema.d.ts +449 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +871 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/store.d.ts +184 -0
  32. package/dist/config/store.d.ts.map +1 -0
  33. package/dist/config/store.js +428 -0
  34. package/dist/config/store.js.map +1 -0
  35. package/dist/config/yaml.d.ts +23 -0
  36. package/dist/config/yaml.d.ts.map +1 -0
  37. package/dist/config/yaml.js +108 -0
  38. package/dist/config/yaml.js.map +1 -0
  39. package/dist/http/client.d.ts +82 -0
  40. package/dist/http/client.d.ts.map +1 -0
  41. package/dist/http/client.js +658 -0
  42. package/dist/http/client.js.map +1 -0
  43. package/dist/index.d.ts +77 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +94 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/kernel/app.d.ts +244 -0
  48. package/dist/kernel/app.d.ts.map +1 -0
  49. package/dist/kernel/app.js +654 -0
  50. package/dist/kernel/app.js.map +1 -0
  51. package/dist/kernel/kv-sink.d.ts +34 -0
  52. package/dist/kernel/kv-sink.d.ts.map +1 -0
  53. package/dist/kernel/kv-sink.js +25 -0
  54. package/dist/kernel/kv-sink.js.map +1 -0
  55. package/dist/kernel/policy.d.ts +77 -0
  56. package/dist/kernel/policy.d.ts.map +1 -0
  57. package/dist/kernel/policy.js +99 -0
  58. package/dist/kernel/policy.js.map +1 -0
  59. package/dist/kernel/runtime.d.ts +117 -0
  60. package/dist/kernel/runtime.d.ts.map +1 -0
  61. package/dist/kernel/runtime.js +197 -0
  62. package/dist/kernel/runtime.js.map +1 -0
  63. package/dist/kernel/sql-sink.d.ts +36 -0
  64. package/dist/kernel/sql-sink.d.ts.map +1 -0
  65. package/dist/kernel/sql-sink.js +114 -0
  66. package/dist/kernel/sql-sink.js.map +1 -0
  67. package/dist/logger/format.d.ts +67 -0
  68. package/dist/logger/format.d.ts.map +1 -0
  69. package/dist/logger/format.js +218 -0
  70. package/dist/logger/format.js.map +1 -0
  71. package/dist/logger/index.d.ts +97 -0
  72. package/dist/logger/index.d.ts.map +1 -0
  73. package/dist/logger/index.js +363 -0
  74. package/dist/logger/index.js.map +1 -0
  75. package/dist/logger/rotate.d.ts +47 -0
  76. package/dist/logger/rotate.d.ts.map +1 -0
  77. package/dist/logger/rotate.js +242 -0
  78. package/dist/logger/rotate.js.map +1 -0
  79. package/dist/message/segment.d.ts +255 -0
  80. package/dist/message/segment.d.ts.map +1 -0
  81. package/dist/message/segment.js +510 -0
  82. package/dist/message/segment.js.map +1 -0
  83. package/dist/message/split.d.ts +34 -0
  84. package/dist/message/split.d.ts.map +1 -0
  85. package/dist/message/split.js +79 -0
  86. package/dist/message/split.js.map +1 -0
  87. package/dist/message/target.d.ts +29 -0
  88. package/dist/message/target.d.ts.map +1 -0
  89. package/dist/message/target.js +34 -0
  90. package/dist/message/target.js.map +1 -0
  91. package/dist/pipeline/cooldown.d.ts +84 -0
  92. package/dist/pipeline/cooldown.d.ts.map +1 -0
  93. package/dist/pipeline/cooldown.js +94 -0
  94. package/dist/pipeline/cooldown.js.map +1 -0
  95. package/dist/pipeline/dispatch.d.ts +98 -0
  96. package/dist/pipeline/dispatch.d.ts.map +1 -0
  97. package/dist/pipeline/dispatch.js +323 -0
  98. package/dist/pipeline/dispatch.js.map +1 -0
  99. package/dist/pipeline/event.d.ts +130 -0
  100. package/dist/pipeline/event.d.ts.map +1 -0
  101. package/dist/pipeline/event.js +538 -0
  102. package/dist/pipeline/event.js.map +1 -0
  103. package/dist/pipeline/middleware.d.ts +63 -0
  104. package/dist/pipeline/middleware.d.ts.map +1 -0
  105. package/dist/pipeline/middleware.js +174 -0
  106. package/dist/pipeline/middleware.js.map +1 -0
  107. package/dist/pipeline/prompt.d.ts +80 -0
  108. package/dist/pipeline/prompt.d.ts.map +1 -0
  109. package/dist/pipeline/prompt.js +155 -0
  110. package/dist/pipeline/prompt.js.map +1 -0
  111. package/dist/pipeline/router.d.ts +98 -0
  112. package/dist/pipeline/router.d.ts.map +1 -0
  113. package/dist/pipeline/router.js +489 -0
  114. package/dist/pipeline/router.js.map +1 -0
  115. package/dist/platform/detect.d.ts +24 -0
  116. package/dist/platform/detect.d.ts.map +1 -0
  117. package/dist/platform/detect.js +178 -0
  118. package/dist/platform/detect.js.map +1 -0
  119. package/dist/platform/paths.d.ts +38 -0
  120. package/dist/platform/paths.d.ts.map +1 -0
  121. package/dist/platform/paths.js +129 -0
  122. package/dist/platform/paths.js.map +1 -0
  123. package/dist/platform/system.d.ts +71 -0
  124. package/dist/platform/system.d.ts.map +1 -0
  125. package/dist/platform/system.js +242 -0
  126. package/dist/platform/system.js.map +1 -0
  127. package/dist/plugin/context.d.ts +92 -0
  128. package/dist/plugin/context.d.ts.map +1 -0
  129. package/dist/plugin/context.js +573 -0
  130. package/dist/plugin/context.js.map +1 -0
  131. package/dist/plugin/define.d.ts +92 -0
  132. package/dist/plugin/define.d.ts.map +1 -0
  133. package/dist/plugin/define.js +82 -0
  134. package/dist/plugin/define.js.map +1 -0
  135. package/dist/plugin/discover.d.ts +106 -0
  136. package/dist/plugin/discover.d.ts.map +1 -0
  137. package/dist/plugin/discover.js +254 -0
  138. package/dist/plugin/discover.js.map +1 -0
  139. package/dist/plugin/events.d.ts +109 -0
  140. package/dist/plugin/events.d.ts.map +1 -0
  141. package/dist/plugin/events.js +209 -0
  142. package/dist/plugin/events.js.map +1 -0
  143. package/dist/plugin/hooks.d.ts +266 -0
  144. package/dist/plugin/hooks.d.ts.map +1 -0
  145. package/dist/plugin/hooks.js +84 -0
  146. package/dist/plugin/hooks.js.map +1 -0
  147. package/dist/plugin/host.d.ts +160 -0
  148. package/dist/plugin/host.d.ts.map +1 -0
  149. package/dist/plugin/host.js +546 -0
  150. package/dist/plugin/host.js.map +1 -0
  151. package/dist/plugin/market.d.ts +264 -0
  152. package/dist/plugin/market.d.ts.map +1 -0
  153. package/dist/plugin/market.js +700 -0
  154. package/dist/plugin/market.js.map +1 -0
  155. package/dist/plugin/services.d.ts +116 -0
  156. package/dist/plugin/services.d.ts.map +1 -0
  157. package/dist/plugin/services.js +213 -0
  158. package/dist/plugin/services.js.map +1 -0
  159. package/dist/plugin/tar.d.ts +65 -0
  160. package/dist/plugin/tar.d.ts.map +1 -0
  161. package/dist/plugin/tar.js +277 -0
  162. package/dist/plugin/tar.js.map +1 -0
  163. package/dist/render/registry.d.ts +127 -0
  164. package/dist/render/registry.d.ts.map +1 -0
  165. package/dist/render/registry.js +306 -0
  166. package/dist/render/registry.js.map +1 -0
  167. package/dist/scheduler/index.d.ts +67 -0
  168. package/dist/scheduler/index.d.ts.map +1 -0
  169. package/dist/scheduler/index.js +279 -0
  170. package/dist/scheduler/index.js.map +1 -0
  171. package/dist/server/api.d.ts +179 -0
  172. package/dist/server/api.d.ts.map +1 -0
  173. package/dist/server/api.js +602 -0
  174. package/dist/server/api.js.map +1 -0
  175. package/dist/server/auth.d.ts +83 -0
  176. package/dist/server/auth.d.ts.map +1 -0
  177. package/dist/server/auth.js +178 -0
  178. package/dist/server/auth.js.map +1 -0
  179. package/dist/server/browse.d.ts +60 -0
  180. package/dist/server/browse.d.ts.map +1 -0
  181. package/dist/server/browse.js +187 -0
  182. package/dist/server/browse.js.map +1 -0
  183. package/dist/server/files.d.ts +27 -0
  184. package/dist/server/files.d.ts.map +1 -0
  185. package/dist/server/files.js +76 -0
  186. package/dist/server/files.js.map +1 -0
  187. package/dist/server/index.d.ts +189 -0
  188. package/dist/server/index.d.ts.map +1 -0
  189. package/dist/server/index.js +1123 -0
  190. package/dist/server/index.js.map +1 -0
  191. package/dist/server/table.d.ts +105 -0
  192. package/dist/server/table.d.ts.map +1 -0
  193. package/dist/server/table.js +289 -0
  194. package/dist/server/table.js.map +1 -0
  195. package/dist/store/index.d.ts +50 -0
  196. package/dist/store/index.d.ts.map +1 -0
  197. package/dist/store/index.js +120 -0
  198. package/dist/store/index.js.map +1 -0
  199. package/dist/store/json.d.ts +73 -0
  200. package/dist/store/json.d.ts.map +1 -0
  201. package/dist/store/json.js +174 -0
  202. package/dist/store/json.js.map +1 -0
  203. package/dist/store/kv.d.ts +126 -0
  204. package/dist/store/kv.d.ts.map +1 -0
  205. package/dist/store/kv.js +232 -0
  206. package/dist/store/kv.js.map +1 -0
  207. package/dist/store/level.d.ts +103 -0
  208. package/dist/store/level.d.ts.map +1 -0
  209. package/dist/store/level.js +119 -0
  210. package/dist/store/level.js.map +1 -0
  211. package/dist/store/memory.d.ts +61 -0
  212. package/dist/store/memory.d.ts.map +1 -0
  213. package/dist/store/memory.js +94 -0
  214. package/dist/store/memory.js.map +1 -0
  215. package/dist/store/sql.d.ts +142 -0
  216. package/dist/store/sql.d.ts.map +1 -0
  217. package/dist/store/sql.js +246 -0
  218. package/dist/store/sql.js.map +1 -0
  219. package/dist/testing/fake.d.ts +109 -0
  220. package/dist/testing/fake.d.ts.map +1 -0
  221. package/dist/testing/fake.js +196 -0
  222. package/dist/testing/fake.js.map +1 -0
  223. package/dist/testing/index.d.ts +16 -0
  224. package/dist/testing/index.d.ts.map +1 -0
  225. package/dist/testing/index.js +16 -0
  226. package/dist/testing/index.js.map +1 -0
  227. package/dist/testing/mock-adapter.d.ts +205 -0
  228. package/dist/testing/mock-adapter.d.ts.map +1 -0
  229. package/dist/testing/mock-adapter.js +309 -0
  230. package/dist/testing/mock-adapter.js.map +1 -0
  231. package/dist/util/deep.d.ts +108 -0
  232. package/dist/util/deep.d.ts.map +1 -0
  233. package/dist/util/deep.js +275 -0
  234. package/dist/util/deep.js.map +1 -0
  235. package/dist/util/defer.d.ts +107 -0
  236. package/dist/util/defer.d.ts.map +1 -0
  237. package/dist/util/defer.js +163 -0
  238. package/dist/util/defer.js.map +1 -0
  239. package/dist/util/dispose.d.ts +88 -0
  240. package/dist/util/dispose.d.ts.map +1 -0
  241. package/dist/util/dispose.js +143 -0
  242. package/dist/util/dispose.js.map +1 -0
  243. package/dist/util/duration.d.ts +28 -0
  244. package/dist/util/duration.d.ts.map +1 -0
  245. package/dist/util/duration.js +77 -0
  246. package/dist/util/duration.js.map +1 -0
  247. package/dist/util/fs.d.ts +110 -0
  248. package/dist/util/fs.d.ts.map +1 -0
  249. package/dist/util/fs.js +269 -0
  250. package/dist/util/fs.js.map +1 -0
  251. package/dist/util/id.d.ts +49 -0
  252. package/dist/util/id.d.ts.map +1 -0
  253. package/dist/util/id.js +87 -0
  254. package/dist/util/id.js.map +1 -0
  255. package/dist/util/lru.d.ts +74 -0
  256. package/dist/util/lru.d.ts.map +1 -0
  257. package/dist/util/lru.js +156 -0
  258. package/dist/util/lru.js.map +1 -0
  259. package/dist/util/queue.d.ts +64 -0
  260. package/dist/util/queue.d.ts.map +1 -0
  261. package/dist/util/queue.js +147 -0
  262. package/dist/util/queue.js.map +1 -0
  263. package/dist/util/text.d.ts +86 -0
  264. package/dist/util/text.d.ts.map +1 -0
  265. package/dist/util/text.js +182 -0
  266. package/dist/util/text.js.map +1 -0
  267. package/package.json +44 -0
  268. package/src/adapter/accounts.ts +758 -0
  269. package/src/adapter/bots.ts +582 -0
  270. package/src/adapter/host.ts +224 -0
  271. package/src/adapter/login.ts +481 -0
  272. package/src/adapter/registry.ts +202 -0
  273. package/src/config/core-config.test.ts +60 -0
  274. package/src/config/core-config.ts +401 -0
  275. package/src/config/schema.test.ts +179 -0
  276. package/src/config/schema.ts +1036 -0
  277. package/src/config/store.test.ts +245 -0
  278. package/src/config/store.ts +506 -0
  279. package/src/config/yaml.ts +119 -0
  280. package/src/http/client.test.ts +568 -0
  281. package/src/http/client.ts +777 -0
  282. package/src/index.ts +106 -0
  283. package/src/kernel/app.test.ts +267 -0
  284. package/src/kernel/app.ts +843 -0
  285. package/src/kernel/kv-sink.ts +58 -0
  286. package/src/kernel/policy.ts +120 -0
  287. package/src/kernel/runtime.test.ts +542 -0
  288. package/src/kernel/runtime.ts +307 -0
  289. package/src/kernel/sql-sink.ts +154 -0
  290. package/src/logger/format.ts +259 -0
  291. package/src/logger/index.ts +427 -0
  292. package/src/logger/rotate.ts +265 -0
  293. package/src/message/segment.test.ts +335 -0
  294. package/src/message/segment.ts +569 -0
  295. package/src/message/split.ts +97 -0
  296. package/src/message/target.ts +48 -0
  297. package/src/pipeline/cooldown.ts +136 -0
  298. package/src/pipeline/dispatch.ts +419 -0
  299. package/src/pipeline/event.ts +735 -0
  300. package/src/pipeline/middleware.test.ts +426 -0
  301. package/src/pipeline/middleware.ts +199 -0
  302. package/src/pipeline/prompt.ts +212 -0
  303. package/src/pipeline/router.test.ts +432 -0
  304. package/src/pipeline/router.ts +575 -0
  305. package/src/platform/detect.ts +178 -0
  306. package/src/platform/paths.ts +147 -0
  307. package/src/platform/system.test.ts +102 -0
  308. package/src/platform/system.ts +289 -0
  309. package/src/plugin/context.test.ts +459 -0
  310. package/src/plugin/context.ts +757 -0
  311. package/src/plugin/define.test.ts +120 -0
  312. package/src/plugin/define.ts +142 -0
  313. package/src/plugin/discover.test.ts +253 -0
  314. package/src/plugin/discover.ts +353 -0
  315. package/src/plugin/events.test.ts +162 -0
  316. package/src/plugin/events.ts +266 -0
  317. package/src/plugin/hooks.ts +373 -0
  318. package/src/plugin/host.test.ts +696 -0
  319. package/src/plugin/host.ts +738 -0
  320. package/src/plugin/market.test.ts +781 -0
  321. package/src/plugin/market.ts +870 -0
  322. package/src/plugin/services.test.ts +135 -0
  323. package/src/plugin/services.ts +261 -0
  324. package/src/plugin/tar.test.ts +158 -0
  325. package/src/plugin/tar.ts +309 -0
  326. package/src/render/registry.test.ts +127 -0
  327. package/src/render/registry.ts +439 -0
  328. package/src/scheduler/index.ts +357 -0
  329. package/src/server/api.test.ts +802 -0
  330. package/src/server/api.ts +869 -0
  331. package/src/server/auth.ts +201 -0
  332. package/src/server/browse.test.ts +193 -0
  333. package/src/server/browse.ts +240 -0
  334. package/src/server/files.ts +97 -0
  335. package/src/server/index.test.ts +566 -0
  336. package/src/server/index.ts +1386 -0
  337. package/src/server/table.ts +351 -0
  338. package/src/store/index.ts +156 -0
  339. package/src/store/json.ts +198 -0
  340. package/src/store/kv.test.ts +307 -0
  341. package/src/store/kv.ts +256 -0
  342. package/src/store/level.ts +167 -0
  343. package/src/store/memory.ts +109 -0
  344. package/src/store/sql.test.ts +204 -0
  345. package/src/store/sql.ts +324 -0
  346. package/src/testing/fake.ts +297 -0
  347. package/src/testing/index.ts +15 -0
  348. package/src/testing/mock-adapter.ts +588 -0
  349. package/src/util/deep.ts +272 -0
  350. package/src/util/defer.ts +211 -0
  351. package/src/util/dispose.ts +169 -0
  352. package/src/util/duration.ts +82 -0
  353. package/src/util/fs.ts +279 -0
  354. package/src/util/id.ts +94 -0
  355. package/src/util/lru.ts +185 -0
  356. package/src/util/queue.ts +167 -0
  357. 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
+ }