UNPKG

elliotisms

Version:

reusable atomic functions for the dumb shit i reuse all the time. only about half are jokes.

678 lines (666 loc) 13.6 kB
import { paramCase // `param-case` } from "text-case" const stringModificationFunctions = { doSwaps: { fn: (string_) => { // remove accents, swap ñ for n, etc const swaps = { "(c)": ["©"], 0: ["°", "₀", "۰", "0"], 1: ["¹", "₁", "۱", "1"], 2: ["²", "₂", "۲", "2"], 3: ["³", "₃", "۳", "3"], 4: ["⁴", "₄", "۴", "٤", "4"], 5: ["⁵", "₅", "۵", "٥", "5"], 6: ["⁶", "₆", "۶", "٦", "6"], 7: ["⁷", "₇", "۷", "7"], 8: ["⁸", "₈", "۸", "8"], 9: ["⁹", "₉", "۹", "9"], A: [ "Á", "À", "Ả", "Ã", "Ạ", "Ă", "Ắ", "Ằ", "Ẳ", "Ẵ", "Ặ", "Â", "Ấ", "Ầ", "Ẩ", "Ẫ", "Ậ", "Å", "Ā", "Ą", "Α", "Ά", "Ἀ", "Ἁ", "Ἂ", "Ἃ", "Ἄ", "Ἅ", "Ἆ", "Ἇ", "ᾈ", "ᾉ", "ᾊ", "ᾋ", "ᾌ", "ᾍ", "ᾎ", "ᾏ", "Ᾰ", "Ᾱ", "Ὰ", "Ά", "ᾼ", "А", "Ǻ", "Ǎ", "A", "Ä" ], AE: ["Æ", "Ǽ"], B: ["Б", "Β", "ब", "B"], C: ["Ç", "Ć", "Č", "Ĉ", "Ċ", "C"], Ch: ["Ч"], D: ["Ď", "Ð", "Đ", "Ɖ", "Ɗ", "Ƌ", "ᴅ", "ᴆ", "Д", "Δ", "D"], Dj: ["Ђ"], Dz: ["Џ"], E: [ "É", "È", "Ẻ", "Ẽ", "Ẹ", "Ê", "Ế", "Ề", "Ể", "Ễ", "Ệ", "Ë", "Ē", "Ę", "Ě", "Ĕ", "Ė", "Ε", "Έ", "Ἐ", "Ἑ", "Ἒ", "Ἓ", "Ἔ", "Ἕ", "Έ", "Ὲ", "Е", "Ё", "Э", "Є", "Ə", "E" ], F: ["Ф", "Φ", "F"], G: ["Ğ", "Ġ", "Ģ", "Г", "Ґ", "Γ", "G"], Gx: ["Ĝ"], H: ["Η", "Ή", "Ħ", "H"], Hx: ["Ĥ"], I: [ "Í", "Ì", "Ỉ", "Ĩ", "Ị", "Î", "Ï", "Ī", "Ĭ", "Į", "İ", "Ι", "Ί", "Ϊ", "Ἰ", "Ἱ", "Ἳ", "Ἴ", "Ἵ", "Ἶ", "Ἷ", "Ῐ", "Ῑ", "Ὶ", "Ί", "И", "І", "Ї", "Ǐ", "ϒ", "I" ], Ij: ["IJ"], J: ["J"], Jx: ["Ĵ"], K: ["К", "Κ", "K"], Kh: ["Х"], L: ["Ĺ", "Ł", "Л", "Λ", "Ļ", "Ľ", "Ŀ", "ल", "L"], Lj: ["Љ"], M: ["М", "Μ", "M"], N: ["Ń", "Ñ", "Ň", "Ņ", "Ŋ", "Н", "Ν", "N"], Nj: ["Њ"], O: [ "Ó", "Ò", "Ỏ", "Õ", "Ọ", "Ô", "Ố", "Ồ", "Ổ", "Ỗ", "Ộ", "Ơ", "Ớ", "Ờ", "Ở", "Ỡ", "Ợ", "Ø", "Ō", "Ő", "Ŏ", "Ο", "Ό", "Ὀ", "Ὁ", "Ὂ", "Ὃ", "Ὄ", "Ὅ", "Ὸ", "Ό", "О", "Θ", "Ө", "Ǒ", "Ǿ", "O", "Ö" ], Oe: ["Œ"], P: ["П", "Π", "P"], Ps: ["Ψ"], Q: ["Q"], R: ["Ř", "Ŕ", "Р", "Ρ", "Ŗ", "R"], S: ["Ş", "Ŝ", "Ș", "Š", "Ś", "С", "Σ", "S"], Sh: ["Ш"], Shch: ["Щ"], Ss: ["ẞ"], T: ["Ť", "Ţ", "Ŧ", "Ț", "Т", "Τ", "T"], Th: ["Þ"], Ts: ["Ц"], U: [ "Ú", "Ù", "Ủ", "Ũ", "Ụ", "Ư", "Ứ", "Ừ", "Ử", "Ữ", "Ự", "Û", "Ū", "Ů", "Ű", "Ŭ", "Ų", "У", "Ǔ", "Ǖ", "Ǘ", "Ǚ", "Ǜ", "U", "Ў", "Ü" ], V: ["В", "V"], W: ["Ω", "Ώ", "Ŵ", "W"], X: ["Χ", "Ξ", "X"], Y: [ "Ý", "Ỳ", "Ỷ", "Ỹ", "Ỵ", "Ÿ", "Ῠ", "Ῡ", "Ὺ", "Ύ", "Ы", "Й", "Υ", "Ϋ", "Ŷ", "Y" ], Ya: ["Я"], Yu: ["Ю"], Z: ["Ź", "Ž", "Ż", "З", "Ζ", "Z"], Zh: ["Ж"], a: [ "à", "á", "ả", "ã", "ạ", "ă", "ắ", "ằ", "ẳ", "ẵ", "ặ", "â", "ấ", "ầ", "ẩ", "ẫ", "ậ", "ā", "ą", "å", "α", "ά", "ἀ", "ἁ", "ἂ", "ἃ", "ἄ", "ἅ", "ἆ", "ἇ", "ᾀ", "ᾁ", "ᾂ", "ᾃ", "ᾄ", "ᾅ", "ᾆ", "ᾇ", "ὰ", "ά", "ᾰ", "ᾱ", "ᾲ", "ᾳ", "ᾴ", "ᾶ", "ᾷ", "а", "أ", "အ", "ာ", "ါ", "ǻ", "ǎ", "ª", "ა", "अ", "ا", "a", "ä" ], aa: ["ع", "आ", "آ"], ae: ["æ", "ǽ"], ai: ["ऐ"], b: ["б", "β", "ب", "ဗ", "ბ", "b"], c: ["ç", "ć", "č", "ĉ", "ċ", "c"], ch: ["ч", "ჩ", "ჭ", "چ"], d: [ "ď", "ð", "đ", "ƌ", "ȡ", "ɖ", "ɗ", "ᵭ", "ᶁ", "ᶑ", "д", "δ", "د", "ض", "ဍ", "ဒ", "დ", "d" ], dj: ["ђ", "đ"], dz: ["џ", "ძ"], e: [ "é", "è", "ẻ", "ẽ", "ẹ", "ê", "ế", "ề", "ể", "ễ", "ệ", "ë", "ē", "ę", "ě", "ĕ", "ė", "ε", "έ", "ἐ", "ἑ", "ἒ", "ἓ", "ἔ", "ἕ", "ὲ", "έ", "е", "ё", "э", "є", "ə", "ဧ", "ေ", "ဲ", "ე", "ए", "إ", "ئ", "e" ], ei: ["ऍ"], f: ["ф", "φ", "ف", "ƒ", "ფ", "f"], g: ["ĝ", "ğ", "ġ", "ģ", "г", "ґ", "γ", "ဂ", "გ", "گ", "g"], gh: ["غ", "ღ"], h: ["ĥ", "ħ", "η", "ή", "ح", "ه", "ဟ", "ှ", "ჰ", "h"], i: [ "í", "ì", "ỉ", "ĩ", "ị", "î", "ï", "ī", "ĭ", "į", "ı", "ι", "ί", "ϊ", "ΐ", "ἰ", "ἱ", "ἲ", "ἳ", "ἴ", "ἵ", "ἶ", "ἷ", "ὶ", "ί", "ῐ", "ῑ", "ῒ", "ΐ", "ῖ", "ῗ", "і", "ї", "и", "ဣ", "ိ", "ီ", "ည်", "ǐ", "ი", "इ", "ی", "i" ], ii: ["ई"], ij: ["ij"], j: ["ĵ", "ј", "Ј", "ჯ", "ج", "j"], k: ["ķ", "ĸ", "к", "κ", "Ķ", "ق", "ك", "က", "კ", "ქ", "ک", "k"], kh: ["х", "خ", "ხ"], l: ["ł", "ľ", "ĺ", "ļ", "ŀ", "л", "λ", "ل", "လ", "ლ", "l"], lj: ["љ"], m: ["м", "μ", "م", "မ", "მ", "m"], n: ["ñ", "ń", "ň", "ņ", "ʼn", "ŋ", "ν", "н", "ن", "န", "ნ", "n"], nj: ["њ"], o: [ "ó", "ò", "ỏ", "õ", "ọ", "ô", "ố", "ồ", "ổ", "ỗ", "ộ", "ơ", "ớ", "ờ", "ở", "ỡ", "ợ", "ø", "ō", "ő", "ŏ", "ο", "ὀ", "ὁ", "ὂ", "ὃ", "ὄ", "ὅ", "ὸ", "ό", "о", "و", "θ", "ို", "ǒ", "ǿ", "º", "ო", "ओ", "o", "ö" ], oe: ["ö", "œ", "ؤ"], oi: ["ऑ"], oii: ["ऒ"], p: ["п", "π", "ပ", "პ", "پ", "p"], ps: ["ψ"], q: ["ყ", "q"], r: ["ŕ", "ř", "ŗ", "р", "ρ", "ر", "რ", "r"], s: ["ś", "š", "ş", "с", "σ", "ș", "ς", "س", "ص", "စ", "ſ", "ს", "s"], sh: ["ш", "შ", "ش"], shch: ["щ"], ss: ["ß"], sx: ["ŝ"], t: ["ť", "ţ", "т", "τ", "ț", "ت", "ط", "ဋ", "တ", "ŧ", "თ", "ტ", "t"], th: ["þ", "ϑ", "ث", "ذ", "ظ"], ts: ["ц", "ც", "წ"], u: [ "ú", "ù", "ủ", "ũ", "ụ", "ư", "ứ", "ừ", "ử", "ữ", "ự", "û", "ū", "ů", "ű", "ŭ", "ų", "µ", "у", "ဉ", "ု", "ူ", "ǔ", "ǖ", "ǘ", "ǚ", "ǜ", "უ", "उ", "u", "ў", "ü" ], ue: ["ü"], uu: ["ऊ"], v: ["в", "ვ", "ϐ", "v"], w: ["ŵ", "ω", "ώ", "ဝ", "ွ", "w"], x: ["χ", "ξ", "x"], y: [ "ý", "ỳ", "ỷ", "ỹ", "ỵ", "ÿ", "ŷ", "й", "ы", "υ", "ϋ", "ύ", "ΰ", "ي", "ယ", "y" ], ya: ["я"], yu: ["ю"], z: ["ź", "ž", "ż", "з", "ζ", "ز", "ဇ", "ზ", "z"], zh: ["ж", "ჟ", "ژ"] } for (const swap of Object.keys(swaps)) { for (const s of swaps[swap]) { string_ = string_.replaceAll(new RegExp(s, "g"), swap) } } return string_ }, name: "do swaps" }, lowerCase: { description: "converts to lower case", fn: (string_) => { return string_.toLowerCase() }, name: "lower case" }, maxChars: { description: "trims to max chars - default 150", fn: (string_) => { if (string_.length > 150) { return string_.slice(0, Math.max(0, 150)) } return string_ }, name: "max chars" }, // }, noApostrophes: { fn: (string_) => { return string_.replaceAll('\'', "") }, name: "no apostrophes" }, // removeInvalidChars: { // name: "remove invalid chars", // fn: (string_) => { // return string_.replaceAll(/[^\d a-z-]/g, "") // } removeConsecutiveDashes: { fn: (string_) => { return string_.replaceAll(/-+/g, "-") }, name: "remove consecutive dashes" }, removeConsecutiveDashesAtStartEnd: { fn: (string_) => { return string_.replaceAll(/^-+|-+$/g, "") }, name: "remove consecutive dashes at start/end" }, replaceWhiteSpace: { description: "replaces white space with dashes", fn: (string_) => { return string_.replaceAll(/\s+/g, "-") }, name: "replace white space" }, toParamCase: { fn: (string_) => { return paramCase(string_) }, name: "to param case" }, toString: { description: "converts to string", fn: (string_) => { return String(string_).toString() }, name: "to string" }, trim: { description: "trims whitespace", fn: (string_) => { return string_.replaceAll(/^\s+|\s+$/g, "") }, name: "trim" } } const slugify = (string_) => { for (const key in stringModificationFunctions) { try { string_ = stringModificationFunctions[key].fn(string_) } catch (error) { console.error(`Error in slugify: ${error}`) } } return string_ } export default slugify;