UNPKG

@visulima/string

Version:

Functions for manipulating strings.

2 lines (1 loc) 1.44 kB
import c from"./transliterate.js";import{escapeRegExp as t}from"./utilities.js";const p={da:{Å:"AA",å:"aa",Æ:"AE",æ:"ae",Ø:"OE",ø:"oe"},de:{Ä:"AE",ä:"ae",Ö:"OE",ö:"oe",ß:"ss",Ü:"UE",ü:"ue"},nb:{Å:"AA",å:"aa",Æ:"AE",æ:"ae",Ø:"OE",ø:"oe"},sr:{Ć:"C",ć:"c",Č:"C",č:"c",Đ:"DJ",đ:"dj",Š:"S",š:"s",Ž:"Z",ž:"z"},tr:{Ç:"C",ç:"c",Ğ:"G",ğ:"g",I:"I",İ:"I",ı:"i",Ö:"O",ö:"o",Ş:"S",ş:"s",Ü:"U",ü:"u"},vi:{Đ:"D",đ:"d"}},n=a=>{const s=a.split("-")[0]?.toLowerCase()??"",e=p[s];return e?Object.entries(e):[]},i=(a,s)=>{const e=a?n(a):[],r=Array.isArray(s)?s:Object.entries(s??{});return[...e,...r]},u=(a,s,e)=>{const r=t(s).replaceAll(String.raw`\-`,"-"),o=new RegExp(`[^${r}]`,"g");return a.replaceAll(o,e)},f=(a,s)=>{const e={allowedChars:"a-zA-Z0-9-_.~",fixChineseSpacing:!0,ignore:[],lowercase:!0,replaceAfter:[],replaceBefore:[],separator:"-",transliterate:!0,trim:!1,unknown:"",uppercase:!1,...s};if(e.lowercase&&e.uppercase)throw new TypeError("slugify: The `lowercase` and `uppercase` options are mutually exclusive; enable at most one.");e.replaceBefore=i(e.locale??"",e.replaceBefore);let r=e.transliterate?c(a,e):a.normalize("NFC");e.lowercase?r=r.toLowerCase():e.uppercase&&(r=r.toUpperCase()),r=u(r,e.allowedChars,e.separator);const o=t(e.separator);if(o){const l=new RegExp(`${o}+`,"g");r=r.replace(l,e.separator)}return o?r.replaceAll(new RegExp(`^${o}+|${o}+$`,"g"),""):r};export{f as default};