(raw: string, maxLen = 500)
| 41 | * git log 解析时会被当真换行 |
| 42 | */ |
| 43 | export function sanitizeCommitMessage(raw: string, maxLen = 500): string { |
| 44 | if (typeof raw !== "string") return ""; |
| 45 | let s = raw.replace(/[\x00-\x08\x0B-\x1F\x7F-\x9F\u2028\u2029]/g, ""); |
| 46 | // 折叠 3+ 个连续换行为 2 个(保留段落分隔) |
| 47 | s = s.replace(/\n{3,}/g, "\n\n"); |
| 48 | s = s.trim(); |
| 49 | if (s.length > maxLen) s = s.slice(0, maxLen).trimEnd() + "…"; |
| 50 | return s; |
| 51 | } |
| 52 | |
| 53 | /** 统一的 commit 返回类型——避免下游解构时 TS 推断成歧义 union 而拿不到字段。 */ |
| 54 | export interface CommitResult { |