@omnisass/library 0.2.0 → 0.3.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 (81) hide show
  1. package/CHANGELOG.md +101 -3
  2. package/README.md +94 -0
  3. package/modules/utilities/converters/_convert-camel2kebab.scss +5 -4
  4. package/modules/utilities/converters/_convert-em2px.scss +5 -3
  5. package/modules/utilities/converters/_convert-hex2rgb.scss +4 -0
  6. package/modules/utilities/converters/_convert-hex2rgba.scss +5 -0
  7. package/modules/utilities/converters/_convert-kebab2camel.scss +5 -4
  8. package/modules/utilities/converters/_convert-kebab2snake.scss +4 -4
  9. package/modules/utilities/converters/_convert-px2em.scss +5 -4
  10. package/modules/utilities/converters/_convert-px2rem.scss +5 -4
  11. package/modules/utilities/converters/_convert-rem2px.scss +5 -3
  12. package/modules/utilities/converters/_convert-snake2kebab.scss +4 -4
  13. package/modules/utilities/getters/color/_get-color-brightness.scss +4 -0
  14. package/modules/utilities/getters/color/_get-color-darkest.scss +5 -1
  15. package/modules/utilities/getters/list/_get-list-item-end.scss +4 -2
  16. package/modules/utilities/getters/list/_get-list-item-start.scss +4 -2
  17. package/modules/utilities/getters/list/_get-list-item.scss +6 -4
  18. package/modules/utilities/getters/number/_get-number-from-percent.scss +6 -2
  19. package/modules/utilities/getters/number/_get-number-height-by-ratio.scss +5 -0
  20. package/modules/utilities/getters/number/_get-number-max.scss +4 -0
  21. package/modules/utilities/getters/number/_get-number-min.scss +4 -0
  22. package/modules/utilities/getters/number/_get-number-percentage-of.scss +6 -1
  23. package/modules/utilities/getters/number/_get-number-unit.scss +4 -2
  24. package/modules/utilities/getters/number/_get-number-width-by-ratio.scss +5 -0
  25. package/modules/utilities/helpers/color/_color-blend-steps.scss +6 -0
  26. package/modules/utilities/helpers/color/_color-blend.scss +6 -0
  27. package/modules/utilities/helpers/color/_color-hue-shift.scss +5 -0
  28. package/modules/utilities/helpers/color/_color-scale.scss +5 -0
  29. package/modules/utilities/helpers/color/_color-shade.scss +5 -0
  30. package/modules/utilities/helpers/color/_color-tint.scss +5 -0
  31. package/modules/utilities/helpers/color/_color-triad.scss +4 -1
  32. package/modules/utilities/helpers/list/_list-dedupe.scss +4 -0
  33. package/modules/utilities/helpers/list/_list-insert-at.scss +5 -0
  34. package/modules/utilities/helpers/list/_list-merge.scss +54 -8
  35. package/modules/utilities/helpers/list/_list-remove-at.scss +5 -0
  36. package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +3 -0
  37. package/modules/utilities/helpers/list/_list-sum-numbers.scss +3 -0
  38. package/modules/utilities/helpers/misc/_url-encode.scss +5 -6
  39. package/modules/utilities/helpers/number/_number-ceil-to.scss +56 -4
  40. package/modules/utilities/helpers/number/_number-clamp-max.scss +65 -10
  41. package/modules/utilities/helpers/number/_number-clamp-min.scss +65 -10
  42. package/modules/utilities/helpers/number/_number-clamp.scss +88 -12
  43. package/modules/utilities/helpers/number/_number-denormalize.scss +87 -9
  44. package/modules/utilities/helpers/number/_number-fibonacci.scss +62 -9
  45. package/modules/utilities/helpers/number/_number-floor-to.scss +57 -3
  46. package/modules/utilities/helpers/number/_number-format-with-separator.scss +99 -16
  47. package/modules/utilities/helpers/number/_number-normalize.scss +88 -10
  48. package/modules/utilities/helpers/number/_number-random-between-int.scss +74 -13
  49. package/modules/utilities/helpers/number/_number-random-between.scss +76 -15
  50. package/modules/utilities/helpers/number/_number-range.scss +105 -12
  51. package/modules/utilities/helpers/number/_number-round-to-nearest.scss +58 -1
  52. package/modules/utilities/helpers/number/_number-round-to.scss +65 -2
  53. package/modules/utilities/helpers/number/_number-strip-unit.scss +43 -9
  54. package/modules/utilities/helpers/string/_string-capitalize.scss +46 -5
  55. package/modules/utilities/helpers/string/_string-replace.scss +82 -4
  56. package/modules/utilities/helpers/string/_string-trim-end.scss +49 -6
  57. package/modules/utilities/helpers/string/_string-trim-start.scss +49 -6
  58. package/modules/utilities/helpers/string/_string-trim.scss +56 -11
  59. package/modules/utilities/loggers/_log-invalid-type.scss +1 -1
  60. package/modules/utilities/loggers/_log-invalid-value.scss +1 -1
  61. package/modules/utilities/validators/color/_is-color-light.scss +61 -4
  62. package/modules/utilities/validators/color/_is-color-list.scss +41 -9
  63. package/modules/utilities/validators/list/_is-list-contained.scss +42 -3
  64. package/modules/utilities/validators/misc/_is-time.scss +29 -0
  65. package/modules/utilities/validators/number/_is-int-even.scss +50 -8
  66. package/modules/utilities/validators/number/_is-int-odd.scss +51 -9
  67. package/modules/utilities/validators/number/_is-int.scss +71 -12
  68. package/modules/utilities/validators/number/_is-number-has-unit.scss +55 -13
  69. package/modules/utilities/validators/number/_is-number-negative.scss +53 -11
  70. package/modules/utilities/validators/number/_is-number-positive.scss +52 -10
  71. package/modules/utilities/validators/number/_is-number-unitless.scss +53 -12
  72. package/modules/utilities/validators/number/_is-number-zero.scss +54 -10
  73. package/modules/utilities/validators/string/_is-string-contained.scss +59 -4
  74. package/modules/utilities/validators/string/_is-string-empty.scss +48 -8
  75. package/modules/utilities/validators/string/_is-string-ending-with.scss +64 -5
  76. package/modules/utilities/validators/string/_is-string-starting-with.scss +60 -8
  77. package/package.json +1 -1
  78. package/package.scss +9 -8
  79. package/test.md +0 -168
  80. package/test.scss +0 -405
  81. package/test.sh +0 -149
