@omnisass/library 0.4.0 → 0.5.0

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.
Files changed (52) hide show
  1. package/README.en.md +99 -0
  2. package/README.md +2 -0
  3. package/_configs.scss +1 -1
  4. package/index.scss +11 -5
  5. package/modules/utilities/getters/map/_get-map-item.scss +159 -0
  6. package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +4 -3
  7. package/modules/utilities/helpers/list/_list-sum-numbers.scss +4 -3
  8. package/modules/utilities/helpers/map/_map-remove-keys.scss +153 -0
  9. package/modules/utilities/helpers/misc/_url-encode.scss +5 -4
  10. package/modules/utilities/helpers/number/_number-ceil-to.scss +5 -3
  11. package/modules/utilities/helpers/number/_number-clamp-max.scss +5 -3
  12. package/modules/utilities/helpers/number/_number-clamp-min.scss +5 -3
  13. package/modules/utilities/helpers/number/_number-clamp.scss +6 -3
  14. package/modules/utilities/helpers/number/_number-denormalize.scss +6 -3
  15. package/modules/utilities/helpers/number/_number-fibonacci.scss +4 -3
  16. package/modules/utilities/helpers/number/_number-floor-to.scss +5 -3
  17. package/modules/utilities/helpers/number/_number-format-with-separator.scss +5 -4
  18. package/modules/utilities/helpers/number/_number-normalize.scss +6 -3
  19. package/modules/utilities/helpers/number/_number-random-between-int.scss +5 -3
  20. package/modules/utilities/helpers/number/_number-random-between.scss +5 -3
  21. package/modules/utilities/helpers/number/_number-range.scss +6 -3
  22. package/modules/utilities/helpers/number/_number-round-to-nearest.scss +5 -3
  23. package/modules/utilities/helpers/number/_number-round-to.scss +5 -3
  24. package/modules/utilities/helpers/number/_number-strip-unit.scss +4 -3
  25. package/modules/utilities/helpers/string/_string-capitalize.scss +4 -3
  26. package/modules/utilities/helpers/string/_string-lorips.config.scss +0 -2
  27. package/modules/utilities/helpers/string/_string-replace.scss +6 -3
  28. package/modules/utilities/helpers/string/_string-trim-end.scss +4 -3
  29. package/modules/utilities/helpers/string/_string-trim-start.scss +4 -3
  30. package/modules/utilities/helpers/string/_string-trim.scss +4 -3
  31. package/modules/utilities/loggers/_log.scss +219 -0
  32. package/modules/utilities/setters/map/_set-map-item.scss +243 -0
  33. package/modules/utilities/validators/color/_is-color-light.scss +5 -4
  34. package/modules/utilities/validators/color/_is-color-list.scss +4 -3
  35. package/modules/utilities/validators/list/_is-list-contained.scss +5 -4
  36. package/modules/utilities/validators/number/_is-int-even.scss +4 -3
  37. package/modules/utilities/validators/number/_is-int-odd.scss +4 -3
  38. package/modules/utilities/validators/number/_is-int.scss +5 -3
  39. package/modules/utilities/validators/number/_is-number-has-unit.scss +4 -3
  40. package/modules/utilities/validators/number/_is-number-negative.scss +4 -3
  41. package/modules/utilities/validators/number/_is-number-positive.scss +4 -3
  42. package/modules/utilities/validators/number/_is-number-unitless.scss +4 -3
  43. package/modules/utilities/validators/number/_is-number-zero.scss +4 -3
  44. package/modules/utilities/validators/string/_is-string-contained.scss +5 -3
  45. package/modules/utilities/validators/string/_is-string-empty.scss +4 -3
  46. package/modules/utilities/validators/string/_is-string-ending-with.scss +5 -3
  47. package/modules/utilities/validators/string/_is-string-starting-with.scss +5 -3
  48. package/modules/utilities/validators/type-of/_is-color.scss +0 -4
  49. package/package.json +25 -16
  50. package/package.scss +12 -2
  51. package/CHANGELOG.md +0 -122
  52. package/test2.sh +0 -158
@@ -218,9 +218,10 @@
218
218
  /// - Второй элемент: всегда 1 (если `$n > 1`)
219
219
  /// - Каждый последующий элемент: сумма двух предыдущих
220
220
  /// - Все элементы: целые положительные числа
