@omnisass/library 0.2.1 → 0.4.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.
- package/CHANGELOG.md +120 -3
- package/README.md +94 -0
- package/index.scss +6 -0
- package/modules/utilities/converters/_convert-camel2kebab.scss +5 -4
- package/modules/utilities/converters/_convert-em2px.scss +5 -3
- package/modules/utilities/converters/_convert-hex2rgb.scss +4 -0
- package/modules/utilities/converters/_convert-hex2rgba.scss +5 -0
- package/modules/utilities/converters/_convert-kebab2camel.scss +5 -4
- package/modules/utilities/converters/_convert-kebab2snake.scss +4 -4
- package/modules/utilities/converters/_convert-px2em.scss +5 -4
- package/modules/utilities/converters/_convert-px2rem.scss +5 -4
- package/modules/utilities/converters/_convert-rem2px.scss +5 -3
- package/modules/utilities/converters/_convert-snake2kebab.scss +4 -4
- package/modules/utilities/getters/color/_get-color-brightness.scss +4 -0
- package/modules/utilities/getters/color/_get-color-darkest.scss +5 -1
- package/modules/utilities/getters/list/_get-list-item-end.scss +4 -2
- package/modules/utilities/getters/list/_get-list-item-start.scss +4 -2
- package/modules/utilities/getters/list/_get-list-item.scss +6 -4
- package/modules/utilities/getters/misc/_get-uid.scss +135 -0
- package/modules/utilities/getters/number/_get-number-from-percent.scss +6 -2
- package/modules/utilities/getters/number/_get-number-height-by-ratio.scss +5 -0
- package/modules/utilities/getters/number/_get-number-max.scss +4 -0
- package/modules/utilities/getters/number/_get-number-min.scss +4 -0
- package/modules/utilities/getters/number/_get-number-percentage-of.scss +6 -1
- package/modules/utilities/getters/number/_get-number-unit.scss +4 -2
- package/modules/utilities/getters/number/_get-number-width-by-ratio.scss +5 -0
- package/modules/utilities/getters/string/_get-string-hash.scss +143 -0
- package/modules/utilities/helpers/color/_color-blend-steps.scss +6 -0
- package/modules/utilities/helpers/color/_color-blend.scss +6 -0
- package/modules/utilities/helpers/color/_color-hue-shift.scss +5 -0
- package/modules/utilities/helpers/color/_color-scale.scss +5 -0
- package/modules/utilities/helpers/color/_color-shade.scss +5 -0
- package/modules/utilities/helpers/color/_color-tint.scss +5 -0
- package/modules/utilities/helpers/color/_color-triad.scss +4 -1
- package/modules/utilities/helpers/list/_list-dedupe.scss +4 -0
- package/modules/utilities/helpers/list/_list-insert-at.scss +5 -0
- package/modules/utilities/helpers/list/_list-merge.scss +54 -8
- package/modules/utilities/helpers/list/_list-remove-at.scss +5 -0
- package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +3 -0
- package/modules/utilities/helpers/list/_list-sum-numbers.scss +3 -0
- package/modules/utilities/helpers/misc/_url-encode.scss +7 -8
- package/modules/utilities/helpers/number/_number-ceil-to.scss +56 -4
- package/modules/utilities/helpers/number/_number-clamp-max.scss +65 -10
- package/modules/utilities/helpers/number/_number-clamp-min.scss +65 -10
- package/modules/utilities/helpers/number/_number-clamp.scss +88 -12
- package/modules/utilities/helpers/number/_number-denormalize.scss +87 -9
- package/modules/utilities/helpers/number/_number-fibonacci.scss +62 -9
- package/modules/utilities/helpers/number/_number-floor-to.scss +57 -3
- package/modules/utilities/helpers/number/_number-format-with-separator.scss +99 -16
- package/modules/utilities/helpers/number/_number-normalize.scss +88 -10
- package/modules/utilities/helpers/number/_number-random-between-int.scss +74 -13
- package/modules/utilities/helpers/number/_number-random-between.scss +76 -15
- package/modules/utilities/helpers/number/_number-range.scss +105 -12
- package/modules/utilities/helpers/number/_number-round-to-nearest.scss +58 -1
- package/modules/utilities/helpers/number/_number-round-to.scss +65 -2
- package/modules/utilities/helpers/number/_number-strip-unit.scss +43 -9
- package/modules/utilities/helpers/string/_string-capitalize.scss +46 -5
- 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 +82 -4
- package/modules/utilities/helpers/string/_string-reverse.scss +139 -0
- package/modules/utilities/helpers/string/_string-trim-end.scss +49 -6
- package/modules/utilities/helpers/string/_string-trim-start.scss +49 -6
- package/modules/utilities/helpers/string/_string-trim.scss +56 -11
- package/modules/utilities/loggers/_log-invalid-type.scss +1 -1
- package/modules/utilities/loggers/_log-invalid-value.scss +1 -1
- package/modules/utilities/validators/color/_is-color-light.scss +61 -4
- package/modules/utilities/validators/color/_is-color-list.scss +41 -9
- package/modules/utilities/validators/list/_is-list-contained.scss +42 -3
- package/modules/utilities/validators/misc/_is-time.scss +29 -0
- package/modules/utilities/validators/number/_is-int-even.scss +50 -8
- package/modules/utilities/validators/number/_is-int-odd.scss +51 -9
- package/modules/utilities/validators/number/_is-int.scss +71 -12
- package/modules/utilities/validators/number/_is-number-has-unit.scss +55 -13
- package/modules/utilities/validators/number/_is-number-negative.scss +53 -11
- package/modules/utilities/validators/number/_is-number-positive.scss +52 -10
- package/modules/utilities/validators/number/_is-number-unitless.scss +53 -12
- package/modules/utilities/validators/number/_is-number-zero.scss +54 -10
- package/modules/utilities/validators/string/_is-string-contained.scss +59 -4
- package/modules/utilities/validators/string/_is-string-empty.scss +48 -8
- package/modules/utilities/validators/string/_is-string-ending-with.scss +64 -5
- package/modules/utilities/validators/string/_is-string-starting-with.scss +60 -8
- package/package.json +1 -1
- package/package.scss +9 -8
- package/test2.sh +158 -0
- package/modules/utilities/setters/_index.scss +0 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
@use '../type-of/is-number' as
|
|
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"); //
|
|
58
|
-
/// @debug is-number-zero("zero"); //
|
|
59
|
-
/// @debug is-number-zero(null); //
|
|
60
|
-
/// @debug is-number-zero(false); //
|
|
61
|
-
/// @debug is-number-zero((0, 0, 0)); //
|
|
62
|
-
/// @debug is-number-zero(none); //
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
43
|
-
/// @debug is-string-empty(false); // Error:
|
|
44
|
-
/// @debug is-string-empty(0); // Error:
|
|
45
|
-
/// @debug is-string-empty(());
|
|
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
|
-
///
|
|
53
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
54
|
+
/// значение, не соответствующее типу `string`. Компиляция Sass
|
|
55
|
+
/// будет остановлена с ошибкой.
|
|
54
56
|
@function is-string-empty($string) {
|
|
55
|
-
|
|
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
|
-
|
|
64
|
+
// Проверка типа первого параметра: ожидается строка для проверки.
|
|
65
|
+
// Функция is-string() проверяет, является ли $string строкой.
|
|
66
|
+
// Будет проверено, заканчивается ли эта строка указанной подстрокой.
|
|
67
|
+
@if not is-string($string) {
|
|
63
68
|
|
|
64
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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.
|
|
3
|
+
"version": "0.4.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:
|
|
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.
|
|
56
|
+
$version: "0.4.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
|
|
94
|
+
/// @name gen-omnisass-fingerprint
|
|
95
95
|
/// @access public
|
|
96
96
|
/// @example scss - Базовое использование
|
|
97
|
-
/// @include
|
|
97
|
+
/// @include gen-omnisass-fingerprint();
|
|
98
98
|
/// @example scss - Использование без лога в консоль
|
|
99
|
-
/// @include
|
|
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
|
|
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}
|
|
151
|
+
@debug "🎉 Используется #{$title} #{$version}. Спасибо за доверие)";
|
|
152
|
+
@debug " #{$title} #{$version} is used. Thank you for your trust)";
|
|
152
153
|
}
|
|
153
154
|
|
|
154
155
|
}
|
package/test2.sh
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Скрипт для генерации changes.md с изменениями с последнего тега
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
OUTPUT_FILE="changes.md"
|
|
8
|
+
TEMP_FILE=".git_changes.tmp"
|
|
9
|
+
|
|
10
|
+
# Функция для очистки временных файлов
|
|
11
|
+
cleanup() {
|
|
12
|
+
if [ -f "$TEMP_FILE" ]; then
|
|
13
|
+
rm -f "$TEMP_FILE"
|
|
14
|
+
fi
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
trap cleanup EXIT
|
|
18
|
+
|
|
19
|
+
# Получаем последний тег
|
|
20
|
+
echo "🔍 Поиск последнего тега..."
|
|
21
|
+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
22
|
+
|
|
23
|
+
if [ -z "$LAST_TAG" ]; then
|
|
24
|
+
echo "⚠️ Теги не найдены. Используется первый коммит."
|
|
25
|
+
TAG_HASH=$(git rev-list --max-parents=0 HEAD)
|
|
26
|
+
LAST_TAG="начала репозитория"
|
|
27
|
+
else
|
|
28
|
+
TAG_HASH=$(git rev-list -n 1 "$LAST_TAG")
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Получаем текущую ветку и хэш HEAD
|
|
32
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
33
|
+
CURRENT_HASH=$(git rev-parse --short HEAD)
|
|
34
|
+
CURRENT_DATE=$(date '+%Y-%m-%d %H:%M:%S')
|
|
35
|
+
|
|
36
|
+
# Получаем количество коммитов
|
|
37
|
+
COMMIT_COUNT=$(git rev-list --count "$TAG_HASH"..HEAD)
|
|
38
|
+
|
|
39
|
+
echo "📊 Найдено $COMMIT_COUNT коммитов с тега $LAST_TAG"
|
|
40
|
+
|
|
41
|
+
# Генерируем файл changes.md
|
|
42
|
+
echo "# Список изменений" > "$OUTPUT_FILE"
|
|
43
|
+
echo "" >> "$OUTPUT_FILE"
|
|
44
|
+
|
|
45
|
+
echo "## 📋 Информация" >> "$OUTPUT_FILE"
|
|
46
|
+
echo "" >> "$OUTPUT_FILE"
|
|
47
|
+
echo "- **Последний тег:** \`$LAST_TAG\`" >> "$OUTPUT_FILE"
|
|
48
|
+
echo "- **Текущая ветка:** \`$CURRENT_BRANCH\`" >> "$OUTPUT_FILE"
|
|
49
|
+
echo "- **Хэш HEAD:** \`$CURRENT_HASH\`" >> "$OUTPUT_FILE"
|
|
50
|
+
echo "- **Дата генерации:** $CURRENT_DATE" >> "$OUTPUT_FILE"
|
|
51
|
+
echo "- **Количество коммитов:** $COMMIT_COUNT" >> "$OUTPUT_FILE"
|
|
52
|
+
echo "" >> "$OUTPUT_FILE"
|
|
53
|
+
|
|
54
|
+
if [ $COMMIT_COUNT -eq 0 ]; then
|
|
55
|
+
echo "## 📭 Изменения отсутствуют" >> "$OUTPUT_FILE"
|
|
56
|
+
echo "" >> "$OUTPUT_FILE"
|
|
57
|
+
echo "Нет новых коммитов с тега \`$LAST_TAG\`" >> "$OUTPUT_FILE"
|
|
58
|
+
|
|
59
|
+
echo "✅ Файл $OUTPUT_FILE создан (без изменений)"
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
echo "## 📈 Сводка изменений" >> "$OUTPUT_FILE"
|
|
64
|
+
echo "" >> "$OUTPUT_FILE"
|
|
65
|
+
|
|
66
|
+
# Статистика по авторам
|
|
67
|
+
echo "### 👥 Авторы изменений" >> "$OUTPUT_FILE"
|
|
68
|
+
echo "" >> "$OUTPUT_FILE"
|
|
69
|
+
git shortlog -s -n --no-merges "$TAG_HASH"..HEAD | while read line; do
|
|
70
|
+
count=$(echo "$line" | awk '{print $1}')
|
|
71
|
+
author=$(echo "$line" | awk '{$1=""; print substr($0,2)}')
|
|
72
|
+
echo "- **$author:** $count коммит(ов)" >> "$OUTPUT_FILE"
|
|
73
|
+
done
|
|
74
|
+
echo "" >> "$OUTPUT_FILE"
|
|
75
|
+
|
|
76
|
+
# Статистика изменений файлов
|
|
77
|
+
echo "### 📊 Изменения файлов" >> "$OUTPUT_FILE"
|
|
78
|
+
echo "" >> "$OUTPUT_FILE"
|
|
79
|
+
echo '```diff' >> "$OUTPUT_FILE"
|
|
80
|
+
git diff --stat "$TAG_HASH" HEAD >> "$TEMP_FILE" 2>/dev/null || echo "Статистика изменений недоступна" > "$TEMP_FILE"
|
|
81
|
+
cat "$TEMP_FILE" >> "$OUTPUT_FILE"
|
|
82
|
+
echo '```' >> "$OUTPUT_FILE"
|
|
83
|
+
echo "" >> "$OUTPUT_FILE"
|
|
84
|
+
|
|
85
|
+
# Группировка по типу коммитов (Conventional Commits)
|
|
86
|
+
echo "## 🗂️ Изменения по категориям" >> "$OUTPUT_FILE"
|
|
87
|
+
echo "" >> "$OUTPUT_FILE"
|
|
88
|
+
|
|
89
|
+
# Новые возможности
|
|
90
|
+
feat_count=$(git log --oneline --grep="^feat" "$TAG_HASH"..HEAD | wc -l)
|
|
91
|
+
if [ $feat_count -gt 0 ]; then
|
|
92
|
+
echo "### 🚀 Новые возможности ($feat_count)" >> "$OUTPUT_FILE"
|
|
93
|
+
echo "" >> "$OUTPUT_FILE"
|
|
94
|
+
git log --pretty=format:"- **%s** (\`%h\`)" --grep="^feat" "$TAG_HASH"..HEAD | sed 's/^feat:*//i' >> "$OUTPUT_FILE"
|
|
95
|
+
echo "" >> "$OUTPUT_FILE"
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
# Исправления ошибок
|
|
99
|
+
fix_count=$(git log --oneline --grep="^fix" "$TAG_HASH"..HEAD | wc -l)
|
|
100
|
+
if [ $fix_count -gt 0 ]; then
|
|
101
|
+
echo "### 🐛 Исправления ошибок ($fix_count)" >> "$OUTPUT_FILE"
|
|
102
|
+
echo "" >> "$OUTPUT_FILE"
|
|
103
|
+
git log --pretty=format:"- **%s** (\`%h\`)" --grep="^fix" "$TAG_HASH"..HEAD | sed 's/^fix:*//i' >> "$OUTPUT_FILE"
|
|
104
|
+
echo "" >> "$OUTPUT_FILE"
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
# Документация
|
|
108
|
+
docs_count=$(git log --oneline --grep="^docs" "$TAG_HASH"..HEAD | wc -l)
|
|
109
|
+
if [ $docs_count -gt 0 ]; then
|
|
110
|
+
echo "### 📚 Документация ($docs_count)" >> "$OUTPUT_FILE"
|
|
111
|
+
echo "" >> "$OUTPUT_FILE"
|
|
112
|
+
git log --pretty=format:"- **%s** (\`%h\`)" --grep="^docs" "$TAG_HASH"..HEAD | sed 's/^docs:*//i' >> "$OUTPUT_FILE"
|
|
113
|
+
echo "" >> "$OUTPUT_FILE"
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# Рефакторинг
|
|
117
|
+
refactor_count=$(git log --oneline --grep="^refactor" "$TAG_HASH"..HEAD | wc -l)
|
|
118
|
+
if [ $refactor_count -gt 0 ]; then
|
|
119
|
+
echo "### ♻️ Рефакторинг ($refactor_count)" >> "$OUTPUT_FILE"
|
|
120
|
+
echo "" >> "$OUTPUT_FILE"
|
|
121
|
+
git log --pretty=format:"- **%s** (\`%h\`)" --grep="^refactor" "$TAG_HASH"..HEAD | sed 's/^refactor:*//i' >> "$OUTPUT_FILE"
|
|
122
|
+
echo "" >> "$OUTPUT_FILE"
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Тесты
|
|
126
|
+
test_count=$(git log --oneline --grep="^test" "$TAG_HASH"..HEAD | wc -l)
|
|
127
|
+
if [ $test_count -gt 0 ]; then
|
|
128
|
+
echo "### ✅ Тесты ($test_count)" >> "$OUTPUT_FILE"
|
|
129
|
+
echo "" >> "$OUTPUT_FILE"
|
|
130
|
+
git log --pretty=format:"- **%s** (\`%h\`)" --grep="^test" "$TAG_HASH"..HEAD | sed 's/^test:*//i' >> "$OUTPUT_FILE"
|
|
131
|
+
echo "" >> "$OUTPUT_FILE"
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# Остальные коммиты
|
|
135
|
+
other_count=$(git log --oneline --invert-grep --grep="^feat\|^fix\|^docs\|^refactor\|^test" "$TAG_HASH"..HEAD | wc -l)
|
|
136
|
+
if [ $other_count -gt 0 ]; then
|
|
137
|
+
echo "### 🔧 Прочие изменения ($other_count)" >> "$OUTPUT_FILE"
|
|
138
|
+
echo "" >> "$OUTPUT_FILE"
|
|
139
|
+
git log --pretty=format:"- %s (\`%h\`)" --invert-grep --grep="^feat\|^fix\|^docs\|^refactor\|^test" "$TAG_HASH"..HEAD >> "$OUTPUT_FILE"
|
|
140
|
+
echo "" >> "$OUTPUT_FILE"
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
# Полный список коммитов
|
|
144
|
+
echo "## 📝 Полный список коммитов" >> "$OUTPUT_FILE"
|
|
145
|
+
echo "" >> "$OUTPUT_FILE"
|
|
146
|
+
git log --pretty=format:"- **%s**%n - Хэш: \`%h\`%n - Автор: %an%n - Дата: %ad" --date=short "$TAG_HASH"..HEAD >> "$OUTPUT_FILE"
|
|
147
|
+
echo "" >> "$OUTPUT_FILE"
|
|
148
|
+
|
|
149
|
+
# Команда для сравнения
|
|
150
|
+
echo "## 🔗 Ссылки" >> "$OUTPUT_FILE"
|
|
151
|
+
echo "" >> "$OUTPUT_FILE"
|
|
152
|
+
echo "Для просмотра всех изменений выполните:" >> "$OUTPUT_FILE"
|
|
153
|
+
echo '```bash' >> "$OUTPUT_FILE"
|
|
154
|
+
echo "git log --oneline $LAST_TAG..HEAD" >> "$OUTPUT_FILE"
|
|
155
|
+
echo '```' >> "$OUTPUT_FILE"
|
|
156
|
+
|
|
157
|
+
echo "✅ Файл $OUTPUT_FILE успешно создан!"
|
|
158
|
+
echo "📄 Просмотр: cat $OUTPUT_FILE | head -30"
|