@@ -1,5 +1,6 @@
1
1
  @use 'sass:math';
2
- @use '../type-of/is-number' as type-of;
2
+ @use '../type-of/is-number' as *;
3
+ @use '../../loggers/log-invalid-type' as *;
3
4
 
4
5
  /// Проверяет, является ли число безразмерным.
5
6
  ///
@@ -63,13 +64,13 @@
63
64
  /// @debug is-number-unitless(-0); // true (отрицательный ноль)
64
65
  /// @debug is-number-unitless(+0); // true (положительный ноль)
65
66
  /// @debug is-number-unitless(calc(10 + 5)); // true
66
- /// @example scss - Нечисловые значения (всегда false)
67
- /// @debug is-number-unitless("16"); // false
68
- /// @debug is-number-unitless(#ff0000); // false
69
- /// @debug is-number-unitless(true); // false
70
- /// @debug is-number-unitless(null); // false
71
- /// @debug is-number-unitless(auto); // false
72
- /// @debug is-number-unitless((16, "px")); // false
67
+ /// @example scss - Нечисловые значения (всегда Error)
68
+ /// @debug is-number-unitless("16"); // Error: "⛔ Параметр «$value» функции «is-number-unitless» получил неожиданный тип «string», хотя ожидается «number»"
69
+ /// @debug is-number-unitless(#ff0000); // Error: "⛔ Параметр «$value» функции «is-number-unitless» получил неожиданный тип «color», хотя ожидается «number»"
70
+ /// @debug is-number-unitless(true); // Error: "⛔ Параметр «$value» функции «is-number-unitless» получил неожиданный тип «bool», хотя ожидается «number»"
71
+ /// @debug is-number-unitless(null); // Error: "⛔ Параметр «$value» функции «is-number-unitless» получил неожиданный тип «null», хотя ожидается «number»"
72
+ /// @debug is-number-unitless(auto); // Error: "⛔ Параметр «$value» функции «is-number-unitless» получил неожиданный тип «string», хотя ожидается «number»"
73
+ /// @debug is-number-unitless((16, "px")); // Error: "⛔ Параметр «$value» функции «is-number-unitless» получил неожиданный тип «list», хотя ожидается «number»"
73
74
  /// @param {*} $value - Значение для проверки. Может быть
