@astral/validations 4.15.0 → 4.16.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/README.md +29 -10
- package/package.json +1 -1
- package/rangeDate/rangeDate.d.ts +5 -3
- package/rangeDate/rangeDate.js +10 -5
- package/rangeDateInterval/rangeDateInterval.d.ts +1 -1
- package/rangeDateInterval/rangeDateInterval.js +1 -1
- package/rangeDateMinMax/rangeDateMinMax.d.ts +1 -1
- package/rangeDateMinMax/rangeDateMinMax.js +1 -1
- package/rangeDateNotEqual/rangeDateNotEqual.d.ts +1 -1
- package/rangeDateNotEqual/rangeDateNotEqual.js +1 -1
package/README.md
CHANGED
@@ -52,10 +52,10 @@
|
|
52
52
|
- [min](#min-date)
|
53
53
|
- [max](#max-date)
|
54
54
|
- [minYearsOld](#min-years-old-date)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
- [rangeDate](#rangeDate)
|
56
|
+
- [rangeDateInterval](#rangeDateInterval)
|
57
|
+
- [rangeDateMinMax](#rangeDateMinMax)
|
58
|
+
- [rangeDateNotEqual](#rangeDateNotEqual)
|
59
59
|
- [boolean](#boolean)
|
60
60
|
- [object](#object)
|
61
61
|
- [partial](#partial)
|
@@ -995,7 +995,8 @@ validate(new Date('10.10.2005'));
|
|
995
995
|
|
996
996
|
### rangeDate
|
997
997
|
|
998
|
-
Проверяет даты интервала на обязательность заполнения, валидность значений и хронологический порядок
|
998
|
+
- Проверяет даты интервала на обязательность заполнения, валидность значений и хронологический порядок
|
999
|
+
- Выполняет композицию правил, переданных в параметры
|
999
1000
|
|
1000
1001
|
```ts
|
1001
1002
|
import { rangeDate } from '@astral/validations';
|
@@ -1039,6 +1040,24 @@ validate({
|
|
1039
1040
|
end: new Date('2024.09.24'),
|
1040
1041
|
});
|
1041
1042
|
|
1043
|
+
|
1044
|
+
const customValidate = (...rules: DateRangeRule[]) => dateRange(...rules).define({
|
1045
|
+
required: { start: false, end: false },
|
1046
|
+
message: {
|
1047
|
+
startRequired: 'Укажите начало периода'
|
1048
|
+
}
|
1049
|
+
})
|
1050
|
+
|
1051
|
+
// undefined
|
1052
|
+
customValidate({
|
1053
|
+
start: new Date('2024.09.05'),
|
1054
|
+
});
|
1055
|
+
|
1056
|
+
// { message: 'Укажите начало периода' }
|
1057
|
+
validate({
|
1058
|
+
end: new Date('2024.09.05'),
|
1059
|
+
})
|
1060
|
+
|
1042
1061
|
```
|
1043
1062
|
|
1044
1063
|
---
|
@@ -1051,7 +1070,7 @@ validate({
|
|
1051
1070
|
```ts
|
1052
1071
|
import { rangeDateInterval } from '@astral/validations';
|
1053
1072
|
|
1054
|
-
const validate =
|
1073
|
+
const validate = rangeDate(rangeDateInterval({ limit: 14 }));
|
1055
1074
|
|
1056
1075
|
// { message: 'Период не может превышать 14 дней' }
|
1057
1076
|
validate({
|
@@ -1065,7 +1084,7 @@ validate({
|
|
1065
1084
|
end: new Date('2024.09.12'),
|
1066
1085
|
});
|
1067
1086
|
|
1068
|
-
const validateMonthInterval =
|
1087
|
+
const validateMonthInterval = rangeDate(rangeDateInterval({ limit: 2, unit: 'month' }));
|
1069
1088
|
|
1070
1089
|
// { message: 'Период не может превышать 2 месяца' }
|
1071
1090
|
validateMonthInterval({
|
@@ -1091,7 +1110,7 @@ validateMonthInterval({
|
|
1091
1110
|
```ts
|
1092
1111
|
import { rangeDateMinMax } from '@astral/validations';
|
1093
1112
|
|
1094
|
-
const validate =
|
1113
|
+
const validate = rangeDate(rangeDateMinMax({ start: { min: { limit: new Date('2024.09.05') }}, end: { max: { limit: new Date('2024.09.15') } } }))
|
1095
1114
|
|
1096
1115
|
// { message: 'Дата начала должна быть позже 05.09.2024' }
|
1097
1116
|
validate({
|
@@ -1122,7 +1141,7 @@ validate({
|
|
1122
1141
|
```ts
|
1123
1142
|
import { rangeDateNotEqual } from '@astral/validations';
|
1124
1143
|
|
1125
|
-
const validate =
|
1144
|
+
const validate = rangeDate(
|
1126
1145
|
rangeDateNotEqual(),
|
1127
1146
|
);
|
1128
1147
|
|
@@ -1179,7 +1198,7 @@ validate(null)
|
|
1179
1198
|
- Value не является простым объектом
|
1180
1199
|
- Свойства не соответсвуют переданной схеме валидации
|
1181
1200
|
- Возвращаем объект ошибок, соответсвующих ошибкам для свойств объекта
|
1182
|
-
- Требует схему для валидации, свойства которой должны
|
1201
|
+
- Требует схему для валидации, свойства которой должны соответствовать валидируемому values
|
1183
1202
|
|
1184
1203
|
```ts
|
1185
1204
|
import {
|
package/package.json
CHANGED
package/rangeDate/rangeDate.d.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { type ValidationRule } from '../core';
|
1
2
|
type RangeDateValue = {
|
2
3
|
start?: Date;
|
3
4
|
end?: Date;
|
@@ -37,12 +38,13 @@ type RangeDateParams = {
|
|
37
38
|
};
|
38
39
|
};
|
39
40
|
/**
|
40
|
-
* Проверяет даты интервала на обязательность заполнения, валидность значений и хронологический порядок
|
41
|
+
* Guard для интервала дат. Проверяет даты интервала на обязательность заполнения, валидность значений и хронологический порядок
|
42
|
+
* @param rules - правила валидаций, применяющиеся к интервалу дат
|
41
43
|
* @example
|
42
44
|
* ```ts
|
43
|
-
* const validate =
|
45
|
+
* const validate = rangeDate();
|
44
46
|
* validate({ start: new Date(), end: new Date() });
|
45
47
|
* ```
|
46
48
|
*/
|
47
|
-
export declare const rangeDate: <TLastSchemaValues extends Record<string, unknown>>(
|
49
|
+
export declare const rangeDate: <TLastSchemaValues extends Record<string, unknown>>(...rules: ValidationRule<RangeDateValue, TLastSchemaValues>[]) => import("../core").Guard<TLastSchemaValues, RangeDateParams>;
|
48
50
|
export {};
|
package/rangeDate/rangeDate.js
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
import { isDate } from '@astral/utils';
|
2
|
-
import {
|
2
|
+
import { compose, createGuard, isDateEarlier, } from '../core';
|
3
3
|
import { RANGE_DATE_END_EARLIER_START_ERROR_INFO, RANGE_DATE_END_INVALID_ERROR_INFO, RANGE_DATE_END_REQUIRED_ERROR_INFO, RANGE_DATE_REQUIRED_ERROR_INFO, RANGE_DATE_START_INVALID_ERROR_INFO, RANGE_DATE_START_REQUIRED_ERROR_INFO, } from './constants';
|
4
4
|
/**
|
5
|
-
* Проверяет даты интервала на обязательность заполнения, валидность значений и хронологический порядок
|
5
|
+
* Guard для интервала дат. Проверяет даты интервала на обязательность заполнения, валидность значений и хронологический порядок
|
6
|
+
* @param rules - правила валидаций, применяющиеся к интервалу дат
|
6
7
|
* @example
|
7
8
|
* ```ts
|
8
|
-
* const validate =
|
9
|
+
* const validate = rangeDate();
|
9
10
|
* validate({ start: new Date(), end: new Date() });
|
10
11
|
* ```
|
11
12
|
*/
|
12
|
-
export const rangeDate = (
|
13
|
+
export const rangeDate = (...rules) => createGuard((externalValue, ctx, params) => {
|
13
14
|
const { required, messages } = Object.assign(Object.assign({}, (params || {})), { required: {
|
14
15
|
start: (params === null || params === void 0 ? void 0 : params.required) && 'start' in (params === null || params === void 0 ? void 0 : params.required)
|
15
16
|
? params === null || params === void 0 ? void 0 : params.required.start
|
@@ -18,6 +19,10 @@ export const rangeDate = (params) => createRule((value, ctx) => {
|
|
18
19
|
? params === null || params === void 0 ? void 0 : params.required.end
|
19
20
|
: true,
|
20
21
|
} });
|
22
|
+
// Приводим тип, чтобы не усложнять код и не дублировать часть проверок
|
23
|
+
// Существующие проверки покрывают все кейсы
|
24
|
+
// Иначе необходимо делать проверку на объект и наличие полей start и end с учетом вариативности
|
25
|
+
const value = externalValue;
|
21
26
|
if ((required === null || required === void 0 ? void 0 : required.start) && (required === null || required === void 0 ? void 0 : required.end) && !value.start && !value.end) {
|
22
27
|
return ctx.createError({
|
23
28
|
message: RANGE_DATE_REQUIRED_ERROR_INFO.message,
|
@@ -56,5 +61,5 @@ export const rangeDate = (params) => createRule((value, ctx) => {
|
|
56
61
|
code: RANGE_DATE_END_EARLIER_START_ERROR_INFO.code,
|
57
62
|
});
|
58
63
|
}
|
59
|
-
return
|
64
|
+
return compose(...rules)(value, ctx);
|
60
65
|
});
|
@@ -15,7 +15,7 @@ type RangeDateIntervalParams = {
|
|
15
15
|
* Позволяет ограничить интервал на конкретное значение. Установка интревала возможна в следующих единицах: день, месяц и год.
|
16
16
|
* @example
|
17
17
|
* ```ts
|
18
|
-
* const validate =
|
18
|
+
* const validate = rangeDate(rangeDateInterval({ limit: 14 }));
|
19
19
|
* validate({ start: new Date('2024.08.15'), end: new Date('2024.09.05') });
|
20
20
|
* ```
|
21
21
|
*/
|
@@ -13,7 +13,7 @@ const selectAddingStrategy = (unit) => {
|
|
13
13
|
* Позволяет ограничить интервал на конкретное значение. Установка интревала возможна в следующих единицах: день, месяц и год.
|
14
14
|
* @example
|
15
15
|
* ```ts
|
16
|
-
* const validate =
|
16
|
+
* const validate = rangeDate(rangeDateInterval({ limit: 14 }));
|
17
17
|
* validate({ start: new Date('2024.08.15'), end: new Date('2024.09.05') });
|
18
18
|
* ```
|
19
19
|
*/
|
@@ -26,7 +26,7 @@ type RangeDateMinMaxParams = {
|
|
26
26
|
* Проверяет даты на минимальное и максимальное допустимое значение
|
27
27
|
* @example
|
28
28
|
* ```ts
|
29
|
-
* const validate =
|
29
|
+
* const validate = rangeDate(rangeDateMinMax({ start: { min: { limit: new Date(2023, 0, 1) }}, end: { max: { limit: new Date() } } }));
|
30
30
|
* validate({ start: new Date(), end: new Date() });
|
31
31
|
* ```
|
32
32
|
*/
|
@@ -9,7 +9,7 @@ const formatDateToView = (date) => {
|
|
9
9
|
* Проверяет даты на минимальное и максимальное допустимое значение
|
10
10
|
* @example
|
11
11
|
* ```ts
|
12
|
-
* const validate =
|
12
|
+
* const validate = rangeDate(rangeDateMinMax({ start: { min: { limit: new Date(2023, 0, 1) }}, end: { max: { limit: new Date() } } }));
|
13
13
|
* validate({ start: new Date(), end: new Date() });
|
14
14
|
* ```
|
15
15
|
*/
|
@@ -12,7 +12,7 @@ type RangeDateNotEqualParams = {
|
|
12
12
|
* Проверяет даты интервала на совпадение даты начала и окончания
|
13
13
|
* @example
|
14
14
|
* ```ts
|
15
|
-
* const validate =
|
15
|
+
* const validate = rangeDate(rangeDateNotEqual());
|
16
16
|
* validate({ start: new Date(), end: new Date() });
|
17
17
|
* ```
|
18
18
|
*/
|
@@ -8,7 +8,7 @@ const isDateEqual = (dateA, dateB) => {
|
|
8
8
|
* Проверяет даты интервала на совпадение даты начала и окончания
|
9
9
|
* @example
|
10
10
|
* ```ts
|
11
|
-
* const validate =
|
11
|
+
* const validate = rangeDate(rangeDateNotEqual());
|
12
12
|
* validate({ start: new Date(), end: new Date() });
|
13
13
|
* ```
|
14
14
|
*/
|