type SlugifyOptions = { delimiter?: string; allowUrlPath?: boolean; }; // https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1#file-slugify-js const slugify = ( value: string, { delimiter = "-", allowUrlPath = false }: SlugifyOptions = {} ) => { const a = "àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·,:;"; const b = "aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz----"; const p = new RegExp(a.split("").join("|"), "g"); const nonWordRegex = allowUrlPath ? /[^\w-/]+/g : /[^\w-]+/g; return value .toString() .toLowerCase() .replace(/\s+/g, "-") // Replace spaces with - .replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters .replace(/&/g, "-and-") // Replace & with 'and' .replace(nonWordRegex, "") // Remove all non-word characters .replace(/--+/g, "-") // Replace multiple - with single - .replace(/^-+/, "") // Trim - from start of text .replace(/-+$/, "") // Trim - from end of text .replace(/-/g, delimiter); // Replace - with delimiter }; export default slugify;