74
75
  /// любого типа, но функция вернет `true` только для
75
76
  /// чисел, которые не имеют единиц измерения. Любые
@@ -80,9 +81,49 @@
80
81
  /// `math.unit($value)` является пустой строкой).
81
82
  /// Возвращает `false` для чисел с единицами измерения и всех
82
83
  /// нечисловых значений.
83
- /// @throws {Error} - Не выбрасывает ошибков, безопасно
84
- /// обрабатывает значения любого типа. Функция `math.unit()`
85
- /// безопасно работает с любыми значениями.
84
+ /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
85
+ /// значение, не соответствующее типу `number`. Компиляция Sass
86
+ /// будет остановлена с ошибкой.
86
87
  @function is-number-unitless($value) {
87
- @return type-of.is-number($value) and math.unit($value) == '';
88
+
89
+ // Проверка типа входного параметра: ожидается числовое значение.
90
+ // Функция is-number() проверяет, является ли $value числом.
91
+ // Это может быть целое число, дробное число или число с единицами измерения.
92
+ @if not is-number($value) {
93
+
94
+ // Если $value не является числом, возвращаем ошибку через
95
+ // стандартную функцию логирования. Это предотвращает
96
+ // некорректные вычисления с нечисловыми данными.
97
+ @return log-invalid-type(
98
+ 'is-number-unitless',
99
+ $value,
100
+ '$value',
101
+ 'number'
102
+ );
103
+
104
+ }
105
+
106
+ // Основная логика выполняется только если $value является
107
+ // корректным числом.
108
+ @else {
109
+
110
+ // Логика проверки, является ли число безразмерным:
111
+ // Условие состоит из двух частей, соединенных оператором and:
112
+ // 1. ($value) - проверка на истинность значения
113
+ // В Sass любое не-null значение считается истинным,
114
+ // но это условие может быть избыточным после проверки is-number()
115
+ // 2. math.unit($value) == '' - проверяет, что строка единиц измерения
116
+ // пустая. Функция math.unit() возвращает единицу измерения
117
+ // числа как строку. Для безразмерных чисел возвращает пустую строку.
118
+ //
119
+ // Возвращаемое значение:
120
+ // - true: если значение является числом И имеет пустую единицу измерения
121
+ // - false: если значение не является числом ИЛИ имеет непустую единицу измерения
122
+ //
123
+ // Ключевая особенность: функция возвращает булево значение (true/false),
124
+ // которое можно использовать в условных конструкциях @if/@else.
125
+ @return ($value) and math.unit($value) == '';
126
+
127
+ }
128
+
88
129
  }
@@ -1,4 +1,5 @@
1
- @use '../type-of/is-number' as type-of;
1
+ @use '../type-of/is-number' as *;
2
+ @use '../../loggers/log-invalid-type' as *;
2
3
 
3
4
  /// Проверяет, является ли значение нулем (числовым нулем).
4
5
  ///
@@ -54,12 +55,12 @@
54
55
  /// @debug is-number-zero(0.0000001); // false (очень малое, но не ноль)
55
56
  /// @debug is-number-zero(1e-10); // false (научная нотация, не ноль)
56
57
  /// @example scss - Нечисловые значения
