23 lines
534 B
TypeScript
23 lines
534 B
TypeScript
const STOP_CHARS = /['"`]/g;
|
|
|
|
export function slugify(input: string, fallback = "chatgpt-share"): string {
|
|
const base = input
|
|
.normalize("NFKD")
|
|
.replace(STOP_CHARS, "")
|
|
.toLowerCase()
|
|
.replace(/[^a-z0-9]+/g, "-")
|
|
.replace(/^-+|-+$/g, "")
|
|
.replace(/-{2,}/g, "-")
|
|
.slice(0, 80);
|
|
|
|
return base || fallback;
|
|
}
|
|
|
|
export function displayTitleFromSlug(slug: string): string {
|
|
return slug
|
|
.split("-")
|
|
.filter(Boolean)
|
|
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
.join(" ");
|
|
}
|