aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/helpers/strings.ts
blob: 8b0f9233dbe607075968cbc4a94d4250210aeefa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
 * Convert a text into a slug or id.
 * https://gist.github.com/codeguy/6684588#gistcomment-3332719
 *
 * @param {string} text - A text to slugify.
 * @returns {string} The slug.
 */
export const slugify = (text: string): string =>
  text
    .toString()
    .normalize('NFKD')
    .replace(/[\u0300-\u036f]/g, '')
    .toLowerCase()
    .trim()
    .replace(/\s+/g, '-')
    .replace(/[^\w-]+/g, '-')
    .replace(/--+/g, '-')
    .replace(/(?:^-)|(?:-$)/g, '');

/**
 * Capitalize the first letter of a string.
 *
 * @param {string} text - A text to capitalize.
 * @returns {string} The capitalized text.
 */
export const capitalize = (text: string): string =>
  text.replace(/^\w/, (firstLetter) => firstLetter.toUpperCase());

/**
 * Convert a text from kebab case (foo-bar) to camel case (fooBar).
 *
 * @param {string} text - A text to transform.
 * @returns {string} The text in camel case.
 */
export const fromKebabCaseToCamelCase = (text: string): string =>
  text.replace(/-./g, (x) => x[1].toUpperCase());

/**
 * Retrieve a valid data attribute from a string.
 *
 * @param {string} str - A string.
 * @returns {string} A data attribute (ie. `data-...`)
 */
export const getDataAttributeFrom = (str: string) => {
  if (str.startsWith('data-')) return str;
  return `data-${str}`;
};