@astral/validations 4.9.1 → 4.10.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 +25 -0
- package/core/guard/createGuard/createGuard.js +2 -4
- package/minYearsOld/constants.d.ts +4 -0
- package/minYearsOld/constants.js +4 -0
- package/minYearsOld/index.d.ts +2 -0
- package/minYearsOld/index.js +2 -0
- package/minYearsOld/minYearsOld.d.ts +24 -0
- package/minYearsOld/minYearsOld.js +44 -0
- package/package.json +1 -1
package/README.md
CHANGED
@@ -47,6 +47,7 @@
|
|
47
47
|
- [date](#date)
|
48
48
|
- [min](#min-date)
|
49
49
|
- [max](#max-date)
|
50
|
+
- [minYearsOld](#min-years-old-date)
|
50
51
|
- [boolean](#boolean)
|
51
52
|
- [object](#object)
|
52
53
|
- [partial](#partial)
|
@@ -874,6 +875,30 @@ validate(new Date('02-01-2021'));
|
|
874
875
|
|
875
876
|
---
|
876
877
|
|
878
|
+
### #min years old date
|
879
|
+
|
880
|
+
Принимает возраст и вычитает переданное количество лет из текущей даты. Позволяет кастомизировать текст ошибки.
|
881
|
+
|
882
|
+
```ts
|
883
|
+
import { date, minYearsOld } from '@astral/validations';
|
884
|
+
|
885
|
+
const validate = date(
|
886
|
+
minYearsOld(18, {
|
887
|
+
customErrorMessage:
|
888
|
+
'Только совершеннолетние могут воспользоваться данной услугой',
|
889
|
+
}),
|
890
|
+
);
|
891
|
+
|
892
|
+
// { message: 'Только совершеннолетние могут воспользоваться данной услугой' }
|
893
|
+
validate(new Date('15.11.2022'));
|
894
|
+
|
895
|
+
// undefined
|
896
|
+
validate(new Date('10.10.2005'));
|
897
|
+
|
898
|
+
```
|
899
|
+
|
900
|
+
---
|
901
|
+
|
877
902
|
## boolean
|
878
903
|
|
879
904
|
- Возвращает ошибку если:
|
@@ -5,10 +5,8 @@ export function createGuard(executor) {
|
|
5
5
|
const createInnerGuard = (defOptions = {}) => {
|
6
6
|
const guard = (value, prevCtx) => {
|
7
7
|
const actualDefOptions = Object.assign(Object.assign({}, defOptions), { isOptional: (prevCtx === null || prevCtx === void 0 ? void 0 : prevCtx.isOptional) || defOptions.isOptional });
|
8
|
-
const ctx = createContext(prevCtx,
|
9
|
-
|
10
|
-
value, {
|
11
|
-
lastSchemaValue: value,
|
8
|
+
const ctx = createContext(prevCtx, value, {
|
9
|
+
// данная конструкция останавливает погружение isOptional в последующие guard
|
12
10
|
isOptional: false,
|
13
11
|
});
|
14
12
|
const requiredResult = required({
|
@@ -0,0 +1,24 @@
|
|
1
|
+
type MinYearsOldParams = {
|
2
|
+
/**
|
3
|
+
* @description Кастомное сообщение ошибки
|
4
|
+
*/
|
5
|
+
customErrorMessage: string;
|
6
|
+
};
|
7
|
+
/**
|
8
|
+
* @description Проверяет дату рождения на соответствие условию. Работает с date.
|
9
|
+
* @param age - ограничение по возрасту (коло-во лет, вычитаемое из текущей даты для валидации)
|
10
|
+
* @param params - объект параметров
|
11
|
+
* @example
|
12
|
+
* ```ts
|
13
|
+
|
14
|
+
*
|
15
|
+
* const validate = date(
|
16
|
+
* minYearsOld(18, {
|
17
|
+
* customMessage:
|
18
|
+
* 'Только совершеннолетние могут воспользоваться данной услугой',
|
19
|
+
* }),
|
20
|
+
* );
|
21
|
+
* ```
|
22
|
+
*/
|
23
|
+
export declare function minYearsOld<ValidationType, TLastSchemaValues extends Record<string, unknown> = {}>(age: number, params?: MinYearsOldParams): (value: ValidationType, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
24
|
+
export {};
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { createRule } from '../core';
|
2
|
+
import { BIRTH_DATE_MAX_ERROR_CODE, BIRTH_DATE_MIN, BIRTH_DATE_MIN_ERROR_CODE, } from './constants';
|
3
|
+
/**
|
4
|
+
* @description Проверяет дату рождения на соответствие условию. Работает с date.
|
5
|
+
* @param age - ограничение по возрасту (коло-во лет, вычитаемое из текущей даты для валидации)
|
6
|
+
* @param params - объект параметров
|
7
|
+
* @example
|
8
|
+
* ```ts
|
9
|
+
|
10
|
+
*
|
11
|
+
* const validate = date(
|
12
|
+
* minYearsOld(18, {
|
13
|
+
* customMessage:
|
14
|
+
* 'Только совершеннолетние могут воспользоваться данной услугой',
|
15
|
+
* }),
|
16
|
+
* );
|
17
|
+
* ```
|
18
|
+
*/
|
19
|
+
export function minYearsOld(age, params) {
|
20
|
+
return createRule((value, ctx) => {
|
21
|
+
const getMessage = (typeMessage) => {
|
22
|
+
const message = params === null || params === void 0 ? void 0 : params.customErrorMessage;
|
23
|
+
return message ? message : typeMessage;
|
24
|
+
};
|
25
|
+
const threshold = new Date();
|
26
|
+
threshold.setFullYear(threshold.getFullYear() - age);
|
27
|
+
if (value instanceof Date && value > BIRTH_DATE_MIN) {
|
28
|
+
if (value > threshold) {
|
29
|
+
return ctx.createError({
|
30
|
+
code: BIRTH_DATE_MAX_ERROR_CODE,
|
31
|
+
message: getMessage(`Вам должно быть больше ${age} лет`),
|
32
|
+
});
|
33
|
+
}
|
34
|
+
return undefined;
|
35
|
+
}
|
36
|
+
if (value < BIRTH_DATE_MIN) {
|
37
|
+
return ctx.createError({
|
38
|
+
code: BIRTH_DATE_MIN_ERROR_CODE,
|
39
|
+
message: getMessage(`Не ранее ${BIRTH_DATE_MIN}`),
|
40
|
+
});
|
41
|
+
}
|
42
|
+
return undefined;
|
43
|
+
});
|
44
|
+
}
|