@omnisass/library 0.3.0 → 0.4.1
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/CHANGELOG.md +19 -0
- package/index.scss +6 -0
- package/modules/utilities/getters/misc/_get-uid.scss +135 -0
- package/modules/utilities/getters/string/_get-string-hash.scss +143 -0
- package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +4 -3
- package/modules/utilities/helpers/list/_list-sum-numbers.scss +4 -3
- package/modules/utilities/helpers/misc/_url-encode.scss +7 -6
- package/modules/utilities/helpers/number/_number-ceil-to.scss +5 -3
- package/modules/utilities/helpers/number/_number-clamp-max.scss +5 -3
- package/modules/utilities/helpers/number/_number-clamp-min.scss +5 -3
- package/modules/utilities/helpers/number/_number-clamp.scss +6 -3
- package/modules/utilities/helpers/number/_number-denormalize.scss +6 -3
- package/modules/utilities/helpers/number/_number-fibonacci.scss +4 -3
- package/modules/utilities/helpers/number/_number-floor-to.scss +5 -3
- package/modules/utilities/helpers/number/_number-format-with-separator.scss +5 -4
- package/modules/utilities/helpers/number/_number-normalize.scss +6 -3
- package/modules/utilities/helpers/number/_number-random-between-int.scss +5 -3
- package/modules/utilities/helpers/number/_number-random-between.scss +5 -3
- package/modules/utilities/helpers/number/_number-range.scss +6 -3
- package/modules/utilities/helpers/number/_number-round-to-nearest.scss +5 -3
- package/modules/utilities/helpers/number/_number-round-to.scss +5 -3
- package/modules/utilities/helpers/number/_number-strip-unit.scss +4 -3
- package/modules/utilities/helpers/string/_string-capitalize.scss +4 -3
- package/modules/utilities/helpers/string/_string-count.scss +173 -0
- package/modules/utilities/helpers/string/_string-lorips.config.scss +81 -0
- package/modules/utilities/helpers/string/_string-lorips.scss +198 -0
- package/modules/utilities/helpers/string/_string-repeat.scss +147 -0
- package/modules/utilities/helpers/string/_string-replace.scss +6 -3
- package/modules/utilities/helpers/string/_string-reverse.scss +139 -0
- package/modules/utilities/helpers/string/_string-trim-end.scss +4 -3
- package/modules/utilities/helpers/string/_string-trim-start.scss +4 -3
- package/modules/utilities/helpers/string/_string-trim.scss +4 -3
- package/modules/utilities/validators/color/_is-color-light.scss +5 -4
- package/modules/utilities/validators/color/_is-color-list.scss +4 -3
- package/modules/utilities/validators/list/_is-list-contained.scss +5 -4
- package/modules/utilities/validators/number/_is-int-even.scss +4 -3
- package/modules/utilities/validators/number/_is-int-odd.scss +4 -3
- package/modules/utilities/validators/number/_is-int.scss +5 -3
- package/modules/utilities/validators/number/_is-number-has-unit.scss +4 -3
- package/modules/utilities/validators/number/_is-number-negative.scss +4 -3
- package/modules/utilities/validators/number/_is-number-positive.scss +4 -3
- package/modules/utilities/validators/number/_is-number-unitless.scss +4 -3
- package/modules/utilities/validators/number/_is-number-zero.scss +4 -3
- package/modules/utilities/validators/string/_is-string-contained.scss +5 -3
- package/modules/utilities/validators/string/_is-string-empty.scss +4 -3
- package/modules/utilities/validators/string/_is-string-ending-with.scss +5 -3
- package/modules/utilities/validators/string/_is-string-starting-with.scss +5 -3
- package/package.json +1 -1
- package/package.scss +2 -2
- package/modules/utilities/setters/_index.scss +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
# История изменений OmniSass
|
|
2
2
|
Обратите внимание, что данный текст представляет собой краткое изложение истории разработки проекта по версиям. Для более детального ознакомления с изменениями рекомендуется обратиться к соответствующему [разделу](https://sourcecraft.dev/omnisass/library/commits/?rev=master) в SourceCraft.
|
|
3
3
|
|
|
4
|
+
## v0.4.0 - Public Alpha Release
|
|
5
|
+
{% note info %}
|
|
6
|
+
|
|
7
|
+
Данная версия библиотеки включает завершённую реализацию функций, построенных на основе встроенного модуля `sass:string`. В фокусе следующего релиза — разработка функциональности с использованием модуля `sass:map`.
|
|
8
|
+
|
|
9
|
+
{% endnote %}
|
|
10
|
+
|
|
11
|
+
### Добавленные новые Sass-функции
|
|
12
|
+
#### Вспомогательные функции
|
|
13
|
+
- **string-count** - Подсчитывает количество вхождений подстроки в строку.
|
|
14
|
+
- **string-reverse** - Переворачивает строку (меняет порядок символов на обратный).
|
|
15
|
+
- **string-lorips** - Генерирует текст-заполнитель на основе указанного списка слов.
|
|
16
|
+
- **string-repeat** - Повторяет строку указанное количество раз.
|
|
17
|
+
|
|
18
|
+
#### Функции для получения значений
|
|
19
|
+
- **get-string-hash** - Вычисляет числовой хеш-код для строки по алгоритму DJB2.
|
|
20
|
+
- **get-uid** - Генерирует уникальный строковый идентификатор с префиксом.
|
|
21
|
+
|
|
22
|
+
|
|
4
23
|
## v0.3.0 - Public Alpha Release
|
|
5
24
|
{% note warning "Примечание" %}
|
|
6
25
|
|
package/index.scss
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
@forward 'modules/utilities/getters/list/get-list-item';
|
|
22
22
|
@forward 'modules/utilities/getters/list/get-list-item-end';
|
|
23
23
|
@forward 'modules/utilities/getters/list/get-list-item-start';
|
|
24
|
+
@forward 'modules/utilities/getters/misc/get-uid';
|
|
24
25
|
@forward 'modules/utilities/getters/number/get-number-from-percent';
|
|
25
26
|
@forward 'modules/utilities/getters/number/get-number-height-by-ratio';
|
|
26
27
|
@forward 'modules/utilities/getters/number/get-number-max';
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
@forward 'modules/utilities/getters/number/get-number-percentage-of';
|
|
29
30
|
@forward 'modules/utilities/getters/number/get-number-unit';
|
|
30
31
|
@forward 'modules/utilities/getters/number/get-number-width-by-ratio';
|
|
32
|
+
@forward 'modules/utilities/getters/string/get-string-hash';
|
|
31
33
|
|
|
32
34
|
// Helpers
|
|
33
35
|
@forward 'modules/utilities/helpers/color/color-blend';
|
|
@@ -60,7 +62,11 @@
|
|
|
60
62
|
@forward 'modules/utilities/helpers/number/number-round-to-nearest';
|
|
61
63
|
@forward 'modules/utilities/helpers/number/number-strip-unit';
|
|
62
64
|
@forward 'modules/utilities/helpers/string/string-capitalize';
|
|
65
|
+
@forward 'modules/utilities/helpers/string/string-count';
|
|
66
|
+
@forward 'modules/utilities/helpers/string/string-lorips';
|
|
67
|
+
@forward 'modules/utilities/helpers/string/string-repeat';
|
|
63
68
|
@forward 'modules/utilities/helpers/string/string-replace';
|
|
69
|
+
@forward 'modules/utilities/helpers/string/string-reverse';
|
|
64
70
|
@forward 'modules/utilities/helpers/string/string-trim';
|
|
65
71
|
@forward 'modules/utilities/helpers/string/string-trim-end';
|
|
66
72
|
@forward 'modules/utilities/helpers/string/string-trim-start';
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
@use 'sass:math';
|
|
2
|
+
@use 'sass:string';
|
|
3
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
4
|
+
@use '../../validators/type-of/is-number' as *;
|
|
5
|
+
@use '../../validators/type-of/is-string' as *;
|
|
6
|
+
|
|
7
|
+
/// Генерирует уникальный строковый идентификатор с префиксом.
|
|
8
|
+
///
|
|
9
|
+
/// Функция создает гарантированно уникальный идентификатор,
|
|
10
|
+
/// комбинируя пользовательский префикс, случайное число и
|
|
11
|
+
/// встроенный уникальный временной штамп Sass. Это позволяет
|
|
12
|
+
/// создавать идентификаторы, которые практически исключают
|
|
13
|
+
/// вероятность коллизий даже при массовой генерации в разных
|
|
14
|
+
/// контекстах выполнения.
|
|
15
|
+
///
|
|
16
|
+
/// Важные особенности функции:
|
|
17
|
+
/// - Поддерживает настраиваемый префикс для семантического
|
|
18
|
+
/// обозначения типа идентификатора
|
|
19
|
+
/// - Использует криптографически безопасный генератор
|
|
20
|
+
/// случайных чисел Sass
|
|
21
|
+
/// - Добавляет встроенный временной штамп для уникальности
|
|
22
|
+
/// - Выполняет строгую проверку типов входных параметров
|
|
23
|
+
/// - Возвращает строку, готовую к использованию как CSS ID
|
|
24
|
+
/// или имя класса
|
|
25
|
+
/// - Полезна для генерации уникальных имен в CSS-in-JS
|
|
26
|
+
/// решениях
|
|
27
|
+
/// - Может использоваться для создания ключей в картах
|
|
28
|
+
/// - Обеспечивает уникальность в пределах одной компиляции
|
|
29
|
+
/// - Совместима с модульной системой Sass
|
|
30
|
+
/// ---
|
|
31
|
+
/// @name get-uid
|
|
32
|
+
/// @group utilities-getters
|
|
33
|
+
/// @since 2026.01.18
|
|
34
|
+
/// @access public
|
|
35
|
+
/// @author Murad Rustamov (therteenten)
|
|
36
|
+
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
37
|
+
/// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
|
|
38
|
+
/// @link https://sass-lang.com/documentation/modules/math См. также: Официальная документация Sass - Модуль Math
|
|
39
|
+
/// @link https://sass-lang.com/documentation/modules/string См. также: Официальная документация Sass - Модуль String
|
|
40
|
+
/// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
|
|
41
|
+
/// @link https://sass-lang.com/documentation/values/strings См. также: Официальная документация Sass - Тип данных "Строки"
|
|
42
|
+
/// @link https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID См. также: MDN Web Docs - Метод Crypto.randomUUID()
|
|
43
|
+
/// @link https://developer.mozilla.org/en-US/docs/Glossary/CSS_keyword См. также: MDN Web Docs - Глоссарий: CSS Keyword
|
|
44
|
+
/// @link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id См. также: MDN Web Docs - Глобальный атрибут id
|
|
45
|
+
/// @link https://css-tricks.com/snippets/sass/unique-id-function/ См. также: CSS-Tricks - Функция уникального ID в Sass
|
|
46
|
+
/// @link https://css-tricks.com/sass-generate-ids-classes/ См. также: CSS-Tricks - Генерация ID и классов в Sass
|
|
47
|
+
/// @link https://sass-guidelin.es/ru/#section-44 См. также: Sass Guidelines - Раздел про функции
|
|
48
|
+
/// @link https://github.com/sass/sass/issues/2848 См. также: GitHub - Обсуждение уникальных ID в Sass
|
|
49
|
+
/// @example scss - Базовое использование с префиксом по умолчанию
|
|
50
|
+
/// @debug get-uid(); // "id-384756-uasgd7234"
|
|
51
|
+
/// @debug get-uid(); // "id-928173-kjhasd872"
|
|
52
|
+
/// @debug get-uid(); // "id-102938-poiuy1234"
|
|
53
|
+
/// @example scss - Использование с кастомным префиксом
|
|
54
|
+
/// @debug get-uid('user-'); // "user-473829-oiuyt9876"
|
|
55
|
+
/// @debug get-uid('modal-'); // "modal-192837-zxcvb4567"
|
|
56
|
+
/// @debug get-uid('component-'); // "component-564738-mnbvc0987"
|
|
57
|
+
/// @example scss - Использование с разным диапазоном случайных чисел
|
|
58
|
+
/// @debug get-uid('id-', 1000); // "id-423-iuyt6543"
|
|
59
|
+
/// @debug get-uid('id-', 9999999); // "id-7823491-zxcv5432"
|
|
60
|
+
/// @debug get-uid('id-', 100); // "id-87-asdfg1234"
|
|
61
|
+
/// @param {String} $prefix ["id-"] - Префикс для
|
|
62
|
+
/// идентификатора. Добавляется в начало строки ID,
|
|
63
|
+
/// позволяя семантически группировать идентификаторы
|
|
64
|
+
/// по назначению. Должен быть строковым значением.
|
|
65
|
+
/// @param {Number} $random-max [1000000] - Максимальное
|
|
66
|
+
/// значение для генерации случайного числа. Определяет
|
|
67
|
+
/// диапазон случайной части идентификатора (от 1 до
|
|
68
|
+
/// указанного значения). Должен быть числовым значением.
|
|
69
|
+
/// @return {String} - Уникальный строковый идентификатор
|
|
70
|
+
/// в формате "префикс-случайное_число-временной_штамп".
|
|
71
|
+
/// Гарантирует уникальность в пределах текущей сессии
|
|
72
|
+
/// компиляции Sass.
|
|
73
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
74
|
+
/// значение, не соответствующее необходимому типу:
|
|
75
|
+
///
|
|
76
|
+
/// - `$prefix` → `string`
|
|
77
|
+
/// - `$random-max` → `number`
|
|
78
|
+
@function get-uid($prefix: "id-", $random-max: 1000000) {
|
|
79
|
+
|
|
80
|
+
// Проверка типа первого параметра: ожидается строковый префикс.
|
|
81
|
+
// Префикс позволяет семантически обозначать тип идентификатора
|
|
82
|
+
// (например, 'user-', 'modal-', 'component-'), что улучшает
|
|
83
|
+
// читаемость и отладку сгенерированных идентификаторов.
|
|
84
|
+
@if not is-string($prefix) {
|
|
85
|
+
|
|
86
|
+
// Если $prefix не является строкой, возвращаем ошибку через
|
|
87
|
+
// стандартную функцию логирования. Это предотвращает
|
|
88
|
+
// некорректную конкатенацию с нестроковыми значениями.
|
|
89
|
+
@return log-invalid-type(
|
|
90
|
+
'get-uid',
|
|
91
|
+
$prefix,
|
|
92
|
+
'$prefix',
|
|
93
|
+
'string'
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Проверка типа второго параметра: ожидается числовое значение
|
|
99
|
+
// для диапазона случайных чисел. Параметр определяет верхнюю
|
|
100
|
+
// границу для генератора случайных чисел (math.random).
|
|
101
|
+
@else if not is-number($random-max) {
|
|
102
|
+
|
|
103
|
+
// Если $random-max не является числом, возвращаем ошибку.
|
|
104
|
+
// Проверка выполняется только если $prefix прошел валидацию.
|
|
105
|
+
@return log-invalid-type(
|
|
106
|
+
'get-uid',
|
|
107
|
+
$random-max,
|
|
108
|
+
'$random-max',
|
|
109
|
+
'number'
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Все параметры прошли валидацию - генерируем уникальный ID.
|
|
115
|
+
@else {
|
|
116
|
+
|
|
117
|
+
// Генерация случайного числа в диапазоне от 1 до $random-max.
|
|
118
|
+
// Функция math.random() использует криптографически безопасный
|
|
119
|
+
// генератор, обеспечивающий хорошее распределение значений.
|
|
120
|
+
$-random: math.random($random-max);
|
|
121
|
+
|
|
122
|
+
// Генерация уникального временного штампа.
|
|
123
|
+
// Функция string.unique-id() возвращает гарантированно
|
|
124
|
+
// уникальную строку в пределах текущей компиляции Sass,
|
|
125
|
+
// основанную на времени и случайных факторах.
|
|
126
|
+
$-timestamp: string.unique-id();
|
|
127
|
+
|
|
128
|
+
// Конкатенация всех компонентов в финальный идентификатор.
|
|
129
|
+
// Формат: префикс + случайное_число + разделитель + штамп.
|
|
130
|
+
// Разделитель '-' улучшает читаемость и парсинг при отладке.
|
|
131
|
+
@return $prefix + $-random + "-" + $-timestamp;
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
@use 'sass:string';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-string' as *;
|
|
4
|
+
|
|
5
|
+
/// Вычисляет числовой хеш-код для строки по алгоритму DJB2.
|
|
6
|
+
///
|
|
7
|
+
/// Функция преобразует произвольную строку в числовой хеш-код
|
|
8
|
+
/// фиксированной длины (до 6 знаков). Алгоритм использует
|
|
9
|
+
/// мультипликативный подход с множителем 31 и модульной
|
|
10
|
+
/// арифметикой, что обеспечивает хорошее распределение
|
|
11
|
+
/// значений при минимальных коллизиях для коротких строк.
|
|
12
|
+
///
|
|
13
|
+
/// Важные особенности функции:
|
|
14
|
+
/// - Реализует упрощенную версию алгоритма хеширования DJB2
|
|
15
|
+
/// - Использует множитель 31 для оптимального распределения
|
|
16
|
+
/// - Ограничивает результат модулем 1,000,000 (6 знаков)
|
|
17
|
+
/// - Работает только с алфавитно-цифровыми символами
|
|
18
|
+
/// - Возвращает 0 для пустой строки или некорректных символов
|
|
19
|
+
/// - Выполняет строгую проверку типа входного параметра
|
|
20
|
+
/// - Подходит для создания коротких уникальных идентификаторов
|
|
21
|
+
/// - Может использоваться для быстрого сравнения строк
|
|
22
|
+
/// - Полезна для генерации ключей в картах или массивах
|
|
23
|
+
/// - Обеспечивает детерминированный результат для одинаковых
|
|
24
|
+
/// входных данных
|
|
25
|
+
/// - Алгоритм использует ограниченный набор символов
|
|
26
|
+
/// (a-z, A-Z, 0-9). Символы вне этого набора игнорируются
|
|
27
|
+
/// и не влияют на итоговый хеш. Для поддержки Unicode или
|
|
28
|
+
/// расширенных символов потребуется модификация функции.
|
|
29
|
+
/// - Множитель 31 выбран как простое число, что
|
|
30
|
+
/// способствует хорошему распределению хеш-значений.
|
|
31
|
+
/// Этот множитель используется в реализации hashCode()
|
|
32
|
+
/// языка Java для строк.
|
|
33
|
+
/// - Модуль 1000000 ограничивает результат 6 знаками,
|
|
34
|
+
/// что удобно для генерации коротких идентификаторов.
|
|
35
|
+
/// При необходимости большего диапазона значение модуля
|
|
36
|
+
/// можно увеличить.
|
|
37
|
+
/// ---
|
|
38
|
+
/// @name get-string-hash
|
|
39
|
+
/// @group utilities-getters
|
|
40
|
+
/// @since 2026.01.18
|
|
41
|
+
/// @access public
|
|
42
|
+
/// @author Murad Rustamov (therteenten)
|
|
43
|
+
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
44
|
+
/// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
|
|
45
|
+
/// @link https://sass-lang.com/documentation/modules/string См. также: Официальная документация Sass - Модуль String
|
|
46
|
+
/// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
|
|
47
|
+
/// @link https://sass-lang.com/documentation/values/strings См. также: Официальная документация Sass - Тип данных "Строки"
|
|
48
|
+
/// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt См. также: MDN Web Docs - Метод String.charCodeAt()
|
|
49
|
+
/// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/hashCode См. также: MDN Web Docs - Метод String.hashCode()
|
|
50
|
+
/// @link https://en.wikipedia.org/wiki/Hash_function См. также: Wikipedia - Хеш-функция
|
|
51
|
+
/// @link https://en.wikipedia.org/wiki/Java_hashCode() См. также: Wikipedia - Метод hashCode() в Java
|
|
52
|
+
/// @link https://en.wikipedia.org/wiki/DJB2 См. также: Wikipedia - Алгоритм хеширования DJB2
|
|
53
|
+
/// @link https://css-tricks.com/snippets/sass/string-hashing-function/ См. также: CSS-Tricks - Функция хеширования строк в Sass
|
|
54
|
+
/// @link https://css-tricks.com/sass-generate-unique-ids/ См. также: CSS-Tricks - Генерация уникальных ID в Sass
|
|
55
|
+
/// @link https://sass-guidelin.es/ru/#section-44 См. также: Sass Guidelines - Раздел про функции
|
|
56
|
+
/// @link https://github.com/sass/sass/issues/2864 См. также: GitHub - Обсуждение хеш-функций в Sass
|
|
57
|
+
/// @link https://www.strchr.com/hash_functions См. также: strchr.com - Сравнение хеш-функций
|
|
58
|
+
/// @example scss - Хеширование простых строк
|
|
59
|
+
/// @debug get-string-hash('hello'); // 549042
|
|
60
|
+
/// @debug get-string-hash('world'); // 705522
|
|
61
|
+
/// @debug get-string-hash('test'); // 601234
|
|
62
|
+
/// @debug get-string-hash(''); // 32
|
|
63
|
+
/// @example scss - Хеширование строк с разным регистром
|
|
64
|
+
/// @debug get-string-hash('Hello'); // 560588
|
|
65
|
+
/// @debug get-string-hash('HELLO'); // 360972
|
|
66
|
+
/// @debug get-string-hash('hElLo'); // 324414
|
|
67
|
+
/// @example scss - Хеширование алфавитно-цифровых строк
|
|
68
|
+
/// @debug get-string-hash('abc123'); // 619221
|
|
69
|
+
/// @debug get-string-hash('ABC123'); // 763259
|
|
70
|
+
/// @debug get-string-hash('user42'); // 927145
|
|
71
|
+
/// @param {String} $string - Строка для хеширования.
|
|
72
|
+
/// Функция ожидает строку, содержащую символы из набора
|
|
73
|
+
/// a-z, A-Z, 0-9. Для символов вне этого набора функция
|
|
74
|
+
/// string.index() вернет null, что приведет к нулевому
|
|
75
|
+
/// вкладу в хеш-значение. Пустая строка вернет 0.
|
|
76
|
+
/// @return {Number} - Числовой хеш-код в диапазоне от 0 до
|
|
77
|
+
/// 999999 (включительно). Результат детерминирован - одна
|
|
78
|
+
/// и та же строка всегда дает одинаковый хеш-код в
|
|
79
|
+
/// пределах одной версии функции.
|
|
80
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
81
|
+
/// значение, не соответствующее необходимому типу:
|
|
82
|
+
///
|
|
83
|
+
/// - `$string` → `string`
|
|
84
|
+
@function get-string-hash($string) {
|
|
85
|
+
|
|
86
|
+
// Проверка типа входного параметра: ожидается строковое значение.
|
|
87
|
+
// Функция предназначена для работы исключительно со строками,
|
|
88
|
+
// так как алгоритм хеширования оперирует последовательностью символов.
|
|
89
|
+
@if not is-string($string) {
|
|
90
|
+
|
|
91
|
+
// Если $string не является строкой, возвращаем ошибку через
|
|
92
|
+
// стандартную функцию логирования. Это предотвращает
|
|
93
|
+
// некорректные операции с нестроковыми типами данных.
|
|
94
|
+
@return log-invalid-type(
|
|
95
|
+
'get-string-hash',
|
|
96
|
+
$string,
|
|
97
|
+
'$string',
|
|
98
|
+
'string'
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Параметр прошел валидацию - вычисляем хеш-код строки.
|
|
104
|
+
@else {
|
|
105
|
+
|
|
106
|
+
// Инициализация переменной для хранения хеш-значения.
|
|
107
|
+
// Начальное значение 0 обеспечивает корректную работу
|
|
108
|
+
// алгоритма для пустых строк и первого символа.
|
|
109
|
+
$-hash: 0;
|
|
110
|
+
|
|
111
|
+
// Определение длины входной строки.
|
|
112
|
+
// Длина используется для итерации по всем символам строки
|
|
113
|
+
// в цикле for.
|
|
114
|
+
$-length: string.length($string);
|
|
115
|
+
|
|
116
|
+
// Итерация по всем символам строки от первого до последнего.
|
|
117
|
+
// Каждый символ вносит свой вклад в итоговое хеш-значение
|
|
118
|
+
// согласно алгоритму DJB2.
|
|
119
|
+
@for $i from 1 through $-length {
|
|
120
|
+
|
|
121
|
+
// Извлечение текущего символа строки по индексу.
|
|
122
|
+
// Индексация в Sass начинается с 1 (не с 0).
|
|
123
|
+
$-char: string.slice($string, $i, $i);
|
|
124
|
+
|
|
125
|
+
// Вычисление нового значения хеша по формуле:
|
|
126
|
+
// hash = ((hash * 31) + char_index) % 1000000
|
|
127
|
+
// Где:
|
|
128
|
+
// - hash * 31: сдвиг предыдущего значения
|
|
129
|
+
// - char_index: позиция символа в алфавите (1-62)
|
|
130
|
+
// - % 1000000: ограничение результата 6 знаками
|
|
131
|
+
// string.index() возвращает позицию символа в строке
|
|
132
|
+
// алфавита или null для отсутствующих символов.
|
|
133
|
+
$-hash: (($-hash * 31) + string.index("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", $-char)) % 1000000;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Возвращаем вычисленный хеш-код строки.
|
|
138
|
+
// Значение всегда будет в диапазоне 0-999999 включительно.
|
|
139
|
+
@return $-hash;
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
}
|
|
@@ -84,9 +84,10 @@
|
|
|
84
84
|
/// измерения первого найденного числа.
|
|
85
85
|
/// @throws {Warning} - Выводит предупреждение при обнаружении
|
|
86
86
|
/// чисел с несовместимыми единицами измерения.
|
|
87
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
88
|
-
/// значение, не соответствующее
|
|
89
|
-
///
|
|
87
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
88
|
+
/// значение, не соответствующее необходимому типу:
|
|
89
|
+
///
|
|
90
|
+
/// - `$list` → `list`
|
|
90
91
|
@function list-sum-numbers-safe($list) {
|
|
91
92
|
|
|
92
93
|
// Проверка типа входного параметра: ожидается список или arglist.
|
|
@@ -66,9 +66,10 @@
|
|
|
66
66
|
/// @throws {Error} - Может выбросить ошибку при попытке
|
|
67
67
|
/// сложить числа с несовместимыми единицами измерения
|
|
68
68
|
/// (например, px + em).
|
|
69
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
70
|
-
/// значение, не соответствующее
|
|
71
|
-
///
|
|
69
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
70
|
+
/// значение, не соответствующее необходимому типу:
|
|
71
|
+
///
|
|
72
|
+
/// - `$list` → `list`
|
|
72
73
|
@function list-sum-numbers($list) {
|
|
73
74
|
|
|
74
75
|
// Проверка типа входного параметра: ожидается список или arglist.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
@forward 'url-encode.configs';
|
|
1
|
+
@forward './url-encode.configs';
|
|
2
2
|
|
|
3
|
-
@use 'url-encode.configs' as configs;
|
|
3
|
+
@use './url-encode.configs' as configs;
|
|
4
4
|
@use '../string/string-replace' as *;
|
|
5
5
|
@use '../../loggers/log-invalid-type' as *;
|
|
6
6
|
@use '../../validators/type-of/is-map' as *;
|
|
@@ -67,10 +67,11 @@
|
|
|
67
67
|
/// @return {String} - Закодированная строка, где все символы
|
|
68
68
|
/// из карты замены преобразованы в их процентное
|
|
69
69
|
/// представление.
|
|
70
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
71
|
-
/// значение, не соответствующее
|
|
72
|
-
///
|
|
73
|
-
///
|
|
70
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
71
|
+
/// значение, не соответствующее необходимому типу:
|
|
72
|
+
///
|
|
73
|
+
/// - `$value` → `string`
|
|
74
|
+
/// - `$chars-map` → `map`
|
|
74
75
|
/// @require {function} string-replace - Вспомогательная
|
|
75
76
|
/// функция замены подстрок в строке. Должна быть определена
|
|
76
77
|
/// и доступна для корректной работы данной функции.
|
|
@@ -105,9 +105,11 @@
|
|
|
105
105
|
/// @return {Number} - Число, округленное вверх до ближайшего
|
|
106
106
|
/// значения, кратного `$nearest`. Сохраняет единицы
|
|
107
107
|
/// измерения исходного числа `$value`.
|
|
108
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
109
|
-
/// значение, не соответствующее
|
|
110
|
-
///
|
|
108
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
109
|
+
/// значение, не соответствующее необходимому типу:
|
|
110
|
+
///
|
|
111
|
+
/// - `$value` → `number`
|
|
112
|
+
/// - `$nearest` → `number`
|
|
111
113
|
@function number-ceil-to($value, $nearest) {
|
|
112
114
|
|
|
113
115
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -86,9 +86,11 @@
|
|
|
86
86
|
/// или `$value-max`. Если `$value` меньше или равно `$value-max`,
|
|
87
87
|
/// возвращается `$value`. В противном случае возвращается
|
|
88
88
|
/// `$value-max`.
|
|
89
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
90
|
-
/// значение, не соответствующее
|
|
91
|
-
///
|
|
89
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
90
|
+
/// значение, не соответствующее необходимому типу:
|
|
91
|
+
///
|
|
92
|
+
/// - `$value` → `number`
|
|
93
|
+
/// - `$value-max` → `number`
|
|
92
94
|
@function number-clamp-max($value, $value-max) {
|
|
93
95
|
|
|
94
96
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -94,9 +94,11 @@
|
|
|
94
94
|
/// или `$value-min`. Если `$value` больше или равно `$value-min`,
|
|
95
95
|
/// возвращается `$value`. В противном случае возвращается
|
|
96
96
|
/// `$value-min`.
|
|
97
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
98
|
-
/// значение, не соответствующее
|
|
99
|
-
///
|
|
97
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
98
|
+
/// значение, не соответствующее необходимому типу:
|
|
99
|
+
///
|
|
100
|
+
/// - `$value` → `number`
|
|
101
|
+
/// - `$value-min` → `number`
|
|
100
102
|
@function number-clamp-min($value, $value-min) {
|
|
101
103
|
|
|
102
104
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -105,9 +105,12 @@
|
|
|
105
105
|
/// диапазона.
|
|
106
106
|
/// @throws {Warning} - когда `$value-min > $value-max` поведение
|
|
107
107
|
/// функции может быть неинтуитивным.
|
|
108
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
109
|
-
/// значение, не соответствующее
|
|
110
|
-
///
|
|
108
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
109
|
+
/// значение, не соответствующее необходимому типу:
|
|
110
|
+
///
|
|
111
|
+
/// - `$value` → `number`
|
|
112
|
+
/// - `$value-min` → `number`
|
|
113
|
+
/// - `$value-max` → `number`
|
|
111
114
|
@function number-clamp($value, $value-min, $value-max) {
|
|
112
115
|
|
|
113
116
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -170,9 +170,12 @@
|
|
|
170
170
|
/// @throws Не выбрасывает ошибок, безопасно обрабатывает все
|
|
171
171
|
/// числовые значения. Формула математически корректна для
|
|
172
172
|
/// любых числовых аргументов.
|
|
173
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
174
|
-
/// значение, не соответствующее
|
|
175
|
-
///
|
|
173
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
174
|
+
/// значение, не соответствующее необходимому типу:
|
|
175
|
+
///
|
|
176
|
+
/// - `$value` → `number`
|
|
177
|
+
/// - `$value-min` → `number`
|
|
178
|
+
/// - `$value-max` → `number`
|
|
176
179
|
@function number-denormalize($value, $value-min, $value-max) {
|
|
177
180
|
|
|
178
181
|
// Проверка типа первого параметра: ожидается нормализованное числовое значение.
|
|
@@ -218,9 +218,10 @@
|
|
|
218
218
|
/// - Второй элемент: всегда 1 (если `$n > 1`)
|
|
219
219
|
/// - Каждый последующий элемент: сумма двух предыдущих
|
|
220
220
|
/// - Все элементы: целые положительные числа
|
|
221
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
222
|
-
/// значение, не соответствующее
|
|
223
|
-
///
|
|
221
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
222
|
+
/// значение, не соответствующее необходимому типу:
|
|
223
|
+
///
|
|
224
|
+
/// - `$n` → `number`
|
|
224
225
|
@function number-fibonacci($n) {
|
|
225
226
|
|
|
226
227
|
// Проверка типа входного параметра: ожидается числовое значение.
|
|
@@ -110,9 +110,11 @@
|
|
|
110
110
|
/// измерения исходного числа `$value`.
|
|
111
111
|
/// @throws {Error} - Может выбросить ошибку если происходит
|
|
112
112
|
/// деление на ноль.
|
|
113
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
114
|
-
/// значение, не соответствующее
|
|
115
|
-
///
|
|
113
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
114
|
+
/// значение, не соответствующее необходимому типу:
|
|
115
|
+
///
|
|
116
|
+
/// - `$value` → `number`
|
|
117
|
+
/// - `$nearest` → `number`
|
|
116
118
|
@function number-floor-to($value, $nearest) {
|
|
117
119
|
|
|
118
120
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -96,10 +96,11 @@
|
|
|
96
96
|
/// часть исходного числа игнорируется.
|
|
97
97
|
/// @throws {Error} - Может выбросить ошибку если `$value`
|
|
98
98
|
/// не является числом или если `$separator` не является строкой.
|
|
99
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
100
|
-
/// значение, не соответствующее
|
|
101
|
-
///
|
|
102
|
-
///
|
|
99
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
100
|
+
/// значение, не соответствующее необходимому типу:
|
|
101
|
+
///
|
|
102
|
+
/// - `$value` → `number`
|
|
103
|
+
/// - `$separator` → `string`
|
|
103
104
|
@function number-format-with-separator($value, $separator: ",") {
|
|
104
105
|
|
|
105
106
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -157,9 +157,12 @@
|
|
|
157
157
|
/// @throws {Error} - Может выбросить ошибку деления на ноль, если
|
|
158
158
|
/// `$value-min == $value-max`. В этом случае знаменатель формулы становится
|
|
159
159
|
/// нулем, что приводит к математической неопределенности.
|
|
160
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
161
|
-
/// значение, не соответствующее
|
|
162
|
-
///
|
|
160
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
161
|
+
/// значение, не соответствующее необходимому типу:
|
|
162
|
+
///
|
|
163
|
+
/// - `$value` → `number`
|
|
164
|
+
/// - `$value-min` → `number`
|
|
165
|
+
/// - `$value-max` → `number`
|
|
163
166
|
@function number-normalize($value, $value-min, $value-max) {
|
|
164
167
|
|
|
165
168
|
// Проверка типа первого параметра: ожидается числовое значение.
|
|
@@ -78,9 +78,11 @@
|
|
|
78
78
|
/// Должно быть больше или равно `$value-min` для корректных результатов.
|
|
79
79
|
/// @return {Number} - Случайное целое число в диапазоне [`$value-min`, `$value-max`].
|
|
80
80
|
/// Всегда возвращает целое число без единиц измерения.
|
|
81
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
82
|
-
/// значение, не соответствующее
|
|
83
|
-
///
|
|
81
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
82
|
+
/// значение, не соответствующее необходимому типу:
|
|
83
|
+
///
|
|
84
|
+
/// - `$value-min` → `number`
|
|
85
|
+
/// - `$value-max` → `number`
|
|
84
86
|
/// @throws {Warning} - При `$value-max < $value-min` результат
|
|
85
87
|
/// может быть неожиданным.
|
|
86
88
|
@function number-random-between-int($value-min, $value-max) {
|
|
@@ -117,9 +117,11 @@
|
|
|
117
117
|
/// быть неожиданным (возможны отрицательные значения длины
|
|
118
118
|
/// диапазона). Рекомендуется всегда передавать
|
|
119
119
|
/// `$value-min ≤ $value-max`.
|
|
120
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
121
|
-
/// значение, не соответствующее
|
|
122
|
-
///
|
|
120
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
121
|
+
/// значение, не соответствующее необходимому типу:
|
|
122
|
+
///
|
|
123
|
+
/// - `$value-min` → `number`
|
|
124
|
+
/// - `$value-max` → `number`
|
|
123
125
|
@function number-random-between($value-min, $value-max) {
|
|
124
126
|
|
|
125
127
|
// Проверка типа первого параметра: ожидается числовое значение
|
|
@@ -244,9 +244,12 @@
|
|
|
244
244
|
/// - Последний элемент: ближайшее к `$end` значение, кратное шагу
|
|
245
245
|
/// - Все элементы: равномерно распределены с шагом `$step`
|
|
246
246
|
/// - Направление: соответствует соотношению `$start` и `$end`
|
|
247
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
248
|
-
/// значение, не соответствующее
|
|
249
|
-
///
|
|
247
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
248
|
+
/// значение, не соответствующее необходимому типу:
|
|
249
|
+
///
|
|
250
|
+
/// - `$from` → `number`
|
|
251
|
+
/// - `$to` → `number`
|
|
252
|
+
/// - `$step` → `number`
|
|
250
253
|
@function number-range($from, $to, $step: 1) {
|
|
251
254
|
|
|
252
255
|
// Проверка типа первого параметра: ожидается числовое значение
|
|
@@ -128,9 +128,11 @@
|
|
|
128
128
|
/// @throws {Error} - Может выбросить ошибку если `$value` или
|
|
129
129
|
/// `$nearest` не являются числами, или если происходит
|
|
130
130
|
/// деление на ноль.
|
|
131
|
-
/// @throws {Error} - Выбрасывает ошибку, если в
|
|
132
|
-
/// значение, не соответствующее
|
|
133
|
-
///
|
|
131
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
132
|
+
/// значение, не соответствующее необходимому типу:
|
|
133
|
+
///
|
|
134
|
+
/// - `$value` → `number`
|
|
135
|
+
/// - `$nearest` → `number`
|
|
134
136
|
@function number-round-to-nearest($value, $nearest) {
|
|
135
137
|
|
|
136
138
|
// Проверка типа первого параметра: ожидается числовое значение.
|