xray-manager 1.8.4 → 2.0.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 (324) hide show
  1. package/README.md +102 -42
  2. package/dist/cli.mjs +8587 -0
  3. package/dist/cli.mjs.map +7 -0
  4. package/package.json +13 -5
  5. package/dist/cli.d.ts +0 -11
  6. package/dist/cli.d.ts.map +0 -1
  7. package/dist/cli.js +0 -134
  8. package/dist/cli.js.map +0 -1
  9. package/dist/commands/clash.d.ts +0 -20
  10. package/dist/commands/clash.d.ts.map +0 -1
  11. package/dist/commands/clash.js +0 -156
  12. package/dist/commands/clash.js.map +0 -1
  13. package/dist/commands/config.d.ts +0 -56
  14. package/dist/commands/config.d.ts.map +0 -1
  15. package/dist/commands/config.js +0 -461
  16. package/dist/commands/config.js.map +0 -1
  17. package/dist/commands/interactive.d.ts +0 -55
  18. package/dist/commands/interactive.d.ts.map +0 -1
  19. package/dist/commands/interactive.js +0 -418
  20. package/dist/commands/interactive.js.map +0 -1
  21. package/dist/commands/logs.d.ts +0 -62
  22. package/dist/commands/logs.d.ts.map +0 -1
  23. package/dist/commands/logs.js +0 -389
  24. package/dist/commands/logs.js.map +0 -1
  25. package/dist/commands/quota.d.ts +0 -54
  26. package/dist/commands/quota.d.ts.map +0 -1
  27. package/dist/commands/quota.js +0 -661
  28. package/dist/commands/quota.js.map +0 -1
  29. package/dist/commands/review.d.ts +0 -8
  30. package/dist/commands/review.d.ts.map +0 -1
  31. package/dist/commands/review.js +0 -79
  32. package/dist/commands/review.js.map +0 -1
  33. package/dist/commands/service.d.ts +0 -43
  34. package/dist/commands/service.d.ts.map +0 -1
  35. package/dist/commands/service.js +0 -202
  36. package/dist/commands/service.js.map +0 -1
  37. package/dist/commands/user.d.ts +0 -49
  38. package/dist/commands/user.d.ts.map +0 -1
  39. package/dist/commands/user.js +0 -371
  40. package/dist/commands/user.js.map +0 -1
  41. package/dist/components/dashboard-widget.d.ts +0 -21
  42. package/dist/components/dashboard-widget.d.ts.map +0 -1
  43. package/dist/components/dashboard-widget.js +0 -234
  44. package/dist/components/dashboard-widget.js.map +0 -1
  45. package/dist/components/progress-bar.d.ts +0 -67
  46. package/dist/components/progress-bar.d.ts.map +0 -1
  47. package/dist/components/progress-bar.js +0 -138
  48. package/dist/components/progress-bar.js.map +0 -1
  49. package/dist/components/user-table.d.ts +0 -8
  50. package/dist/components/user-table.d.ts.map +0 -1
  51. package/dist/components/user-table.js +0 -91
  52. package/dist/components/user-table.js.map +0 -1
  53. package/dist/config/i18n.d.ts +0 -136
  54. package/dist/config/i18n.d.ts.map +0 -1
  55. package/dist/config/i18n.js +0 -323
  56. package/dist/config/i18n.js.map +0 -1
  57. package/dist/constants/error-codes.d.ts +0 -344
  58. package/dist/constants/error-codes.d.ts.map +0 -1
  59. package/dist/constants/error-codes.js +0 -462
  60. package/dist/constants/error-codes.js.map +0 -1
  61. package/dist/constants/exit-codes.d.ts +0 -49
  62. package/dist/constants/exit-codes.d.ts.map +0 -1
  63. package/dist/constants/exit-codes.js +0 -100
  64. package/dist/constants/exit-codes.js.map +0 -1
  65. package/dist/constants/paths.d.ts +0 -63
  66. package/dist/constants/paths.d.ts.map +0 -1
  67. package/dist/constants/paths.js +0 -78
  68. package/dist/constants/paths.js.map +0 -1
  69. package/dist/constants/quota.d.ts +0 -126
  70. package/dist/constants/quota.d.ts.map +0 -1
  71. package/dist/constants/quota.js +0 -135
  72. package/dist/constants/quota.js.map +0 -1
  73. package/dist/constants/review.d.ts +0 -14
  74. package/dist/constants/review.d.ts.map +0 -1
  75. package/dist/constants/review.js +0 -33
  76. package/dist/constants/review.js.map +0 -1
  77. package/dist/constants/supported-distros.d.ts +0 -17
  78. package/dist/constants/supported-distros.d.ts.map +0 -1
  79. package/dist/constants/supported-distros.js +0 -68
  80. package/dist/constants/supported-distros.js.map +0 -1
  81. package/dist/constants/theme.d.ts +0 -34
  82. package/dist/constants/theme.d.ts.map +0 -1
  83. package/dist/constants/theme.js +0 -52
  84. package/dist/constants/theme.js.map +0 -1
  85. package/dist/constants/timeouts.d.ts +0 -84
  86. package/dist/constants/timeouts.d.ts.map +0 -1
  87. package/dist/constants/timeouts.js +0 -111
  88. package/dist/constants/timeouts.js.map +0 -1
  89. package/dist/constants/ui-symbols.d.ts +0 -47
  90. package/dist/constants/ui-symbols.d.ts.map +0 -1
  91. package/dist/constants/ui-symbols.js +0 -48
  92. package/dist/constants/ui-symbols.js.map +0 -1
  93. package/dist/services/clash-config.d.ts +0 -16
  94. package/dist/services/clash-config.d.ts.map +0 -1
  95. package/dist/services/clash-config.js +0 -107
  96. package/dist/services/clash-config.js.map +0 -1
  97. package/dist/services/config-manager.d.ts +0 -90
  98. package/dist/services/config-manager.d.ts.map +0 -1
  99. package/dist/services/config-manager.js +0 -307
  100. package/dist/services/config-manager.js.map +0 -1
  101. package/dist/services/layout-manager.d.ts +0 -94
  102. package/dist/services/layout-manager.d.ts.map +0 -1
  103. package/dist/services/layout-manager.js +0 -192
  104. package/dist/services/layout-manager.js.map +0 -1
  105. package/dist/services/log-manager.d.ts +0 -157
  106. package/dist/services/log-manager.d.ts.map +0 -1
  107. package/dist/services/log-manager.js +0 -397
  108. package/dist/services/log-manager.js.map +0 -1
  109. package/dist/services/navigation-manager.d.ts +0 -23
  110. package/dist/services/navigation-manager.d.ts.map +0 -1
  111. package/dist/services/navigation-manager.js +0 -39
  112. package/dist/services/navigation-manager.js.map +0 -1
  113. package/dist/services/platform-detector.d.ts +0 -10
  114. package/dist/services/platform-detector.d.ts.map +0 -1
  115. package/dist/services/platform-detector.js +0 -106
  116. package/dist/services/platform-detector.js.map +0 -1
  117. package/dist/services/public-ip-manager.d.ts +0 -78
  118. package/dist/services/public-ip-manager.d.ts.map +0 -1
  119. package/dist/services/public-ip-manager.js +0 -296
  120. package/dist/services/public-ip-manager.js.map +0 -1
  121. package/dist/services/quota-enforcer.d.ts +0 -86
  122. package/dist/services/quota-enforcer.d.ts.map +0 -1
  123. package/dist/services/quota-enforcer.js +0 -151
  124. package/dist/services/quota-enforcer.js.map +0 -1
  125. package/dist/services/quota-manager.d.ts +0 -101
  126. package/dist/services/quota-manager.d.ts.map +0 -1
  127. package/dist/services/quota-manager.js +0 -257
  128. package/dist/services/quota-manager.js.map +0 -1
  129. package/dist/services/review/areas/community.d.ts +0 -9
  130. package/dist/services/review/areas/community.d.ts.map +0 -1
  131. package/dist/services/review/areas/community.js +0 -59
  132. package/dist/services/review/areas/community.js.map +0 -1
  133. package/dist/services/review/areas/contribution.d.ts +0 -9
  134. package/dist/services/review/areas/contribution.d.ts.map +0 -1
  135. package/dist/services/review/areas/contribution.js +0 -107
  136. package/dist/services/review/areas/contribution.js.map +0 -1
  137. package/dist/services/review/areas/documentation.d.ts +0 -9
  138. package/dist/services/review/areas/documentation.d.ts.map +0 -1
  139. package/dist/services/review/areas/documentation.js +0 -110
  140. package/dist/services/review/areas/documentation.js.map +0 -1
  141. package/dist/services/review/areas/license.d.ts +0 -9
  142. package/dist/services/review/areas/license.d.ts.map +0 -1
  143. package/dist/services/review/areas/license.js +0 -86
  144. package/dist/services/review/areas/license.js.map +0 -1
  145. package/dist/services/review/areas/quality.d.ts +0 -9
  146. package/dist/services/review/areas/quality.d.ts.map +0 -1
  147. package/dist/services/review/areas/quality.js +0 -84
  148. package/dist/services/review/areas/quality.js.map +0 -1
  149. package/dist/services/review/areas/security.d.ts +0 -9
  150. package/dist/services/review/areas/security.d.ts.map +0 -1
  151. package/dist/services/review/areas/security.js +0 -64
  152. package/dist/services/review/areas/security.js.map +0 -1
  153. package/dist/services/review/evidence.d.ts +0 -10
  154. package/dist/services/review/evidence.d.ts.map +0 -1
  155. package/dist/services/review/evidence.js +0 -40
  156. package/dist/services/review/evidence.js.map +0 -1
  157. package/dist/services/review/recommendations-filter.d.ts +0 -12
  158. package/dist/services/review/recommendations-filter.d.ts.map +0 -1
  159. package/dist/services/review/recommendations-filter.js +0 -20
  160. package/dist/services/review/recommendations-filter.js.map +0 -1
  161. package/dist/services/review/repo-scanner.d.ts +0 -8
  162. package/dist/services/review/repo-scanner.d.ts.map +0 -1
  163. package/dist/services/review/repo-scanner.js +0 -15
  164. package/dist/services/review/repo-scanner.js.map +0 -1
  165. package/dist/services/review/report-renderer.d.ts +0 -15
  166. package/dist/services/review/report-renderer.d.ts.map +0 -1
  167. package/dist/services/review/report-renderer.js +0 -120
  168. package/dist/services/review/report-renderer.js.map +0 -1
  169. package/dist/services/review/review-engine.d.ts +0 -15
  170. package/dist/services/review/review-engine.d.ts.map +0 -1
  171. package/dist/services/review/review-engine.js +0 -61
  172. package/dist/services/review/review-engine.js.map +0 -1
  173. package/dist/services/review/summary-builder.d.ts +0 -8
  174. package/dist/services/review/summary-builder.d.ts.map +0 -1
  175. package/dist/services/review/summary-builder.js +0 -26
  176. package/dist/services/review/summary-builder.js.map +0 -1
  177. package/dist/services/screen-manager.d.ts +0 -13
  178. package/dist/services/screen-manager.d.ts.map +0 -1
  179. package/dist/services/screen-manager.js +0 -42
  180. package/dist/services/screen-manager.js.map +0 -1
  181. package/dist/services/stats-config-manager.d.ts +0 -110
  182. package/dist/services/stats-config-manager.d.ts.map +0 -1
  183. package/dist/services/stats-config-manager.js +0 -443
  184. package/dist/services/stats-config-manager.js.map +0 -1
  185. package/dist/services/systemd-manager.d.ts +0 -197
  186. package/dist/services/systemd-manager.d.ts.map +0 -1
  187. package/dist/services/systemd-manager.js +0 -458
  188. package/dist/services/systemd-manager.js.map +0 -1
  189. package/dist/services/traffic-manager.d.ts +0 -106
  190. package/dist/services/traffic-manager.d.ts.map +0 -1
  191. package/dist/services/traffic-manager.js +0 -368
  192. package/dist/services/traffic-manager.js.map +0 -1
  193. package/dist/services/user-manager.d.ts +0 -90
  194. package/dist/services/user-manager.d.ts.map +0 -1
  195. package/dist/services/user-manager.js +0 -347
  196. package/dist/services/user-manager.js.map +0 -1
  197. package/dist/services/user-metadata-manager.d.ts +0 -85
  198. package/dist/services/user-metadata-manager.d.ts.map +0 -1
  199. package/dist/services/user-metadata-manager.js +0 -181
  200. package/dist/services/user-metadata-manager.js.map +0 -1
  201. package/dist/types/config.d.ts +0 -340
  202. package/dist/types/config.d.ts.map +0 -1
  203. package/dist/types/config.js +0 -7
  204. package/dist/types/config.js.map +0 -1
  205. package/dist/types/layout.d.ts +0 -119
  206. package/dist/types/layout.d.ts.map +0 -1
  207. package/dist/types/layout.js +0 -142
  208. package/dist/types/layout.js.map +0 -1
  209. package/dist/types/platform.d.ts +0 -72
  210. package/dist/types/platform.d.ts.map +0 -1
  211. package/dist/types/platform.js +0 -38
  212. package/dist/types/platform.js.map +0 -1
  213. package/dist/types/quota.d.ts +0 -158
  214. package/dist/types/quota.d.ts.map +0 -1
  215. package/dist/types/quota.js +0 -26
  216. package/dist/types/quota.js.map +0 -1
  217. package/dist/types/review.d.ts +0 -62
  218. package/dist/types/review.d.ts.map +0 -1
  219. package/dist/types/review.js +0 -8
  220. package/dist/types/review.js.map +0 -1
  221. package/dist/types/server-config.d.ts +0 -53
  222. package/dist/types/server-config.d.ts.map +0 -1
  223. package/dist/types/server-config.js +0 -19
  224. package/dist/types/server-config.js.map +0 -1
  225. package/dist/types/service.d.ts +0 -96
  226. package/dist/types/service.d.ts.map +0 -1
  227. package/dist/types/service.js +0 -7
  228. package/dist/types/service.js.map +0 -1
  229. package/dist/types/terminal.d.ts +0 -35
  230. package/dist/types/terminal.d.ts.map +0 -1
  231. package/dist/types/terminal.js +0 -20
  232. package/dist/types/terminal.js.map +0 -1
  233. package/dist/types/ui-components.d.ts +0 -53
  234. package/dist/types/ui-components.d.ts.map +0 -1
  235. package/dist/types/ui-components.js +0 -3
  236. package/dist/types/ui-components.js.map +0 -1
  237. package/dist/types/user-metadata.d.ts +0 -43
  238. package/dist/types/user-metadata.d.ts.map +0 -1
  239. package/dist/types/user-metadata.js +0 -17
  240. package/dist/types/user-metadata.js.map +0 -1
  241. package/dist/types/user.d.ts +0 -134
  242. package/dist/types/user.d.ts.map +0 -1
  243. package/dist/types/user.js +0 -7
  244. package/dist/types/user.js.map +0 -1
  245. package/dist/utils/clipboard.d.ts +0 -21
  246. package/dist/utils/clipboard.d.ts.map +0 -1
  247. package/dist/utils/clipboard.js +0 -45
  248. package/dist/utils/clipboard.js.map +0 -1
  249. package/dist/utils/error-formatter.d.ts +0 -60
  250. package/dist/utils/error-formatter.d.ts.map +0 -1
  251. package/dist/utils/error-formatter.js +0 -244
  252. package/dist/utils/error-formatter.js.map +0 -1
  253. package/dist/utils/errors.d.ts +0 -92
  254. package/dist/utils/errors.d.ts.map +0 -1
  255. package/dist/utils/errors.js +0 -143
  256. package/dist/utils/errors.js.map +0 -1
  257. package/dist/utils/firewall.d.ts +0 -14
  258. package/dist/utils/firewall.d.ts.map +0 -1
  259. package/dist/utils/firewall.js +0 -78
  260. package/dist/utils/firewall.js.map +0 -1
  261. package/dist/utils/format.d.ts +0 -93
  262. package/dist/utils/format.d.ts.map +0 -1
  263. package/dist/utils/format.js +0 -240
  264. package/dist/utils/format.js.map +0 -1
  265. package/dist/utils/icons.d.ts +0 -53
  266. package/dist/utils/icons.d.ts.map +0 -1
  267. package/dist/utils/icons.js +0 -143
  268. package/dist/utils/icons.js.map +0 -1
  269. package/dist/utils/layout.d.ts +0 -142
  270. package/dist/utils/layout.d.ts.map +0 -1
  271. package/dist/utils/layout.js +0 -381
  272. package/dist/utils/layout.js.map +0 -1
  273. package/dist/utils/logger.d.ts +0 -160
  274. package/dist/utils/logger.d.ts.map +0 -1
  275. package/dist/utils/logger.js +0 -351
  276. package/dist/utils/logger.js.map +0 -1
  277. package/dist/utils/network.d.ts +0 -39
  278. package/dist/utils/network.d.ts.map +0 -1
  279. package/dist/utils/network.js +0 -227
  280. package/dist/utils/network.js.map +0 -1
  281. package/dist/utils/os-detection.d.ts +0 -10
  282. package/dist/utils/os-detection.d.ts.map +0 -1
  283. package/dist/utils/os-detection.js +0 -86
  284. package/dist/utils/os-detection.js.map +0 -1
  285. package/dist/utils/preflight.d.ts +0 -57
  286. package/dist/utils/preflight.d.ts.map +0 -1
  287. package/dist/utils/preflight.js +0 -215
  288. package/dist/utils/preflight.js.map +0 -1
  289. package/dist/utils/repo-scan.d.ts +0 -54
  290. package/dist/utils/repo-scan.d.ts.map +0 -1
  291. package/dist/utils/repo-scan.js +0 -165
  292. package/dist/utils/repo-scan.js.map +0 -1
  293. package/dist/utils/report-output.d.ts +0 -13
  294. package/dist/utils/report-output.d.ts.map +0 -1
  295. package/dist/utils/report-output.js +0 -33
  296. package/dist/utils/report-output.js.map +0 -1
  297. package/dist/utils/review-id.d.ts +0 -8
  298. package/dist/utils/review-id.d.ts.map +0 -1
  299. package/dist/utils/review-id.js +0 -17
  300. package/dist/utils/review-id.js.map +0 -1
  301. package/dist/utils/splash.d.ts +0 -21
  302. package/dist/utils/splash.d.ts.map +0 -1
  303. package/dist/utils/splash.js +0 -179
  304. package/dist/utils/splash.js.map +0 -1
  305. package/dist/utils/terminal.d.ts +0 -32
  306. package/dist/utils/terminal.d.ts.map +0 -1
  307. package/dist/utils/terminal.js +0 -93
  308. package/dist/utils/terminal.js.map +0 -1
  309. package/dist/utils/traffic-formatter.d.ts +0 -45
  310. package/dist/utils/traffic-formatter.d.ts.map +0 -1
  311. package/dist/utils/traffic-formatter.js +0 -131
  312. package/dist/utils/traffic-formatter.js.map +0 -1
  313. package/dist/utils/validator.d.ts +0 -102
  314. package/dist/utils/validator.d.ts.map +0 -1
  315. package/dist/utils/validator.js +0 -238
  316. package/dist/utils/validator.js.map +0 -1
  317. package/dist/utils/vless-link.d.ts +0 -27
  318. package/dist/utils/vless-link.d.ts.map +0 -1
  319. package/dist/utils/vless-link.js +0 -69
  320. package/dist/utils/vless-link.js.map +0 -1
  321. package/dist/utils/which.d.ts +0 -13
  322. package/dist/utils/which.d.ts.map +0 -1
  323. package/dist/utils/which.js +0 -28
  324. package/dist/utils/which.js.map +0 -1