57
- /// @debug is-number-zero("0"); // false
58
- /// @debug is-number-zero("zero"); // false
59
- /// @debug is-number-zero(null); // false
60
- /// @debug is-number-zero(false); // false
61
- /// @debug is-number-zero((0, 0, 0)); // false (список нулей)
62
- /// @debug is-number-zero(none); // false
58
+ /// @debug is-number-zero("0"); // Error: "⛔ Параметр «$value» функции «is-number-zero» получил неожиданный тип «string», хотя ожидается «number»"
59
+ /// @debug is-number-zero("zero"); // Error: "⛔ Параметр «$value» функции «is-number-zero» получил неожиданный тип «string», хотя ожидается «number»"
60
+ /// @debug is-number-zero(null); // Error: "⛔ Параметр «$value» функции «is-number-zero» получил неожиданный тип «null», хотя ожидается «number»"
61
+ /// @debug is-number-zero(false); // Error: "⛔ Параметр «$value» функции «is-number-zero» получил неожиданный тип «bool», хотя ожидается «number»"
62
+ /// @debug is-number-zero((0, 0, 0)); // Error: "⛔ Параметр «$value» функции «is-number-zero» получил неожиданный тип «list», хотя ожидается «number»"
63
+ /// @debug is-number-zero(none); // Error: "⛔ Параметр «$value» функции «is-number-zero» получил неожиданный тип «string», хотя ожидается «number»"
63
64
  /// @param {*} $value - Значение для проверки. Может быть
64
65
  /// любого типа, но функция вернет `true` только для
65
66
  /// чисел равных нулю, включая ноль с единицами
@@ -68,8 +69,51 @@
68
69
  /// является числом и строго равно нулю. Во всех
69
70
  /// остальных случаях возвращает `false`, включая
70
71
  /// ненулевые числа и значения других типов.
71
- /// @throws {Error} - Не выбрасывает ошибков, безопасно
72
- /// обрабатывает значения любого типа.
72
+ /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
73
+ /// значение, не соответствующее типу `number`. Компиляция Sass
74
+ /// будет остановлена с ошибкой.
73
75
  @function is-number-zero($value) {
74
- @return type-of.is-number($value) and $value == 0;
76
+
77
+ // Проверка типа входного параметра: ожидается числовое значение.
78
+ // Функция is-number() проверяет, является ли $value числом.
79
+ // Это может быть целое число, дробное число или число с единицами измерения.
80
+ @if not is-number($value) {
81
+
82
+ // Если $value не является числом, возвращаем ошибку через
83
+ // стандартную функцию логирования. Это предотвращает
84
+ // некорректные вычисления с нечисловыми данными.
85
+ @return log-invalid-type(
86
+ 'is-number-zero',
87
+ $value,
88
+ '$value',
89
+ 'number'
90
+ );
91
+
92
+ }
93
+
94
+ // Основная логика выполняется только если $value является
95
+ // корректным числом.
96
+ @else {
97
+
98
+ // Логика проверки, является ли число нулем:
99
+ // Условие состоит из двух частей, соединенных оператором and:
100
+ // 1. is-number($value) - повторная проверка, что значение является числом
101
+ // (хотя эта проверка уже была выполнена выше, она добавляет
102
+ // дополнительную безопасность для внутренней логики)
103
+ // 2. $value == 0 - проверяет, равно ли значение нулю
104
+ // Оператор == сравнивает числовые значения, учитывая единицы измерения
105
+ // (например, 0px == 0 вернет true, 0rem == 0px вернет true)
106
+ //
107
+ // Возвращаемое значение:
108
+ // - true: если значение является числом И равно нулю
109
+ // - false: если значение не является числом ИЛИ не равно нулю
110
+ //
111
+ // Ключевая особенность: функция корректно работает с числами
112
+ // с разными единицами измерения (0px, 0rem, 0em и т.д.),
113
+ // так как Sass считает все нулевые значения равными,
114
+ // независимо от единиц измерения.
115
+ @return is-number($value) and $value == 0;
116
+
117
+ }
118
+
75
119
  }
@@ -1,4 +1,6 @@
1
1
  @use 'sass:string';
2
+ @use '../type-of/is-string' as *;
3
+ @use '../../loggers/log-invalid-type' as *;
2
4
 
3
5
  /// Проверяет, содержится ли подстрока в указанной строке.
4
6
  ///
@@ -100,9 +102,62 @@
100
102
  /// и `false` в противном случае. Возвращаемые значения:
101
103
  /// - `true`: подстрока существует в строке (хотя бы одно вхождение)
102
104
  /// - `false`: подстрока не найдена или является пустой строкой
