(value: unknown, maxChars = 180)
| 198 | } |
| 199 | |
| 200 | function shortPreview(value: unknown, maxChars = 180): string { |
| 201 | const text = |
| 202 | typeof value === 'string' ? value : (JSON.stringify(value, null, 0) ?? '') |
| 203 | return text.replace(/\s+/g, ' ').trim().slice(0, maxChars) |
| 204 | } |
| 205 | |
| 206 | function safeFilePart(value: string): string { |
| 207 | return value.replace(/[^a-zA-Z0-9._-]+/g, '-') |