@@ -1,240 +0,0 @@
1
- "use strict";
2
- /**
3
- * 格式化工具函数
4
- * @module utils/format
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.maskSensitiveValue = maskSensitiveValue;
8
- exports.formatUptime = formatUptime;
9
- exports.formatBytes = formatBytes;
10
- exports.formatDate = formatDate;
11
- exports.formatRelativeTime = formatRelativeTime;
12
- exports.formatDuration = formatDuration;
13
- exports.formatJSON = formatJSON;
14
- exports.truncate = truncate;
15
- exports.pad = pad;
16
- exports.formatTableRow = formatTableRow;
17
- exports.formatPercentage = formatPercentage;
18
- /**
19
- * 脱敏显示敏感信息(前4后4)
20
- * @param value 原始值
21
- * @param options 脱敏选项
22
- * @returns 脱敏后的值
23
- */
24
- function maskSensitiveValue(value, options = {}) {
25
- const { prefixLength = 4, suffixLength = 4, maskChar = '*' } = options;
26
- // Handle empty or very short strings
27
- if (!value) {
28
- return maskChar.repeat(3);
29
- }
30
- if (value.length <= prefixLength + suffixLength) {
31
- // For short strings, show first char only
32
- if (value.length <= 3) {
33
- return value[0] + maskChar.repeat(value.length - 1 || 2);
34
- }
35
- return maskChar.repeat(value.length);
36
- }
37
- // Special handling for email addresses
38
- if (value.includes('@')) {
39
- const [localPart, domain] = value.split('@');
40
- const maskedLocal = localPart.slice(0, Math.min(4, localPart.length)) +
41
- maskChar.repeat(Math.max(0, localPart.length - 4));
42
- return `${maskedLocal}@${domain}`;
43
- }
44
- // Default masking: show first 4 and last 4
45
- const prefix = value.slice(0, prefixLength);
46
- const suffix = value.slice(-suffixLength);
47
- const maskLength = value.length - prefixLength - suffixLength;
48
- return `${prefix}${maskChar.repeat(maskLength)}${suffix}`;
49
- }
50
- /**
51
- * 格式化运行时长(毫秒转为可读格式)
52
- * @param milliseconds 毫秒数
53
- * @returns 格式化后的时长字符串
54
- */
55
- function formatUptime(milliseconds) {
56
- if (!milliseconds || milliseconds < 0) {
57
- return '0秒';
58
- }
59
- const seconds = Math.floor(milliseconds / 1000);
60
- const minutes = Math.floor(seconds / 60);
61
- const hours = Math.floor(minutes / 60);
62
- const days = Math.floor(hours / 24);
63
- if (days > 0) {
64
- return `${days}天 ${hours % 24}小时 ${minutes % 60}分钟`;
65
- }
66
- else if (hours > 0) {
67
- return `${hours}小时 ${minutes % 60}分钟`;
68
- }
69
- else if (minutes > 0) {
70
- return `${minutes}分钟 ${seconds % 60}秒`;
71
- }
72
- else {
73
- return `${seconds}秒`;
74
- }
75
- }
76
- /**
77
- * 格式化字节大小
78
- * @param bytes 字节数
79
- * @param decimals 小数位数(默认 2)
80
- * @returns 格式化后的大小字符串
81
- */
82
- function formatBytes(bytes, decimals = 2) {
83
- if (bytes === 0)
84
- return '0 B';
85
- if (!bytes || bytes < 0)
86
- return 'N/A';
87
- const k = 1024;
88
- const dm = decimals < 0 ? 0 : decimals;
89
- const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
90
- const i = Math.floor(Math.log(bytes) / Math.log(k));
91
- return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
92
- }
93
- /**
94
- * 格式化时间戳为可读日期
95
- * @param timestamp ISO 8601 字符串或 Unix 时间戳
96
- * @returns 格式化后的日期字符串
97
- */
98
- function formatDate(timestamp) {
99
- const date = typeof timestamp === 'string' ? new Date(timestamp) : new Date(timestamp);
100
- if (isNaN(date.getTime())) {
101
- return 'Invalid Date';
102
- }
103
- const year = date.getFullYear();
104
- const month = String(date.getMonth() + 1).padStart(2, '0');
105
- const day = String(date.getDate()).padStart(2, '0');
106
- const hours = String(date.getHours()).padStart(2, '0');
107
- const minutes = String(date.getMinutes()).padStart(2, '0');
108
- return `${year}-${month}-${day} ${hours}:${minutes}`;
109
- }
110
- /**
111
- * 格式化相对时间(如 "2 小时前")
112
- * @param timestamp ISO 8601 字符串或 Unix 时间戳
113
- * @returns 相对时间字符串
114
- */
115
- function formatRelativeTime(timestamp) {
116
- const date = typeof timestamp === 'string' ? new Date(timestamp) : new Date(timestamp);
117
- const now = new Date();
118
- const diffMs = now.getTime() - date.getTime();
119
- if (diffMs < 0) {
120
- return '未来';
121
- }
122
- const diffSeconds = Math.floor(diffMs / 1000);
123
- const diffMinutes = Math.floor(diffSeconds / 60);
124
- const diffHours = Math.floor(diffMinutes / 60);
125
- const diffDays = Math.floor(diffHours / 24);
126
- if (diffDays > 0) {
127
- return `${diffDays}天前`;
128
- }
129
- else if (diffHours > 0) {
130
- return `${diffHours}小时前`;
131
- }
132
- else if (diffMinutes > 0) {
133
- return `${diffMinutes}分钟前`;
134
- }
135
- else {
136
- return `${diffSeconds}秒前`;
137
- }
138
- }
139
- /**
140
- * 格式化持续时间(毫秒转为简洁格式)
141
- * @param ms 毫秒数
142
- * @returns 格式化后的持续时间字符串
143
- */
144
- function formatDuration(ms) {
145
- if (ms < 1000) {
146
- return `${ms}ms`;
147
- }
148
- else if (ms < 60000) {
149
- return `${(ms / 1000).toFixed(1)}s`;
150
- }
151
- else if (ms < 3600000) {
152
- return `${(ms / 60000).toFixed(1)}m`;
153
- }
154
- else {
155
- return `${(ms / 3600000).toFixed(1)}h`;
156
- }
157
- }
158
- /**
159
- * 格式化 JSON(美化输出)
160
- * @param obj 对象
161
- * @param spaces 缩进空格数(默认 2)
162
- * @returns 格式化后的 JSON 字符串
163
- */
164
- function formatJSON(obj, spaces = 2) {
165
- try {
166
- return JSON.stringify(obj, null, spaces);
167
- }
168
- catch {
169
- return String(obj);
170
- }
171
- }
172
- /**
173
- * 截断字符串(添加省略号)
174
- * @param str 原始字符串
175
- * @param maxLength 最大长度
176
- * @param ellipsis 省略号(默认 ...)
177
- * @returns 截断后的字符串
178
- */
179
- function truncate(str, maxLength, ellipsis = '...') {
180
- if (!str || str.length <= maxLength) {
181
- return str;
182
- }
183
- return str.slice(0, maxLength - ellipsis.length) + ellipsis;
184
- }
185
- /**
186
- * 填充字符串(对齐)
187
- * @param str 原始字符串
188
- * @param length 目标长度
189
- * @param padChar 填充字符(默认空格)
190
- * @param align 对齐方式(默认 left)
191
- * @returns 填充后的字符串
192
- */
193
- function pad(str, length, padChar = ' ', align = 'left') {
194
- if (str.length >= length) {
195
- return str;
196
- }
197
- const padLength = length - str.length;
198
- switch (align) {
199
- case 'right':
200
- return padChar.repeat(padLength) + str;
201
- case 'center': {
202
- const leftPad = Math.floor(padLength / 2);
203
- const rightPad = padLength - leftPad;
204
- return padChar.repeat(leftPad) + str + padChar.repeat(rightPad);
205
- }
206
- case 'left':
207
- default:
208
- return str + padChar.repeat(padLength);
209
- }
210
- }
211
- /**
212
- * 格式化表格行(用于控制台输出)
213
- * @param columns 列数据
214
- * @param widths 列宽度
215
- * @returns 格式化后的行字符串
216
- */
217
- function formatTableRow(columns, widths) {
218
- return columns.map((col, i) => pad(truncate(col, widths[i]), widths[i])).join(' │ ');
219
- }
220
- /**
221
- * 格式化百分比
222
- * @param value 数值(0-1 或 0-100)
223
- * @param total 总数(可选)
224
- * @param decimals 小数位数(默认 1)
225
- * @returns 格式化后的百分比字符串
226
- */
227
- function formatPercentage(value, total, decimals = 1) {
228
- let percent;
229
- if (total !== undefined && total > 0) {
230
- percent = (value / total) * 100;
231
- }
232
- else if (value > 0 && value <= 1) {
233
- percent = value * 100;
234
- }
235
- else {
236
- percent = value;
237
- }
238
- return `${percent.toFixed(decimals)}%`;
239
- }
240
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Icon Resolver
3
- * @module utils/icons
4
- *
5
- * Resolves appropriate icons based on terminal capabilities and context.
6
- */
7
- import { TerminalCapabilities } from '../types/terminal';
8
- import type { LogLevel } from './logger';
9
- /**
10
- * Status indicator with both Unicode and ASCII representations
11
- */
12
- export interface StatusIndicator {
13
- level: string;
14
- unicode: string;
15
- ascii: string;
16
- color: 'green' | 'red' | 'yellow' | 'cyan' | 'blue' | 'gray';
17
- }
18
- /**
19
- * Menu icon with emoji (deprecated) and text representations
20
- */
21
- export interface MenuIcon {
22
- emoji?: string;
23
- text: string;
24
- }
25
- /**
26
- * Resolve appropriate icon based on log level and terminal capabilities
27
- * @param level - Log level
28
- * @param capabilities - Terminal capabilities
29
- * @returns Icon string (Unicode or ASCII)
30
- */
31
- export declare function resolveIcon(level: LogLevel, capabilities: TerminalCapabilities): string;
32
- /**
33
- * Resolve icon for special states (loading, progress, hint)
34
- * @param state - State name (LOADING, PROGRESS, HINT)
35
- * @param capabilities - Terminal capabilities
36
- * @returns Icon string
37
- */
38
- export declare function resolveSpecialIcon(state: 'LOADING' | 'PROGRESS' | 'HINT', capabilities: TerminalCapabilities): string;
39
- /**
40
- * Get status indicator details for a log level
41
- * @param level - Log level
42
- * @returns Status indicator object
43
- * @throws Error if log level is invalid
44
- */
45
- export declare function getStatusIndicator(level: LogLevel): StatusIndicator;
46
- /**
47
- * Get menu icon for a specific key
48
- * @param key - Menu icon key (STATUS, START, STOP, etc.)
49
- * @returns Menu icon object
50
- * @throws Error if key is not found
51
- */
52
- export declare function getMenuIcon(key: string): MenuIcon;
53
- //# sourceMappingURL=icons.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/utils/icons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AA4ED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,GAAG,MAAM,CAevF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,EACtC,YAAY,EAAE,oBAAoB,GACjC,MAAM,CAQR;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,eAAe,CAQnE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAQjD"}
@@ -1,143 +0,0 @@
1
- "use strict";
2
- /**
3
- * Icon Resolver
4
- * @module utils/icons
5
- *
6
- * Resolves appropriate icons based on terminal capabilities and context.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.resolveIcon = resolveIcon;
10
- exports.resolveSpecialIcon = resolveSpecialIcon;
11
- exports.getStatusIndicator = getStatusIndicator;
12
- exports.getMenuIcon = getMenuIcon;
13
- const ui_symbols_1 = require("../constants/ui-symbols");
14
- /**
15
- * Status indicator mappings for all log levels
16
- */
17
- const STATUS_INDICATOR_MAP = {
18
- success: {
19
- level: 'success',
20
- unicode: '✓',
21
- ascii: ui_symbols_1.statusIcons.SUCCESS,
22
- color: 'green',
23
- },
24
- error: {
25
- level: 'error',
26
- unicode: '✗',
27
- ascii: ui_symbols_1.statusIcons.ERROR,
28
- color: 'red',
29
- },
30
- warn: {
31
- level: 'warn',
32
- unicode: '!',
33
- ascii: ui_symbols_1.statusIcons.WARN,
34
- color: 'yellow',
35
- },
36
- info: {
37
- level: 'info',
38
- unicode: 'i',
39
- ascii: ui_symbols_1.statusIcons.INFO,
40
- color: 'cyan',
41
- },
42
- debug: {
43
- level: 'debug',
44
- unicode: '·',
45
- ascii: ui_symbols_1.statusIcons.DEBUG,
46
- color: 'gray',
47
- },
48
- };
49
- /**
50
- * Additional status indicators for special states
51
- */
52
- const EXTRA_INDICATORS = {
53
- LOADING: {
54
- level: 'info',
55
- unicode: '...',
56
- ascii: ui_symbols_1.statusIcons.LOADING,
57
- color: 'cyan',
58
- },
59
- PROGRESS: {
60
- level: 'info',
61
- unicode: '>',
62
- ascii: ui_symbols_1.statusIcons.PROGRESS,
63
- color: 'blue',
64
- },
65
- HINT: {
66
- level: 'info',
67
- unicode: '*',
68
- ascii: ui_symbols_1.statusIcons.HINT,
69
- color: 'cyan',
70
- },
71
- };
72
- /**
73
- * Menu icon mappings
74
- */
75
- const MENU_ICON_MAP = {
76
- STATUS: { emoji: '📊', text: ui_symbols_1.menuIcons.STATUS },
77
- START: { emoji: '🚀', text: ui_symbols_1.menuIcons.START },
78
- STOP: { emoji: '🛑', text: ui_symbols_1.menuIcons.STOP },
79
- RESTART: { emoji: '🔄', text: ui_symbols_1.menuIcons.RESTART },
80
- USER: { emoji: '👥', text: ui_symbols_1.menuIcons.USER },
81
- CONFIG: { emoji: '⚙️', text: ui_symbols_1.menuIcons.CONFIG },
82
- LOGS: { emoji: '📝', text: ui_symbols_1.menuIcons.LOGS },
83
- EXIT: { emoji: '❌', text: ui_symbols_1.menuIcons.EXIT },
84
- };
85
- /**
86
- * Resolve appropriate icon based on log level and terminal capabilities
87
- * @param level - Log level
88
- * @param capabilities - Terminal capabilities
89
- * @returns Icon string (Unicode or ASCII)
90
- */
91
- function resolveIcon(level, capabilities) {
92
- const indicator = STATUS_INDICATOR_MAP[level];
93
- if (!indicator) {
94
- // Fallback for unknown levels
95
- return capabilities.supportsUnicode ? '•' : ui_symbols_1.statusIcons.INFO;
96
- }
97
- // Use ASCII for terminals that don't support Unicode
98
- if (!capabilities.supportsUnicode) {
99
- return indicator.ascii;
100
- }
101
- // Use Unicode for modern terminals
102
- return indicator.unicode;
103
- }
104
- /**
105
- * Resolve icon for special states (loading, progress, hint)
106
- * @param state - State name (LOADING, PROGRESS, HINT)
107
- * @param capabilities - Terminal capabilities
108
- * @returns Icon string
109
- */
110
- function resolveSpecialIcon(state, capabilities) {
111
- const indicator = EXTRA_INDICATORS[state];
112
- if (!indicator) {
113
- return capabilities.supportsUnicode ? '•' : ui_symbols_1.statusIcons.INFO;
114
- }
115
- return capabilities.supportsUnicode ? indicator.unicode : indicator.ascii;
116
- }
117
- /**
118
- * Get status indicator details for a log level
119
- * @param level - Log level
120
- * @returns Status indicator object
121
- * @throws Error if log level is invalid
122
- */
123
- function getStatusIndicator(level) {
124
- const indicator = STATUS_INDICATOR_MAP[level];
125
- if (!indicator) {
126
- throw new Error(`Invalid log level: ${level}`);
127
- }
128
- return indicator;
129
- }
130
- /**
131
- * Get menu icon for a specific key
132
- * @param key - Menu icon key (STATUS, START, STOP, etc.)
133
- * @returns Menu icon object
134
- * @throws Error if key is not found
135
- */
136
- function getMenuIcon(key) {
137
- const icon = MENU_ICON_MAP[key.toUpperCase()];
138
- if (!icon) {
139
- throw new Error(`Unknown menu icon key: ${key}`);
140
- }
141
- return icon;
142
- }
143
- //# sourceMappingURL=icons.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/utils/icons.ts"],"names":[],"mappings":"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"}
@@ -1,142 +0,0 @@
1
- /**
2
- * Layout Utility Functions
3
- *
4
- * Pure functions for layout calculations, text fitting, and rendering
5
- * Feature: 005-ui-layout-expansion
6
- */
7
- /**
8
- * Table column definition
9
- */
10
- export interface TableColumn {
11
- header: string;
12
- key: string;
13
- width?: number;
14
- align?: 'left' | 'center' | 'right';
15
- }
16
- /**
17
- * Render options for tables and sections
18
- */
19
- export interface RenderOptions {
20
- showBorder?: boolean;
21
- borderStyle?: 'single' | 'double' | 'compact';
22
- padding?: {
23
- top: number;
24
- right: number;
25
- bottom: number;
26
- left: number;
27
- };
28
- }
29
- /**
30
- * Calculate the display width of a string, accounting for Chinese characters
31
- *
32
- * Chinese characters (and other full-width characters) occupy 2 columns,
33
- * while ASCII characters occupy 1 column.
34
- *
35
- * @param text - Input text
36
- * @returns Display width in terminal columns
37
- */
38
- export declare function calculateDisplayWidth(text: string): number;
39
- /**
40
- * Calculate the width of each column in a multi-column layout
41
- *
42
- * Formula: (totalWidth - (columns - 1) * gap) / columns
43
- *
44
- * @param totalWidth - Total available width
45
- * @param columns - Number of columns
46
- * @param gap - Space between columns
47
- * @returns Width of each column (rounded down)
48
- */
49
- export declare function calculateColumnWidth(totalWidth: number, columns: number, gap: number): number;
50
- /**
51
- * Fit text to a specific width by truncating or padding
52
- *
53
- * @param text - Input text
54
- * @param width - Target width in columns
55
- * @param align - Alignment ('left', 'center', 'right')
56
- * @param ellipsis - Ellipsis string for truncation (default '...')
57
- * @returns Text adjusted to exact width
58
- */
59
- export declare function fitText(text: string, width: number, align?: 'left' | 'center' | 'right', ellipsis?: string): string;
60
- /**
61
- * Render a horizontal separator line
62
- *
63
- * @param width - Width of separator in columns
64
- * @param char - Character to use (default '─')
65
- * @param color - Optional chalk color name
66
- * @returns Separator string
67
- */
68
- export declare function renderSeparator(width: number, char?: string, color?: string): string;
69
- /**
70
- * Render a header with optional alignment and border
71
- *
72
- * @param title - Header title text
73
- * @param width - Total width
74
- * @param align - Alignment
75
- * @param options - Render options
76
- * @returns Rendered header string
77
- */
78
- export declare function renderHeader(title: string, width: number, align?: 'left' | 'center' | 'right', options?: {
79
- showBorder?: boolean;
80
- color?: string;
81
- }): string;
82
- /**
83
- * Apply padding to a text block
84
- *
85
- * @param text - Original text (can be multi-line)
86
- * @param padding - Padding configuration
87
- * @param width - Target width (for horizontal padding)
88
- * @returns Padded text
89
- */
90
- export declare function applyPadding(text: string, padding: {
91
- top: number;
92
- right: number;
93
- bottom: number;
94
- left: number;
95
- }, width: number): string;
96
- /**
97
- * Render a table using cli-table3
98
- *
99
- * @param columns - Column definitions
100
- * @param rows - Data rows
101
- * @param options - Render options
102
- * @returns Rendered table string
103
- */
104
- export declare function renderTable(columns: TableColumn[], rows: Record<string, unknown>[], options?: RenderOptions): string;
105
- /**
106
- * Render a section with title and content
107
- *
108
- * @param title - Section title
109
- * @param content - Section content (can be multi-line)
110
- * @param options - Render options
111
- * @returns Rendered section string
112
- */
113
- export declare function renderSection(title: string, content: string, options?: RenderOptions): string;
114
- /**
115
- * Distribute items evenly across multiple columns
116
- *
117
- * @param items - Array of items to distribute
118
- * @param columnCount - Number of columns to create
119
- * @returns Array of columns, each containing a subset of items
120
- *
121
- * @example
122
- * distributeToColumns(['A', 'B', 'C', 'D', 'E', 'F'], 2)
123
- * // Returns: [['A', 'B', 'C'], ['D', 'E', 'F']]
124
- *
125
- * distributeToColumns(['A', 'B', 'C', 'D', 'E'], 2)
126
- * // Returns: [['A', 'B', 'C'], ['D', 'E']]
127
- */
128
- export declare function distributeToColumns<T>(items: T[], columnCount: number): T[][];
129
- /**
130
- * Render multiple columns of text side by side
131
- *
132
- * @param columns - Array of columns, each containing lines of text
133
- * @param totalWidth - Total width available for all columns
134
- * @param gap - Space between columns (default: 2)
135
- * @returns Rendered multi-column text
136
- *
137
- * @example
138
- * renderColumns([['Line 1', 'Line 2'], ['Col 2 Line 1', 'Col 2 Line 2']], 80, 2)
139
- * // Returns text with two columns side by side
140
- */
141
- export declare function renderColumns(columns: string[][], totalWidth: number, gap?: number): string;
142
- //# sourceMappingURL=layout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/utils/layout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC9C,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAKD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwB1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,OAAgB,EAC3C,QAAQ,GAAE,MAAc,GACvB,MAAM,CAwCR;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAczF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,OAAkB,EAC7C,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,MAAM,CAiBR;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACrE,KAAK,EAAE,MAAM,GACZ,MAAM,CAwBR;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAkFR;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAoD7F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAoB7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAU,GAAG,MAAM,CAyB9F"}