103
- /// @throws Не выбрасывает ошибок, корректно обрабатывает все
104
- /// строковые значения. Невалидные аргументы приводятся к
105
- /// строковому типу.
105
+ /// @throws {Error} - Выбрасывает ошибку, если параметрам передано
106
+ /// значение, не соответствующее типу `string`. Компиляция Sass
107
+ /// будет остановлена с ошибкой.
106
108
  @function is-string-contained($string, $substring) {
107
- @return string.index($string, $substring) != null;
109
+
110
+ // Проверка типа первого параметра: ожидается строка для поиска.
111
+ // Функция is-string() проверяет, является ли $string строкой.
112
+ // В этой строке будет осуществляться поиск подстроки.
113
+ @if not is-string($string) {
114
+
115
+ // Если $string не является строкой, возвращаем ошибку через
116
+ // стандартную функцию логирования. Это предотвращает
117
+ // некорректные операции поиска с нестроковыми данными.
118
+ @return log-invalid-type(
119
+ 'is-string-contained',
120
+ $string,
121
+ '$string',
122
+ 'string'
123
+ );
124
+
125
+ }
126
+
127
+ // Проверка типа второго параметра: ожидается искомая подстрока.
128
+ // $substring определяет строку, которую нужно найти внутри $string.
129
+ @else if not is-string($substring) {
130
+
131
+ // Если $substring не является строкой, возвращаем ошибку.
132
+ // Проверка выполняется только если $string прошел валидацию.
133
+ @return log-invalid-type(
134
+ 'is-string-contained',
135
+ $substring,
136
+ '$substring',
137
+ 'string'
138
+ );
139
+
140
+ }
141
+
142
+ // Все параметры прошли валидацию - выполняем поиск подстроки.
143
+ @else {
144
+
145
+ // Логика проверки наличия подстроки в строке:
146
+ // 1. string.index($string, $substring) - ищет первое вхождение
147
+ // подстроки в строке и возвращает ее начальную позицию (индекс)
148
+ // Если подстрока не найдена, возвращает null
149
+ // 2. ... != null - сравнивает результат с null
150
+ // - Если результат не равен null → подстрока найдена → true
151
+ // - Если результат равен null → подстрока не найдена → false
152
+ //
153
+ // Возвращаемое значение:
154
+ // - true: если подстрока содержится в строке хотя бы один раз
155
+ // - false: если подстрока не содержится в строке
156
+ //
157
+ // Ключевая особенность: функция возвращает булево значение (true/false),
158
+ // которое можно использовать в условных конструкциях @if/@else.
159
+ @return string.index($string, $substring) != null;
160
+
161
+ }
162
+
108
163
  }
@@ -1,4 +1,6 @@
1
1
  @use 'sass:string';
2
+ @use '../type-of/is-string' as *;
3
+ @use '../../loggers/log-invalid-type' as *;
2
4
 
3
5
  /// Проверяет, является ли строка пустой.
4
6
  ///
@@ -39,18 +41,56 @@
39
41
  /// @debug is-string-empty('\n\t'); // false (строка с escape-символами)
40
42
  /// @debug is-string-empty(' '); // false (строка из нескольких пробелов)
41
43
  /// @example scss - Нестроковые значения
42
- /// @debug is-string-empty(null); // Error: $string: null is not a string.
43
- /// @debug is-string-empty(false); // Error: $string: false is not a string.
44
- /// @debug is-string-empty(0); // Error: $string: 0 is not a string.
45
- /// @debug is-string-empty(()); // Error: $string: () is not a string.
46
- /// @debug is-string-empty((0, 0, 0)); // Error: $string: (0, 0, 0) is not a string.
44
+ /// @debug is-string-empty(null); // Error: "⛔ Параметр «$string» функции «is-string-empty» получил неожиданный тип «null», хотя ожидается «string»"
45
+ /// @debug is-string-empty(false); // Error: "⛔ Параметр «$string» функции «is-string-empty» получил неожиданный тип «bool», хотя ожидается «string»"
46
+ /// @debug is-string-empty(0); // Error: "⛔ Параметр «$string» функции «is-string-empty» получил неожиданный тип «number», хотя ожидается «string»"
47
+ /// @debug is-string-empty((0, 0, 0)); // Error: "⛔ Параметр «$string» функции «is-string-empty» получил неожиданный тип «list», хотя ожидается «string»"
47
48
  /// @param {String} $string - Строка для проверки. Функция
48
49
  /// ожидает получить строковый тип данных.
