@nemigo/helpers 0.13.3 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aggregator.d.ts +33 -0
- package/dist/aggregator.js +44 -0
- package/dist/array.d.ts +33 -0
- package/dist/array.js +24 -0
- package/dist/async/context.d.ts +73 -0
- package/dist/async/context.js +90 -0
- package/dist/async/future.d.ts +54 -0
- package/dist/async/future.js +71 -0
- package/dist/async/index.d.ts +56 -27
- package/dist/async/index.js +63 -58
- package/dist/async/loader.d.ts +67 -0
- package/dist/async/loader.js +101 -0
- package/dist/async/queue.d.ts +51 -0
- package/dist/async/queue.js +84 -0
- package/dist/cases.d.ts +31 -21
- package/dist/cases.js +41 -37
- package/dist/clean.d.ts +44 -26
- package/dist/clean.js +67 -42
- package/dist/color/types.d.ts +31 -0
- package/dist/color/types.js +1 -0
- package/dist/datetime/delta.d.ts +28 -0
- package/dist/datetime/delta.js +65 -0
- package/dist/datetime/format.d.ts +54 -0
- package/dist/datetime/format.js +122 -0
- package/dist/datetime/index.d.ts +6 -0
- package/dist/datetime/index.js +22 -0
- package/dist/datetime/plural.d.ts +77 -0
- package/dist/datetime/plural.js +78 -0
- package/dist/emitter.d.ts +29 -17
- package/dist/emitter.js +35 -21
- package/dist/explorer.d.ts +22 -29
- package/dist/explorer.js +18 -16
- package/dist/files.d.ts +31 -2
- package/dist/files.js +33 -8
- package/dist/fish.d.ts +29 -0
- package/dist/fish.js +70 -0
- package/dist/html/cookie.d.ts +48 -0
- package/dist/html/cookie.js +37 -0
- package/dist/html/events.d.ts +133 -0
- package/dist/html/events.js +139 -0
- package/dist/html/index.d.ts +31 -0
- package/dist/html/index.js +61 -0
- package/dist/index.d.ts +38 -40
- package/dist/index.js +43 -56
- package/dist/jiff/apply.d.ts +93 -0
- package/dist/jiff/apply.js +64 -0
- package/dist/jiff/extract.d.ts +7 -0
- package/dist/jiff/extract.js +82 -0
- package/dist/jiff/types.d.ts +57 -0
- package/dist/jiff/types.js +1 -0
- package/dist/lens.d.ts +20 -31
- package/dist/lens.js +22 -37
- package/dist/msgpack.d.ts +11 -26
- package/dist/msgpack.js +9 -21
- package/dist/mutate.d.ts +70 -0
- package/dist/mutate.js +130 -0
- package/dist/omitter.d.ts +54 -34
- package/dist/omitter.js +33 -25
- package/dist/path.d.ts +20 -1
- package/dist/path.js +21 -2
- package/dist/phymath/format.d.ts +60 -0
- package/dist/phymath/format.js +34 -0
- package/dist/phymath/index.d.ts +30 -30
- package/dist/phymath/index.js +41 -33
- package/dist/promoter.d.ts +20 -12
- package/dist/promoter.js +24 -17
- package/dist/random.d.ts +20 -21
- package/dist/random.js +22 -23
- package/dist/rubles.d.ts +24 -0
- package/dist/rubles.js +24 -0
- package/dist/script.d.ts +60 -13
- package/dist/script.js +46 -10
- package/dist/string.d.ts +46 -92
- package/dist/string.js +46 -171
- package/dist/types.d.ts +144 -25
- package/dist/url/index.d.ts +12 -0
- package/dist/url/index.js +17 -0
- package/dist/url/params.d.ts +141 -0
- package/dist/{url.js → url/params.js} +90 -18
- package/dist/url/slug.d.ts +28 -0
- package/dist/url/slug.js +102 -0
- package/dist/veil.d.ts +14 -0
- package/dist/veil.js +26 -0
- package/dist/xod.d.ts +237 -16
- package/dist/xod.js +192 -18
- package/dist/zipper.d.ts +22 -4
- package/dist/zipper.js +22 -5
- package/package.json +82 -34
- package/dist/async/space.d.ts +0 -8
- package/dist/async/space.js +0 -31
- package/dist/cleanup.d.ts +0 -9
- package/dist/cleanup.js +0 -18
- package/dist/colors.d.ts +0 -539
- package/dist/colors.js +0 -888
- package/dist/cookie.d.ts +0 -60
- package/dist/cookie.js +0 -48
- package/dist/datetime.d.ts +0 -82
- package/dist/datetime.js +0 -161
- package/dist/format.d.ts +0 -36
- package/dist/format.js +0 -26
- package/dist/future.d.ts +0 -51
- package/dist/future.js +0 -71
- package/dist/html.d.ts +0 -145
- package/dist/html.js +0 -205
- package/dist/humanly.d.ts +0 -9
- package/dist/humanly.js +0 -93
- package/dist/lru.d.ts +0 -77
- package/dist/lru.js +0 -128
- package/dist/queue.d.ts +0 -40
- package/dist/queue.js +0 -56
- package/dist/url.d.ts +0 -61
package/dist/string.d.ts
CHANGED
|
@@ -1,95 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет все вхождения плейсхолдеров из строки через {@link String.replaceAll}
|
|
3
|
+
*
|
|
4
|
+
* @param [str=""] - Входная строка
|
|
5
|
+
* @param [placeholder="_"] - Строка или регулярное выражение для удаления
|
|
6
|
+
*
|
|
7
|
+
* @remarks Если используется `RegExp`, он **должен содержать флаг `g`**
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* clearPH("user___name"); // "username"
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare const clearPH: (str?: string, placeholder?: string | RegExp) => string;
|
|
1
15
|
/**
|
|
2
16
|
* Регулярное выражение для захвата всех нецифровых символов из строки.
|
|
3
|
-
* Используется для удаления всех символов, кроме цифр 0-9
|
|
17
|
+
* Используется для удаления всех символов, кроме цифр 0-9
|
|
4
18
|
*/
|
|
5
19
|
export declare const oDigitRegExp: RegExp;
|
|
6
20
|
/**
|
|
7
|
-
* Удаляет все символы из строки, кроме цифр 0-9
|
|
21
|
+
* Удаляет все символы из строки, кроме цифр 0-9
|
|
8
22
|
*
|
|
9
|
-
* @param
|
|
10
|
-
* @returns Строка, содержащая только цифры
|
|
23
|
+
* @param [str=""] - Входная строка для очистки
|
|
11
24
|
*
|
|
12
25
|
* @example
|
|
13
26
|
* ```typescript
|
|
14
27
|
* oDigitClean("abc123def456"); // "123456"
|
|
15
28
|
* oDigitClean("+7 (999) 123-45-67"); // "79991234567"
|
|
16
|
-
* oDigitClean(""); // ""
|
|
17
29
|
* ```
|
|
18
30
|
*/
|
|
19
|
-
export declare const oDigitClean: (
|
|
31
|
+
export declare const oDigitClean: (str?: string) => string;
|
|
20
32
|
/**
|
|
21
|
-
* Регулярное выражение для захвата одного или более пробельных символов
|
|
22
|
-
* Включает пробелы, табуляции, переносы строк и другие пробельные символы.
|
|
33
|
+
* Регулярное выражение для захвата одного или более пробельных символов подряд
|
|
23
34
|
*/
|
|
24
|
-
export declare const
|
|
35
|
+
export declare const oSpaceRegExp: RegExp;
|
|
25
36
|
/**
|
|
26
|
-
* Нормализует пробелы в строке: заменяет множественные пробелы на один и удаляет пробелы в начале и
|
|
37
|
+
* Нормализует пробелы в строке: заменяет множественные пробелы на один и удаляет пробелы в начале и конце
|
|
27
38
|
*
|
|
28
|
-
* @param
|
|
29
|
-
* @returns Строка с нормализованными пробелами
|
|
39
|
+
* @param [str=""] - Входная строка для нормализации
|
|
30
40
|
*
|
|
31
41
|
* @example
|
|
32
42
|
* ```typescript
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
43
|
+
* oSpaceClean(" hello world "); // "hello world"
|
|
44
|
+
* oSpaceClean("multiple\n\n\nspaces"); // "multiple spaces"
|
|
45
|
+
* oSpaceClean("tab\t\tseparated"); // "tab separated"
|
|
36
46
|
* ```
|
|
37
47
|
*/
|
|
38
|
-
export declare const
|
|
48
|
+
export declare const oSpaceClean: (str?: string) => string;
|
|
39
49
|
/**
|
|
40
|
-
*
|
|
50
|
+
* Приводит строку к нижнему регистру и нормализует пробелы.
|
|
51
|
+
* Комбинация методов {@link String.toLowerCase} и {@link oSpaceClean}
|
|
41
52
|
*
|
|
42
|
-
* @param str -
|
|
43
|
-
* @param placeholder - Строка или регулярное выражение для удаления (по умолчанию "_")
|
|
44
|
-
* @returns Строка без плейсхолдеров
|
|
53
|
+
* @param [str=""] - Строка для нормализации
|
|
45
54
|
*
|
|
46
55
|
* @example
|
|
47
56
|
* ```typescript
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* clearPH("email@domain.com", /@/); // "emaildomain.com"
|
|
57
|
+
* toFlat(" Hello World "); // "hello world"
|
|
58
|
+
* toFlat("CamelCase String"); // "camelcase string"
|
|
59
|
+
* toFlat(""); // ""
|
|
52
60
|
* ```
|
|
53
61
|
*/
|
|
54
|
-
export declare const
|
|
62
|
+
export declare const toFlat: (str?: string) => string;
|
|
55
63
|
/**
|
|
56
|
-
* Приводит первый символ строки к верхнему регистру, остальные оставляет без
|
|
64
|
+
* Приводит первый символ строки к верхнему регистру, остальные оставляет без изменений
|
|
57
65
|
*
|
|
58
|
-
* @param word -
|
|
59
|
-
* @returns Строка с заглавной первой буквой
|
|
66
|
+
* @param [word=""] - Слово для капитализации
|
|
60
67
|
*
|
|
61
68
|
* @example
|
|
62
69
|
* ```typescript
|
|
63
|
-
*
|
|
64
|
-
* toCapital("world"); // "World"
|
|
65
|
-
* toCapital(""); // ""
|
|
66
|
-
* toCapital("a"); // "A"
|
|
70
|
+
* toCapitalCase("hello"); // "Hello"
|
|
67
71
|
* ```
|
|
68
72
|
*/
|
|
69
|
-
export declare const
|
|
73
|
+
export declare const toCapitalCase: (word?: string) => string;
|
|
70
74
|
/**
|
|
71
|
-
*
|
|
72
|
-
* Разделяет строку по пробелам и применяет капитализацию к каждому слову.
|
|
75
|
+
* Разделяет строку по пробелам и приводит первый символ каждого слова к верхнему регистру ({@link toCapitalCase})
|
|
73
76
|
*
|
|
74
|
-
* @param str - Строка для преобразования в Title Case
|
|
75
|
-
* @returns Строка с заглавными первыми буквами каждого слова
|
|
77
|
+
* @param [str=""] - Строка для преобразования в Title Case
|
|
76
78
|
*
|
|
77
79
|
* @example
|
|
78
80
|
* ```typescript
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* toCapitalMap("single"); // "Single"
|
|
81
|
+
* toCapitalCaseMap("hello world"); // "Hello World"
|
|
82
|
+
* toCapitalCaseMap(""); // ""
|
|
83
|
+
* toCapitalCaseMap("single"); // "Single"
|
|
83
84
|
* ```
|
|
84
85
|
*/
|
|
85
|
-
export declare const
|
|
86
|
+
export declare const toCapitalCaseMap: (str?: string) => string;
|
|
86
87
|
/**
|
|
87
|
-
* Повторяет строку указанное количество раз с разделителем между
|
|
88
|
+
* Повторяет строку указанное количество раз с разделителем между повторениями
|
|
88
89
|
*
|
|
89
90
|
* @param str - Исходная строка для повторения
|
|
90
|
-
* @param length - Количество повторений (
|
|
91
|
-
* @param separator - Разделитель между повторениями
|
|
92
|
-
* @returns Результирующая строка из повторений
|
|
91
|
+
* @param length - Количество повторений (**должно быть ≥ 0**)
|
|
92
|
+
* @param [separator=""] - Разделитель между повторениями
|
|
93
93
|
*
|
|
94
94
|
* @example
|
|
95
95
|
* ```typescript
|
|
@@ -101,49 +101,3 @@ export declare const toCapitalMap: (str?: string) => string;
|
|
|
101
101
|
* ```
|
|
102
102
|
*/
|
|
103
103
|
export declare const repeat: (str: string, length: number, separator?: string) => string;
|
|
104
|
-
/**
|
|
105
|
-
* Приводит строку к нижнему регистру и нормализует пробелы.
|
|
106
|
-
* Комбинация методов toLowerCase() и spaceClean().
|
|
107
|
-
*
|
|
108
|
-
* @param str - Строка для нормализации
|
|
109
|
-
* @returns Строка в нижнем регистре с нормализованными пробелами
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* ```typescript
|
|
113
|
-
* toFlat(" Hello World "); // "hello world"
|
|
114
|
-
* toFlat("CamelCase String"); // "camelcase string"
|
|
115
|
-
* toFlat(""); // ""
|
|
116
|
-
* ```
|
|
117
|
-
*/
|
|
118
|
-
export declare const toFlat: (str?: string) => string;
|
|
119
|
-
/**
|
|
120
|
-
* Карта для транслитерации кириллических символов в латинские.
|
|
121
|
-
* Содержит соответствия для всех букв русского алфавита в нижнем регистре.
|
|
122
|
-
* Используется в функции {@link toSlug} для создания URL-friendly строк.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* ```typescript
|
|
126
|
-
* cyrillicToLatinMap.get('а'); // "a"
|
|
127
|
-
* cyrillicToLatinMap.get('ё'); // "yo"
|
|
128
|
-
* cyrillicToLatinMap.get('ъ'); // ""
|
|
129
|
-
* ```
|
|
130
|
-
*/
|
|
131
|
-
export declare const cyrillicToLatinMap: Map<string, string>;
|
|
132
|
-
/**
|
|
133
|
-
* Создает URL-friendly slug из текста.
|
|
134
|
-
* Конвертирует кириллицу в латиницу, удаляет специальные символы,
|
|
135
|
-
* нормализует пробелы и заменяет их на разделитель.
|
|
136
|
-
*
|
|
137
|
-
* @param text - Исходный текст для преобразования в slug
|
|
138
|
-
* @param separator - Разделитель для замены пробелов (по умолчанию "-")
|
|
139
|
-
* @returns URL-friendly строка
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* ```typescript
|
|
143
|
-
* toSlug("Привет, мир!"); // "privet-mir"
|
|
144
|
-
* toSlug("JavaScript Programming"); // "javascript-programming"
|
|
145
|
-
* toSlug("Café & Restaurant", "_"); // "cafe_restaurant"
|
|
146
|
-
* toSlug("Специальные символы!!!", "."); // "specialnye-simvoly"
|
|
147
|
-
* ```
|
|
148
|
-
*/
|
|
149
|
-
export declare const toSlug: (text: string, separator?: string) => string;
|
package/dist/string.js
CHANGED
|
@@ -1,98 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Удаляет все вхождения плейсхолдеров из строки через {@link String.replaceAll}
|
|
3
|
+
*
|
|
4
|
+
* @param [str=""] - Входная строка
|
|
5
|
+
* @param [placeholder="_"] - Строка или регулярное выражение для удаления
|
|
6
|
+
*
|
|
7
|
+
* @remarks Если используется `RegExp`, он **должен содержать флаг `g`**
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* clearPH("user___name"); // "username"
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export const clearPH = (str = "", placeholder = "_") => str.replaceAll(placeholder, "");
|
|
1
15
|
/**
|
|
2
16
|
* Регулярное выражение для захвата всех нецифровых символов из строки.
|
|
3
|
-
* Используется для удаления всех символов, кроме цифр 0-9
|
|
17
|
+
* Используется для удаления всех символов, кроме цифр 0-9
|
|
4
18
|
*/
|
|
5
19
|
export const oDigitRegExp = /\D/g;
|
|
6
20
|
/**
|
|
7
|
-
* Удаляет все символы из строки, кроме цифр 0-9
|
|
21
|
+
* Удаляет все символы из строки, кроме цифр 0-9
|
|
8
22
|
*
|
|
9
|
-
* @param
|
|
10
|
-
* @returns Строка, содержащая только цифры
|
|
23
|
+
* @param [str=""] - Входная строка для очистки
|
|
11
24
|
*
|
|
12
25
|
* @example
|
|
13
26
|
* ```typescript
|
|
14
27
|
* oDigitClean("abc123def456"); // "123456"
|
|
15
28
|
* oDigitClean("+7 (999) 123-45-67"); // "79991234567"
|
|
16
|
-
* oDigitClean(""); // ""
|
|
17
29
|
* ```
|
|
18
30
|
*/
|
|
19
|
-
export const oDigitClean = (
|
|
20
|
-
//...
|
|
31
|
+
export const oDigitClean = (str = "") => str.replace(oDigitRegExp, "");
|
|
21
32
|
/**
|
|
22
|
-
* Регулярное выражение для захвата одного или более пробельных символов
|
|
23
|
-
* Включает пробелы, табуляции, переносы строк и другие пробельные символы.
|
|
33
|
+
* Регулярное выражение для захвата одного или более пробельных символов подряд
|
|
24
34
|
*/
|
|
25
|
-
export const
|
|
35
|
+
export const oSpaceRegExp = /\s+/g;
|
|
26
36
|
/**
|
|
27
|
-
* Нормализует пробелы в строке: заменяет множественные пробелы на один и удаляет пробелы в начале и
|
|
37
|
+
* Нормализует пробелы в строке: заменяет множественные пробелы на один и удаляет пробелы в начале и конце
|
|
28
38
|
*
|
|
29
|
-
* @param
|
|
30
|
-
* @returns Строка с нормализованными пробелами
|
|
39
|
+
* @param [str=""] - Входная строка для нормализации
|
|
31
40
|
*
|
|
32
41
|
* @example
|
|
33
42
|
* ```typescript
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
43
|
+
* oSpaceClean(" hello world "); // "hello world"
|
|
44
|
+
* oSpaceClean("multiple\n\n\nspaces"); // "multiple spaces"
|
|
45
|
+
* oSpaceClean("tab\t\tseparated"); // "tab separated"
|
|
37
46
|
* ```
|
|
38
47
|
*/
|
|
39
|
-
export const
|
|
48
|
+
export const oSpaceClean = (str = "") => str.replace(oSpaceRegExp, " ").trim();
|
|
40
49
|
/**
|
|
41
|
-
*
|
|
50
|
+
* Приводит строку к нижнему регистру и нормализует пробелы.
|
|
51
|
+
* Комбинация методов {@link String.toLowerCase} и {@link oSpaceClean}
|
|
42
52
|
*
|
|
43
|
-
* @param str -
|
|
44
|
-
* @param placeholder - Строка или регулярное выражение для удаления (по умолчанию "_")
|
|
45
|
-
* @returns Строка без плейсхолдеров
|
|
53
|
+
* @param [str=""] - Строка для нормализации
|
|
46
54
|
*
|
|
47
55
|
* @example
|
|
48
56
|
* ```typescript
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* clearPH("email@domain.com", /@/); // "emaildomain.com"
|
|
57
|
+
* toFlat(" Hello World "); // "hello world"
|
|
58
|
+
* toFlat("CamelCase String"); // "camelcase string"
|
|
59
|
+
* toFlat(""); // ""
|
|
53
60
|
* ```
|
|
54
61
|
*/
|
|
55
|
-
export const
|
|
56
|
-
//...
|
|
62
|
+
export const toFlat = (str = "") => oSpaceClean(str.toLowerCase());
|
|
57
63
|
/**
|
|
58
|
-
* Приводит первый символ строки к верхнему регистру, остальные оставляет без
|
|
64
|
+
* Приводит первый символ строки к верхнему регистру, остальные оставляет без изменений
|
|
59
65
|
*
|
|
60
|
-
* @param word -
|
|
61
|
-
* @returns Строка с заглавной первой буквой
|
|
66
|
+
* @param [word=""] - Слово для капитализации
|
|
62
67
|
*
|
|
63
68
|
* @example
|
|
64
69
|
* ```typescript
|
|
65
|
-
*
|
|
66
|
-
* toCapital("world"); // "World"
|
|
67
|
-
* toCapital(""); // ""
|
|
68
|
-
* toCapital("a"); // "A"
|
|
70
|
+
* toCapitalCase("hello"); // "Hello"
|
|
69
71
|
* ```
|
|
70
72
|
*/
|
|
71
|
-
export const
|
|
73
|
+
export const toCapitalCase = (word = "") => word.charAt(0).toUpperCase() + word.slice(1);
|
|
72
74
|
/**
|
|
73
|
-
*
|
|
74
|
-
* Разделяет строку по пробелам и применяет капитализацию к каждому слову.
|
|
75
|
+
* Разделяет строку по пробелам и приводит первый символ каждого слова к верхнему регистру ({@link toCapitalCase})
|
|
75
76
|
*
|
|
76
|
-
* @param str - Строка для преобразования в Title Case
|
|
77
|
-
* @returns Строка с заглавными первыми буквами каждого слова
|
|
77
|
+
* @param [str=""] - Строка для преобразования в Title Case
|
|
78
78
|
*
|
|
79
79
|
* @example
|
|
80
80
|
* ```typescript
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* toCapitalMap("single"); // "Single"
|
|
81
|
+
* toCapitalCaseMap("hello world"); // "Hello World"
|
|
82
|
+
* toCapitalCaseMap(""); // ""
|
|
83
|
+
* toCapitalCaseMap("single"); // "Single"
|
|
85
84
|
* ```
|
|
86
85
|
*/
|
|
87
|
-
export const
|
|
88
|
-
//...
|
|
86
|
+
export const toCapitalCaseMap = (str = "") => str.split(" ").map(toCapitalCase).join(" ");
|
|
89
87
|
/**
|
|
90
|
-
* Повторяет строку указанное количество раз с разделителем между
|
|
88
|
+
* Повторяет строку указанное количество раз с разделителем между повторениями
|
|
91
89
|
*
|
|
92
90
|
* @param str - Исходная строка для повторения
|
|
93
|
-
* @param length - Количество повторений (
|
|
94
|
-
* @param separator - Разделитель между повторениями
|
|
95
|
-
* @returns Результирующая строка из повторений
|
|
91
|
+
* @param length - Количество повторений (**должно быть ≥ 0**)
|
|
92
|
+
* @param [separator=""] - Разделитель между повторениями
|
|
96
93
|
*
|
|
97
94
|
* @example
|
|
98
95
|
* ```typescript
|
|
@@ -104,125 +101,3 @@ export const toCapitalMap = (str = "") => str.split(" ").map(toCapital).join(" "
|
|
|
104
101
|
* ```
|
|
105
102
|
*/
|
|
106
103
|
export const repeat = (str, length, separator = "") => Array.from({ length }).fill(str).join(separator);
|
|
107
|
-
//...
|
|
108
|
-
/**
|
|
109
|
-
* Приводит строку к нижнему регистру и нормализует пробелы.
|
|
110
|
-
* Комбинация методов toLowerCase() и spaceClean().
|
|
111
|
-
*
|
|
112
|
-
* @param str - Строка для нормализации
|
|
113
|
-
* @returns Строка в нижнем регистре с нормализованными пробелами
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* ```typescript
|
|
117
|
-
* toFlat(" Hello World "); // "hello world"
|
|
118
|
-
* toFlat("CamelCase String"); // "camelcase string"
|
|
119
|
-
* toFlat(""); // ""
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
|
-
export const toFlat = (str = "") => spaceClean(str.toLowerCase());
|
|
123
|
-
//...
|
|
124
|
-
/**
|
|
125
|
-
* Карта для транслитерации кириллических символов в латинские.
|
|
126
|
-
* Содержит соответствия для всех букв русского алфавита в нижнем регистре.
|
|
127
|
-
* Используется в функции {@link toSlug} для создания URL-friendly строк.
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```typescript
|
|
131
|
-
* cyrillicToLatinMap.get('а'); // "a"
|
|
132
|
-
* cyrillicToLatinMap.get('ё'); // "yo"
|
|
133
|
-
* cyrillicToLatinMap.get('ъ'); // ""
|
|
134
|
-
* ```
|
|
135
|
-
*/
|
|
136
|
-
export const cyrillicToLatinMap = new Map([
|
|
137
|
-
["а", "a"],
|
|
138
|
-
["б", "b"],
|
|
139
|
-
["в", "v"],
|
|
140
|
-
["г", "g"],
|
|
141
|
-
["д", "d"],
|
|
142
|
-
["е", "e"],
|
|
143
|
-
["ё", "yo"],
|
|
144
|
-
["ж", "zh"],
|
|
145
|
-
["з", "z"],
|
|
146
|
-
["и", "i"],
|
|
147
|
-
["й", "y"],
|
|
148
|
-
["к", "k"],
|
|
149
|
-
["л", "l"],
|
|
150
|
-
["м", "m"],
|
|
151
|
-
["н", "n"],
|
|
152
|
-
["о", "o"],
|
|
153
|
-
["п", "p"],
|
|
154
|
-
["р", "r"],
|
|
155
|
-
["с", "s"],
|
|
156
|
-
["т", "t"],
|
|
157
|
-
["у", "u"],
|
|
158
|
-
["ф", "f"],
|
|
159
|
-
["х", "h"],
|
|
160
|
-
["ц", "ts"],
|
|
161
|
-
["ч", "ch"],
|
|
162
|
-
["ш", "sh"],
|
|
163
|
-
["щ", "sch"],
|
|
164
|
-
["ъ", ""],
|
|
165
|
-
["ы", "y"],
|
|
166
|
-
["ь", ""],
|
|
167
|
-
["э", "e"],
|
|
168
|
-
["ю", "yu"],
|
|
169
|
-
["я", "ya"],
|
|
170
|
-
]);
|
|
171
|
-
/**
|
|
172
|
-
* Создает URL-friendly slug из текста.
|
|
173
|
-
* Конвертирует кириллицу в латиницу, удаляет специальные символы,
|
|
174
|
-
* нормализует пробелы и заменяет их на разделитель.
|
|
175
|
-
*
|
|
176
|
-
* @param text - Исходный текст для преобразования в slug
|
|
177
|
-
* @param separator - Разделитель для замены пробелов (по умолчанию "-")
|
|
178
|
-
* @returns URL-friendly строка
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* ```typescript
|
|
182
|
-
* toSlug("Привет, мир!"); // "privet-mir"
|
|
183
|
-
* toSlug("JavaScript Programming"); // "javascript-programming"
|
|
184
|
-
* toSlug("Café & Restaurant", "_"); // "cafe_restaurant"
|
|
185
|
-
* toSlug("Специальные символы!!!", "."); // "specialnye-simvoly"
|
|
186
|
-
* ```
|
|
187
|
-
*/
|
|
188
|
-
export const toSlug = (text, separator = "-") => {
|
|
189
|
-
const buf = [];
|
|
190
|
-
let wasSpace = false;
|
|
191
|
-
for (const _char of text) {
|
|
192
|
-
const char = _char.toLowerCase();
|
|
193
|
-
const code = char.charCodeAt(0);
|
|
194
|
-
// Кириллица (а-я, ё)
|
|
195
|
-
if ((code >= 1072 && code <= 1103) || code === 1105) {
|
|
196
|
-
buf.push(cyrillicToLatinMap.get(char) ?? char);
|
|
197
|
-
wasSpace = false;
|
|
198
|
-
}
|
|
199
|
-
// Цифры (0-9)
|
|
200
|
-
else if (code >= 48 && code <= 57) {
|
|
201
|
-
buf.push(char);
|
|
202
|
-
wasSpace = false;
|
|
203
|
-
}
|
|
204
|
-
// Латиница (a-z)
|
|
205
|
-
else if (code >= 97 && code <= 122) {
|
|
206
|
-
buf.push(char);
|
|
207
|
-
wasSpace = false;
|
|
208
|
-
}
|
|
209
|
-
// Пробуем нормализовать символы с диакритиками в латиницу (é -> e)
|
|
210
|
-
else {
|
|
211
|
-
const normalized = char.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
212
|
-
const nCode = normalized.charCodeAt(0);
|
|
213
|
-
if (normalized.length === 1 && nCode >= 97 && nCode <= 122) {
|
|
214
|
-
buf.push(normalized);
|
|
215
|
-
wasSpace = false;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
if (!wasSpace && buf.length > 0) {
|
|
219
|
-
buf.push(separator);
|
|
220
|
-
wasSpace = true;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// Убираем завершающий separator (с учётом многосимвольного separator)
|
|
226
|
-
const acc = buf.join("");
|
|
227
|
-
return separator && acc.endsWith(separator) ? acc.slice(0, -separator.length) : acc;
|
|
228
|
-
};
|