@nemigo/helpers 0.3.1 → 0.3.3
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/string.js +24 -15
- package/dist/xod.js +9 -6
- package/package.json +1 -1
package/dist/string.js
CHANGED
|
@@ -84,34 +84,43 @@ export const cyrillicToLatinMap = new Map([
|
|
|
84
84
|
* Функция для создания *slug* (фрагмента URL) сущности
|
|
85
85
|
*/
|
|
86
86
|
export const toSlug = (text, separator = "-") => {
|
|
87
|
-
|
|
87
|
+
const buf = [];
|
|
88
88
|
let wasSpace = false;
|
|
89
|
-
for (const _char of text
|
|
89
|
+
for (const _char of text) {
|
|
90
90
|
const char = _char.toLowerCase();
|
|
91
91
|
const code = char.charCodeAt(0);
|
|
92
92
|
// Кириллица (а-я, ё)
|
|
93
93
|
if ((code >= 1072 && code <= 1103) || code === 1105) {
|
|
94
|
-
|
|
95
|
-
wasSpace = false;
|
|
96
|
-
}
|
|
97
|
-
// Латиница (a-z)
|
|
98
|
-
else if (code >= 97 && code <= 122) {
|
|
99
|
-
acc += char;
|
|
94
|
+
buf.push(cyrillicToLatinMap.get(char) ?? char);
|
|
100
95
|
wasSpace = false;
|
|
101
96
|
}
|
|
102
97
|
// Цифры (0-9)
|
|
103
98
|
else if (code >= 48 && code <= 57) {
|
|
104
|
-
|
|
99
|
+
buf.push(char);
|
|
105
100
|
wasSpace = false;
|
|
106
101
|
}
|
|
107
|
-
//
|
|
102
|
+
// Латиница (a-z)
|
|
103
|
+
else if (code >= 97 && code <= 122) {
|
|
104
|
+
buf.push(char);
|
|
105
|
+
wasSpace = false;
|
|
106
|
+
}
|
|
107
|
+
// Пробуем нормализовать символы с диакритиками в латиницу (é -> e)
|
|
108
108
|
else {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
const normalized = char.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
110
|
+
const nCode = normalized.charCodeAt(0);
|
|
111
|
+
if (normalized.length === 1 && nCode >= 97 && nCode <= 122) {
|
|
112
|
+
buf.push(normalized);
|
|
113
|
+
wasSpace = false;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
if (!wasSpace && buf.length > 0) {
|
|
117
|
+
buf.push(separator);
|
|
118
|
+
wasSpace = true;
|
|
119
|
+
}
|
|
112
120
|
}
|
|
113
121
|
}
|
|
114
122
|
}
|
|
115
|
-
// Убираем завершающий separator
|
|
116
|
-
|
|
123
|
+
// Убираем завершающий separator (с учётом многосимвольного separator)
|
|
124
|
+
const acc = buf.join("");
|
|
125
|
+
return separator && acc.endsWith(separator) ? acc.slice(0, -separator.length) : acc;
|
|
117
126
|
};
|
package/dist/xod.js
CHANGED
|
@@ -43,12 +43,15 @@ export const numberSchema = z.unknown().transform((value, ctx) => caseNumber(val
|
|
|
43
43
|
: result));
|
|
44
44
|
export const numberSchemaOptional = z.union([nullSchema, numberSchema]);
|
|
45
45
|
//...
|
|
46
|
-
export const stringSchema = z.unknown().transform((value, ctx) => caseString(value, (result) =>
|
|
47
|
-
?
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
export const stringSchema = z.unknown().transform((value, ctx) => caseString(value, (result) => {
|
|
47
|
+
const trimmed = result === null ? "" : result.trim();
|
|
48
|
+
return trimmed === ""
|
|
49
|
+
? invalid(value, ctx, {
|
|
50
|
+
message: "It isn't a string or empty string",
|
|
51
|
+
expected: "string (or number)",
|
|
52
|
+
})
|
|
53
|
+
: trimmed;
|
|
54
|
+
}));
|
|
52
55
|
export const stringSchemaOptional = z.union([nullSchema, stringSchema]);
|
|
53
56
|
//...
|
|
54
57
|
export default {
|