49
50
  /// @return {Boolean} - Возвращает `true`, если длина строки
50
51
  /// равна нулю. Возвращает `false` для любой строки
51
52
  /// ненулевой длины, а также для значений других типов.
52
- /// @throws {Error} - Функция выдаёт ошибки, если в параметр
53
- /// `$string` передаётся значение, не являющееся строкой.
53
+ /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
54
+ /// значение, не соответствующее типу `string`. Компиляция Sass
55
+ /// будет остановлена с ошибкой.
54
56
  @function is-string-empty($string) {
55
- @return string.length($string) == 0;
57
+
58
+ // Проверка типа входного параметра: ожидается строковое значение.
59
+ // Функция is-string() проверяет, является ли $string строкой
60
+ // (тип данных string). Строка будет проверена на пустоту.
61
+ @if not is-string($string) {
62
+
63
+ // Если $string не является строкой, возвращаем ошибку через
64
+ // стандартную функцию логирования. Это предотвращает
65
+ // некорректные операции проверки с нестроковыми данными.
66
+ @return log-invalid-type(
67
+ 'is-string-empty',
68
+ $string,
69
+ '$string',
70
+ 'string'
71
+ );
72
+
73
+ }
74
+
75
+ // Основная логика выполняется только если $string является
76
+ // корректной строкой.
77
+ @else {
78
+
79
+ // Логика проверки, является ли строка пустой:
80
+ // 1. string.length($string) - возвращает количество символов в строке
81
+ // Для пустой строки возвращает 0
82
+ // 2. ... == 0 - сравнивает длину строки с нулем
83
+ //
84
+ // Возвращаемое значение:
85
+ // - true: если длина строки равна 0 (пустая строка)
86
+ // - false: если длина строки больше 0 (непустая строка)
87
+ //
88
+ // Ключевая особенность: функция корректно обрабатывает строки,
89
+ // содержащие только пробельные символы (они не считаются пустыми,
90
+ // так как имеют ненулевую длину). Для проверки строк, состоящих
91
+ // только из пробелов, может потребоваться дополнительная обработка.
92
+ @return string.length($string) == 0;
93
+
94
+ }
95
+
56
96
  }
@@ -1,4 +1,6 @@
1
1
  @use 'sass:string';
2
+ @use '../type-of/is-string' as *;
3
+ @use '../../loggers/log-invalid-type' as *;
2
4
 
3
5
  /// Проверяет, заканчивается ли строка указанной подстрокой.
4
6
  ///
@@ -54,13 +56,70 @@
54
56
  /// указанной подстрокой. Возвращает `false`, если строка не заканчивается
55
57
  /// подстрокой, если подстрока длиннее строки, или если регистр
56
58
  /// символов не совпадает.