221
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
222
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
- /// значение, не соответствующее типу `number (`$value`) или
101
- /// `string` (`$separator`). Компиляция Sass будет остановлена
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
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
- /// значение, не соответствующее типу `number`. Компиляция Sass
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
  // Проверка типа первого параметра: ожидается числовое значение.
@@ -111,9 +111,11 @@
111
111
  /// @throws {Error} - Может выбросить ошибку если `$precision`
112
112
  /// не является целым неотрицательным числом или если
113
113
  /// `$value` не является числом.
114
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
115
- /// значение, не соответствующее типу `number`. Компиляция Sass
116
- /// будет остановлена с ошибкой.
114
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
115
+ /// значение, не соответствующее необходимому типу:
116
+ ///
117
+ /// - `$value` → `number`
118
+ /// - `$precision` → `number`
117
119
  @function number-round-to($value, $precision: 2) {
118
120
 
119
121
  // Проверка типа первого параметра: ожидается числовое значение.
@@ -79,9 +79,10 @@
79
79
  /// @return {Number} - Безразмерное числовое значение, равное
80
80
  /// числовой части входного значения. Если входное значение
81
81
  /// уже было безразмерным, возвращается то же самое значение.
82
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
83
- /// значение, не соответствующее типу `number`. Компиляция Sass
84
- /// будет остановлена с ошибкой.
82
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
83
+ /// значение, не соответствующее необходимому типу:
84
+ ///
85
+ /// - `$value` → `number`
85
86
  @function number-strip-unit($value) {
86
87
 
87
88
  // Проверка типа входного параметра: ожидается числовое значение.
@@ -74,9 +74,10 @@
74
74
  /// первый символ преобразован в верхний регистр, а все
75
75
  /// остальные символы остаются без изменений. Для пустой
76
76
  /// строки возвращает пустую строку.
77
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
78
- /// значение, не соответствующее типу `string`. Компиляция Sass
79
- /// будет остановлена с ошибкой.
77
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
78
+ /// значение, не соответствующее необходимому типу:
79
+ ///
80
+ /// - `$string` → `string`
80
81
  @function string-capitalize($string) {
81
82
 
82
83
  // Проверка типа входного параметра: ожидается строковое значение.
@@ -39,8 +39,6 @@
39
39
  /// @link https://loremipsum.io/generator/ См. также: Lorem Ipsum - Генератор с настройками
40
40
  /// @link https://www.lipsum.com/feed/html См. также: Lipsum.com - Генератор HTML Lorem Ipsum
41
41
  /// @link https://github.com/sass/sass/issues/2871 См. также: GitHub - Обсуждение текстовых утилит в Sass
42
- /// @see string-lorips - Функция для генерации текста-
43
- /// заполнителя на основе этого набора слов.
44
42
  /// @type List
45
43
  $set-lorem-ipsum-words: "lorem"
46
44
  "ipsum"
@@ -58,9 +58,12 @@
58
58
  /// `$replaceable` не найдена, возвращается оригинальная строка.
59
59
  /// @throws {Error} - Может вызвать ошибку глубины рекурсии при очень
60
60
  /// длинных строках с множественными заменами.
61
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
62
- /// значение, не соответствующее типу `string`. Компиляция Sass
63
- /// будет остановлена с ошибкой.
61
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
62
+ /// значение, не соответствующее необходимому типу:
63
+ ///
64
+ /// - `$string` → `string`
65
+ /// - `$replaceable` → `string`
66
+ /// - `$replacement` → `string`
64
67
  @function string-replace($string, $replaceable, $replacement: '') {
65
68
 
66
69
  // Проверка типа первого параметра: ожидается исходная строка.
@@ -50,9 +50,10 @@
50
50
  /// @return {String} - Возвращает новую строку, в которой удалены
51
51
  /// все пробелы с конца оригинальной строки.
52
52
  /// Если строка состоит только из пробелов, возвращается пустая строка.
53
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
54
- /// значение, не соответствующее типу `string`. Компиляция Sass
55
- /// будет остановлена с ошибкой.
53
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
54
+ /// значение, не соответствующее необходимому типу:
55
+ ///
56
+ /// - `$string` → `string`
56
57
  @function string-trim-end($string) {
57
58
 
58
59
  // Проверка типа входного параметра: ожидается строковое значение.
@@ -50,9 +50,10 @@
50
50
  /// @return {String} - Возвращает новую строку, в которой удалены
51
51
  /// все пробелы с начала оригинальной строки.
52
52
  /// Если строка состоит только из пробелов, возвращается пустая строка.
53
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
54
- /// значение, не соответствующее типу `string`. Компиляция Sass
55
- /// будет остановлена с ошибкой.
53
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
54
+ /// значение, не соответствующее необходимому типу:
55
+ ///
56
+ /// - `$string` → `string`
56
57
  @function string-trim-start($string) {
57
58
 
58
59
  // Проверка типа входного параметра: ожидается строковое значение.
@@ -51,9 +51,10 @@
51
51
  /// @return {String} - Возвращает новую строку, в которой удалены
52
52
  /// все пробелы с начала и конца оригинальной строки.
53
53
  /// Если строка состоит только из пробелов, возвращается пустая строка.
54
- /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
55
- /// значение, не соответствующее типу `string`. Компиляция Sass
56
- /// будет остановлена с ошибкой.
54
+ /// @throws {Error} - Выбрасывает ошибку, если в параметр передано
55
+ /// значение, не соответствующее необходимому типу:
56
+ ///
57
+ /// - `$string` → `string`
57
58
  @function string-trim($string) {
58
59
 
59
60
  // Проверка типа входного параметра: ожидается строковое значение.
@@ -0,0 +1,219 @@
1
+ @use 'sass:map';
2
+ @use '../../../package' as package;
3
+ @use '../../../configs' as libconfigs;
4
+ @use './log-invalid-value' as *;
5
+
6
+ /// Универсальная функция логирования с поддержкой
7
+ /// локализации и трёх уровней важности.
8
+ ///
9
+ /// Функция предоставляет единый интерфейс для вывода
10
+ /// отладочной информации, предупреждений и ошибок в
11
+ /// процессе компиляции Sass-кода.
12
+ ///
13
+ /// Поддерживает два языка (русский и английский), что
14
+ /// делает её неплохим решением для многоязычных
15
+ /// проектов и библиотек, распространяемых среди
16
+ /// разработчиков из разных стран (если они у проекта
17
+ /// будут вообще).
18
+ ///
19
+ /// Сообщения для логирования передаются в виде карты
20
+ /// с ключами 'ru' и 'en', что позволяет гибко
21
+ /// управлять контентом без изменения кода функции.
22
+ ///
23
+ /// Функция автоматически определяет язык сообщения на 4
24
+ /// основе глобальной конфигурации проекта
25
+ /// (`$set-loglang`). Если язык установлен как
26
+ /// 'en' — используется англоязычное сообщение, во
27
+ /// всех остальных случаях — русскоязычное. Это
28
+ /// обеспечивает обратную совместимость и
29
+ /// предсказуемое поведение.
30
+ ///
31
+ /// В зависимости от переданного типа логирования (`$type`)
32
+ /// функция использует разные директивы Sass:
33
+ /// - `debug` — выводит сообщение синим цветом через `@debug`
34
+ /// - `warn` — выводит предупреждение жёлтым цветом через `@warn`
35
+ /// - `error` — выбрасывает критическую ошибку красным цветом
36
+ /// через `@error`, которая останавливает компиляцию
37
+ ///
38
+ /// Если передан неподдерживаемый тип логирования, функция
39
+ /// делегирует обработку ошибки вспомогательной функции
40
+ /// `log-invalid-value`, которая сгенерирует соответствующее
41
+ /// сообщение о недопустимом значении параметра.
42
+ ///
43
+ /// Функция всегда возвращает `null`, что позволяет использовать
44
+ /// её в выражениях, не влияя на возвращаемые значения других
45
+ /// функций, но при этом гарантируя выполнение побочного эффекта
46
+ /// (вывод сообщения в консоль).
47
+ /// ---
48
+ /// @name log
49
+ /// @group utilities-loggers
50
+ /// @since 2026.03.18
51
+ /// @access public
52
+ /// @author Murad Rustamov (therteenten)
53
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
54
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
55
+ /// @link https://sass-lang.com/documentation/at-rules/debug См. также: Официальная документация Sass - Директива @debug
56
+ /// @link https://sass-lang.com/documentation/at-rules/warn См. также: Официальная документация Sass - Директива @warn
57
+ /// @link https://sass-lang.com/documentation/at-rules/error См. также: Официальная документация Sass - Директива @error
58
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Официальная документация Sass - Тип данных "Карты" (`maps`)
59
+ /// @link https://sass-lang.com/documentation/modules/map#get См. также: Официальная документация Sass - Функция `map.get()`
60
+ /// @link https://developer.mozilla.org/en-US/docs/Web/API/console См. также: MDN Web Docs - Консоль браузера (console)
61
+ /// @link https://developer.mozilla.org/en-US/docs/Web/API/console/debug См. также: MDN Web Docs - console.debug()
62
+ /// @link https://developer.mozilla.org/en-US/docs/Web/API/console/warn См. также: MDN Web Docs - console.warn()
63
+ /// @link https://developer.mozilla.org/en-US/docs/Web/API/console/error См. также: MDN Web Docs - console.error()
64
+ /// @link https://sass-guidelin.es/ru/#debugging См. также: Sass Guidelines - Отладка и логирование
65
+ /// @link https://css-tricks.com/debugging-sass/ См. также: CSS-Tricks - Отладка Sass
66
+ /// @link https://www.sitepoint.com/sass-basics-debug-warn-error/ См. также: SitePoint - Основы Sass: @debug, @warn и @error
67
+ /// @link https://dev.to/kennethlum/using-sass-s-map-for-logging-2c1d См. также: Dev.to - Использование карт Sass для логирования
68
+ /// @link https://stackoverflow.com/questions/20333659/sass-debug-warnings-and-errors См. также: Stack Overflow - Отладка, предупреждения и ошибки в Sass
69
+ /// @link https://habr.com/ru/post/449342/ См. также: Habr - Sass: @debug, @warn, @error для отладки
70
+ /// @link https://www.youtube.com/watch?v=9G2TlF1j6sM См. также: YouTube - Отладка Sass с помощью @debug и @warn
71
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
72
+ /// @link https://github.com/sass/sass/tree/main/spec См. также: GitHub - Спецификация языка Sass
73
+ /// @link https://en.wikipedia.org/wiki/Log_level См. также: Wikipedia - Уровни логирования
74
+ /// @link https://www.atatus.com/blog/log-levels-explained/ См. также: Atatus Blog - Объяснение уровней логирования
75
+ /// @link https://www.marshall.edu/at/wp-content/uploads/AT-Logging-Levels-Explained.pdf См. также: Marshall University - Уровни логирования (PDF)
76
+ /// @link https://www.w3.org/TR/css3-color/ См. также: W3C - Спецификация CSS Color Module
77
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/color См. также: MDN Web Docs - CSS свойство color
78
+ /// @example scss - Базовая отладка на разных языках
79
+ /// // Конфигурация: libconfigs.$set-loglang: 'ru'
80
+ /// $message-ru: (
81
+ /// ru: 'Начало компиляции темы',
82
+ /// en: 'Theme compilation started'
83
+ /// );
84
+ /// @debug log($message-ru); // 🟦 Начало компиляции темы
85
+ ///
86
+ /// // Конфигурация: libconfigs.$set-loglang: 'en'
87
+ /// @debug log($message-ru); // 🟦 Theme compilation started
88
+ ///
89
+ /// @example scss - Использование в миксине с предупреждением
90
+ /// @mixin deprecated($old-name, $new-name) {
91
+ /// $warning: (
92
+ /// ru: 'Миксин #{$old-name} устарел. Используйте #{$new-name}',
93
+ /// en: 'Mixin #{$old-name} is deprecated. Use #{$new-name} instead'
94
+ /// );
95
+ /// @debug log($warning, 'warn');
96
+ /// @content;
97
+ /// }
98
+ ///
99
+ /// @include deprecated('border-radius-old', 'border-radius') {
100
+ /// border-radius: 4px;
101
+ /// }
102
+ ///
103
+ /// @example scss - Сложное сообщение с динамическими данными
104
+ /// @function validate-color($color, $context) {
105
+ /// @if type-of($color) != 'color' {
106
+ /// $message: (
107
+ /// ru: 'В контексте "#{$context}" передано невалидное значение цвета: #{$color}',
108
+ /// en: 'Invalid color value "#{$color}" passed in context: #{$context}'
109
+ /// );
110
+ /// @return log($message, 'error');
111
+ /// }
112
+ /// @return $color;
113
+ /// }
114
+ ///
115
+ /// $primary: validate-color(#ff0000, 'theme'); // нормально
116
+ /// $primary: validate-color('red', 'theme'); // 🟥 Invalid color value...
117
+ ///
118
+ /// @example scss - Неподдерживаемый тип логирования
119
+ /// $message: (
120
+ /// ru: 'Тестовое сообщение',
121
+ /// en: 'Test message'
122
+ /// );
123
+ /// @debug log($message, 'invalid-type'); // вызовет log-invalid-value
124
+ ///
125
+ /// @param {Map} $message-map - Карта с сообщениями для разных языков.
126
+ /// Должна содержать ключи 'ru' и 'en' со строковыми значениями.
127
+ /// Пример: `(ru: 'Привет', en: 'Hello')`.
128
+ /// @param {String} $type ['debug'] - Тип логирования.
129
+ /// Поддерживаемые значения: 'debug', 'warn', 'error'.
130
+ /// По умолчанию используется 'debug'.
131
+ /// @return {Null} - Всегда возвращает `null`. Это позволяет
132
+ /// использовать функцию в выражениях, где ожидается возврат
133
+ /// значения, но при этом необходим побочный эффект в виде
134
+ /// вывода сообщения в консоль.
135
+ /// @throws {Error} - Выбрасывает ошибку через директиву `@error`,
136
+ /// если передан тип `'error'`. Ошибка содержит локализованное
137
+ /// сообщение из карты с префиксом в виде красного квадрата.
138
+ /// @throws {Warning} - Выводит предупреждение через директиву
139
+ /// `@warn`, если передан тип `'warn'`. Предупреждение содержит
140
+ /// локализованное сообщение с префиксом в виде жёлтого квадрата.
141
+ /// @require {variable} $set-loglang - Глобальная переменная,
142
+ /// определяющая язык сообщений. Поддерживает значения `'ru'`
143
+ /// (русский) и другие (английский).
144
+ @function log(
145
+ $message-map,
146
+ $type: 'debug') {
147
+
148
+ // Получаем язык сообщений из глобальной конфигурации.
149
+ // Поддерживаются два режима: 'ru' (русский) и
150
+ // 'en' — английский.
151
+ $-loglang: libconfigs.$set-loglang;
152
+
153
+ // Переменная для хранения финального сообщения
154
+ // после выбора языка.
155
+ $-log-message: null;
156
+
157
+ // Выбираем сообщение в зависимости от языка.
158
+ // Если язык 'en' — используем английский текст из карты,
159
+ // для всех остальных случаев — русский.
160
+ @if $-loglang == 'en' {
161
+
162
+ // Извлекаем английскую версию сообщения из карты.
163
+ // Ключ 'en' должен присутствовать в карте обязательно.
164
+ $-log-message: map.get($message-map, en);
165
+
166
+ } @else {
167
+
168
+ // Извлекаем русскую версию сообщения из карты.
169
+ // Ключ 'ru' должен присутствовать в карте обязательно.
170
+ $-log-message: map.get($message-map, ru);
171
+
172
+ }
173
+
174
+ // Отображаем в консоли название и версию библиотеки.
175
+ @debug '⬛ #{package.$title} v#{package.$version} (#{package.$package})';
176
+
177
+ // Обрабатываем тип логирования и выводим сообщение
178
+ // соответствующим способом.
179
+ @if $type == 'debug' {
180
+
181
+ // Отладочное сообщение — не останавливает компиляцию,
182
+ // выводится только при включённом режиме отладки.
183
+ // Синий квадрат используется для визуального отличия.
184
+ @debug '🟦 #{$-log-message}';
185
+
186
+ } @else if $type == 'warn' {
187
+
188
+ // Предупреждение — не останавливает компиляцию,
189
+ // но выводится всегда, показывая потенциальные проблемы.
190
+ // Жёлтый квадрат привлекает внимание к предупреждению.
191
+ @warn '🟨 #{$-log-message}';
192
+
193
+ } @else if $type == 'error' {
194
+
195
+ // Критическая ошибка — ПОЛНОСТЬЮ ОСТАНАВЛИВАЕТ компиляцию.
196
+ // Красный квадрат сигнализирует о серьёзной проблеме.
197
+ @error '🟥 #{$-log-message}';
198
+
199
+ } @else {
200
+
201
+ // Если передан неподдерживаемый тип логирования,
202
+ // делегируем обработку ошибки вспомогательной функции.
203
+ // log-invalid-value сгенерирует сообщение о том,
204
+ // какие типы логирования допустимы.
205
+ @return log-invalid-value(
206
+ 'log',
207
+ $type,
208
+ '$type',
209
+ ('debug', 'warn', 'error')
210
+ );
211
+
212
+ }
213
+
214
+ // Функция всегда возвращает null, чтобы не влиять
215
+ // на возвращаемые значения вызывающих функций,
216
+ // но при этом гарантировать выполнение побочного эффекта.
217
+ @return null;
218
+
219
+ }