38 lines
924 B
TypeScript
38 lines
924 B
TypeScript
/**
|
|
* # Return the slug of a string
|
|
*
|
|
* @example
|
|
* slugify("Hello World") // "hello-world"
|
|
* slugify("Yes!") // "yes"
|
|
* slugify("Hello!!! World!") // "hello-world"
|
|
*/
|
|
export default function slugify(
|
|
str?: string,
|
|
divider?: "-" | "_" | null,
|
|
allowTrailingDash?: boolean | null
|
|
): string {
|
|
const finalSlugDivider = divider || "-";
|
|
|
|
try {
|
|
if (!str) return "";
|
|
|
|
let finalStr = String(str)
|
|
.trim()
|
|
.toLowerCase()
|
|
.replace(/ {2,}/g, " ")
|
|
.replace(/ /g, finalSlugDivider)
|
|
.replace(/[^a-z0-9]/g, finalSlugDivider)
|
|
.replace(/-{2,}|_{2,}/g, finalSlugDivider)
|
|
.replace(/^-/, "");
|
|
|
|
if (allowTrailingDash) {
|
|
return finalStr;
|
|
}
|
|
|
|
return finalStr.replace(/-$/, "");
|
|
} catch (error: any) {
|
|
console.log(`Slugify ERROR: ${error.message}`);
|
|
return "";
|
|
}
|
|
}
|