57
- /// @throws {Error} - Не выбрасывает ошибок. Если переданы нестроковые
58
- /// значения, функция может вернуть неожиданный результат или вызвать
59
- /// ошибку выполнения.
59
+ /// @throws {Error} - Выбрасывает ошибку, если параметрам передано
60
+ /// значение, не соответствующее типу `string`. Компиляция Sass
61
+ /// будет остановлена с ошибкой.
60
62
  @function is-string-ending-with($string, $substring) {
61
63
 
62
- $-substring-length: string.length($substring);
64
+ // Проверка типа первого параметра: ожидается строка для проверки.
65
+ // Функция is-string() проверяет, является ли $string строкой.
66
+ // Будет проверено, заканчивается ли эта строка указанной подстрокой.
67
+ @if not is-string($string) {
63
68
 
64
- @return string.slice($string, -$-substring-length) == $substring;
69
+ // Если $string не является строкой, возвращаем ошибку через
70
+ // стандартную функцию логирования. Это предотвращает
71
+ // некорректные операции проверки с нестроковыми данными.
72
+ @return log-invalid-type(
73
+ 'is-string-ending-with',
74
+ $string,
75
+ '$string',
76
+ 'string'
77
+ );
78
+
79
+ }
80
+
81
+ // Проверка типа второго параметра: ожидается искомая подстрока.
82
+ // $substring определяет строку, которой должна заканчиваться $string.
83
+ @else if not is-string($substring) {
84
+
85
+ // Если $substring не является строкой, возвращаем ошибку.
86
+ // Проверка выполняется только если $string прошел валидацию.
87
+ @return log-invalid-type(
88
+ 'is-string-ending-with',
89
+ $substring,
90
+ '$substring',
91
+ 'string'
92
+ );
93
+
94
+ }
95
+
96
+ // Все параметры прошли валидацию - проверяем окончание строки.
97
+ @else {
98
+
99
+ // Определение длины искомой подстроки.
100
+ // string.length() возвращает количество символов в подстроке.
101
+ // Это значение используется для извлечения соответствующей
102
+ // части из конца основной строки.
103
+ $-substring-length: string.length($substring);
104
+
105
+ // Логика проверки окончания строки:
106
+ // 1. string.slice($string, -$-substring-length) - извлекает
107
+ // подстроку из конца основной строки, длина которой равна
108
+ // длине искомой подстроки.
109
+ // Отрицательный индекс -$-substring-length означает
110
+ // "начинать с конца строки, отступив $-substring-length символов".
111
+ // 2. ... == $substring - сравнивает извлеченную подстроку
112
+ // с искомой подстрокой.
113
+ //
114
+ // Возвращаемое значение:
115
+ // - true: если строка заканчивается указанной подстрокой
116
+ // - false: если строка не заканчивается указанной подстрокой
117
+ //
118
+ // Ключевая особенность: функция корректно работает даже если
119
+ // основная строка короче искомой подстроки (в этом случае
120
+ // string.slice() вернет меньше символов, и сравнение даст false).
121
+ @return string.slice($string, -$-substring-length) == $substring;
122
+
123
+ }
65
124
 
66
125
  }
@@ -1,4 +1,6 @@
1
1
  @use 'sass:string';
2
+ @use '../type-of/is-string' as *;
3
+ @use '../../loggers/log-invalid-type' as *;
2
4
 
3
5
  /// Проверяет, начинается ли строка с указанной подстроки.
4
6
  ///
@@ -54,13 +56,63 @@
54
56
  /// с указанной подстроки. Возвращает `false`, если строка не
55
57
  /// начинается с подстроки, если подстрока длиннее строки, или
56
58
  /// если регистр символов не совпадает.
