37 lines
825 B
TypeScript
37 lines
825 B
TypeScript
export function sanitizeWikiSlug(value: string): string {
|
|
return value
|
|
.toLowerCase()
|
|
.replace(/[^a-z0-9]+/g, '-')
|
|
.replace(/^-+|-+$/g, '')
|
|
.replace(/-{2,}/g, '-')
|
|
}
|
|
|
|
export function summarizeText(input: string, maxLength = 280): string {
|
|
const normalized = input.replace(/\s+/g, ' ').trim()
|
|
if (!normalized) {
|
|
return 'No summary available.'
|
|
}
|
|
|
|
if (normalized.length <= maxLength) {
|
|
return normalized
|
|
}
|
|
|
|
return `${normalized.slice(0, maxLength - 1).trimEnd()}…`
|
|
}
|
|
|
|
export function extractTitleFromText(
|
|
fallbackName: string,
|
|
content: string,
|
|
): string {
|
|
const firstNonEmptyLine = content
|
|
.split('\n')
|
|
.map(line => line.trim())
|
|
.find(Boolean)
|
|
|
|
if (!firstNonEmptyLine) {
|
|
return fallbackName
|
|
}
|
|
|
|
return firstNonEmptyLine.replace(/^#+\s*/, '') || fallbackName
|
|
}
|