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
JavaScript
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;