57
- /// @throws {Error} - Не выбрасывает ошибок. Если переданы
58
- /// нестроковые значения, функция может вернуть неожиданный
59
- /// результат или вызвать ошибку выполнения.
59
+ /// @throws {Error} - Выбрасывает ошибку, если параметрам передано
60
+ /// значение, не соответствующее типу `string`. Компиляция Sass
61
+ /// будет остановлена с ошибкой.
60
62
  @function is-string-starting-with($string, $substring) {
61
- @return string.slice(
62
- $string,
63
- 1,
64
- string.length($substring)
65
- ) == $substring;
63
+
64
+ // Проверка типа первого параметра: ожидается строка для проверки.
65
+ // Функция is-string() проверяет, является ли $string строкой.
66
+ // Будет проверено, начинается ли эта строка указанной подстрокой.
67
+ @if not is-string($string) {
68
+
69
+ // Если $string не является строкой, возвращаем ошибку через
70
+ // стандартную функцию логирования. Это предотвращает
71
+ // некорректные операции проверки с нестроковыми данными.
72
+ @return log-invalid-type(
73
+ 'is-string-starting-with',
74
+ $string,
75
+ '$string',
76
+ 'string'
77
+ );
78
+
79
+ }
80
+
81
+ // Проверка типа второго параметра: ожидается искомая подстрока.
82
+ // $substring определяет строку, которой должна начинаться $string.
83
+ @else if not is-string($substring) {
84
+
85
+ // Если $substring не является строкой, возвращаем ошибку.
86
+ // Проверка выполняется только если $string прошел валидацию.
87
+ @return log-invalid-type(
88
+ 'is-string-starting-with',
89
+ $substring,
90
+ '$substring',
91
+ 'string'
92
+ );
93
+
94
+ }
95
+
96
+ // Все параметры прошли валидацию - проверяем начало строки.
97
+ @else {
98
+
99
+ // Логика проверки начала строки:
100
+ // 1. string.length($substring) - вычисляет длину искомой подстроки
101
+ // 2. string.slice($string, 1, ...) - извлекает подстроку из
102
+ // начала основной строки, начиная с первого символа (позиция 1)
103
+ // и заканчивая символом с индексом, равным длине подстроки
104
+ // 3. ... == $substring - сравнивает извлеченную подстроку
105
+ // с искомой подстрокой
106
+ //
107
+ // Возвращаемое значение:
108
+ // - true: если строка начинается с указанной подстроки
109
+ // - false: если строка не начинается с указанной подстроки
110
+ //
111
+ // Ключевая особенность: функция корректно работает даже если
112
+ // основная строка короче искомой подстроки (в этом случае
113
+ // string.slice() вернет меньше символов, и сравнение даст false).
114
+ @return string.slice($string, 1, string.length($substring)) == $substring;
115
+
116
+ }
117
+
66
118
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnisass/library",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Библиотека функций и миксинов, написанная на языке CSS-препроцессора Sass. Она предназначена для того, чтобы упростить, ускорить и улучшить процесс создания стилей для веб-сайтов.",
5
5
  "main": "index.scss",
6
6
  "scripts": {
package/package.scss CHANGED
@@ -42,7 +42,7 @@ $title: "OmniSass";
42
42
  /// @name description
43
43
  /// @access private
44
44
  /// @type String
45
- $description: "Набор утилит, миксинов, расширений на языке препроцессора @sass для помощи в ускорении, упрощении и улучщения процесса написания CSS-стилей.";
45
+ $description: "Набор утилит, миксинов, расширений на языке препроцессора Sass для помощи в ускорении, упрощении и улучщения процесса написания CSS-стилей.";
46
46
 
47
47
  /// Текущая версия библиотеки - используется для контроля
48
48
  /// версий и отслеживания изменений.
@@ -53,7 +53,7 @@ $description: "Набор утилит, миксинов, расширений
53
53
  /// @name version
54
54
  /// @access private
55
55
  /// @type String | Number
56
- $version: "0.2.0";
56
+ $version: "0.3.0";
57
57
 
58
58
  /// Тип лицензии библиотеки - используется для указания
59
59
  /// условий использования и распространения.
@@ -79,7 +79,7 @@ $sources: "https://sourcecraft.dev/omnisass/library";
79
79
  /// @name author
80
80
  /// @access private
81
81
  /// @link https://t.me/therteenten Telegram
82
- /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft
82
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
83
83
  /// @prop {String} author.name [Murad Rustamov (therteenten)] - Автор проекта
84
84
  /// @prop {String} author.email [therteenten@ya.ru] - Адрес электронной почты автора проекта
85
85
  /// @type Map
@@ -91,12 +91,12 @@ $author: (
91
91
  /// Миксин создающий комментарий с основной информацией о
92
92
  /// библиотеке в итоговом CSS-файле.
93
93
  /// ---
94
- /// @name genOmniSassFingerprint
94
+ /// @name gen-omnisass-fingerprint
95
95
  /// @access public
96
96
  /// @example scss - Базовое использование
97
- /// @include genOmniSassFingerprint();
97
+ /// @include gen-omnisass-fingerprint();
98
98
  /// @example scss - Использование без лога в консоль
99
- /// @include genOmniSassFingerprint(false);
99
+ /// @include gen-omnisass-fingerprint(false);
100
100
  /// @example css - Примерный итоговый результат
101
101
  /// /*
102
102
  /// * @package:
@@ -125,7 +125,7 @@ $author: (
125
125
  /// @require {Variable} $title
126
126
  /// @require {Variable} $author
127
127
  /// @require {Variable} $license
128
- @mixin genOmniSassFingerprint($show-console-log: true) {
128
+ @mixin gen-omnisass-fingerprint($show-console-log: true) {
129
129
 
130
130
  $-author-name: map.get($author, name);
131
131
  $-author-email: map.get($author, email);
@@ -148,7 +148,8 @@ $author: (
148
148
  */
149
149
 
150
150
  @if ($show-console-log) == true {
151
- @debug "#{$title} #{$version} using!";
151
+ @debug "🎉 Используется #{$title} #{$version}. Спасибо за доверие)";
152
+ @debug " #{$title} #{$version} is used. Thank you for your trust)";
152
153
  }
153
154
 
154
155
  }