@astral/validations 3.3.0 → 4.1.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 +129 -18
- package/any/any.d.ts +1 -1
- package/array/array.d.ts +2 -2
- package/arrayItem/arrayItem.d.ts +1 -1
- package/boolean/boolean.d.ts +2 -2
- package/core/compose/compose.d.ts +1 -1
- package/core/context/createContext/createContext.d.ts +2 -2
- package/core/context/createContext/createContext.js +7 -2
- package/core/context/types.d.ts +6 -2
- package/core/guard/createGuard/createGuard.d.ts +7 -7
- package/core/guard/createGuard/createGuard.js +1 -1
- package/core/rule/createRule/createRule.d.ts +3 -3
- package/core/rule/required/required.d.ts +1 -1
- package/core/rule/types.d.ts +3 -3
- package/core/utils/index.d.ts +4 -0
- package/core/utils/index.js +4 -0
- package/core/utils/isFullNameValidCharacters/index.d.ts +1 -0
- package/core/utils/isFullNameValidCharacters/index.js +1 -0
- package/core/utils/isFullNameValidCharacters/isFullNameValidCharacters.d.ts +5 -0
- package/core/utils/isFullNameValidCharacters/isFullNameValidCharacters.js +5 -0
- package/core/utils/isHasConsecutiveChars/index.d.ts +1 -0
- package/core/utils/isHasConsecutiveChars/index.js +1 -0
- package/core/utils/isHasConsecutiveChars/isHasConsecutiveChars.d.ts +4 -0
- package/core/utils/isHasConsecutiveChars/isHasConsecutiveChars.js +4 -0
- package/core/utils/isStartsWithAndEndsWithLetter/index.d.ts +1 -0
- package/core/utils/isStartsWithAndEndsWithLetter/index.js +1 -0
- package/core/utils/isStartsWithAndEndsWithLetter/isStartsWithAndEndsWithLetter.d.ts +4 -0
- package/core/utils/isStartsWithAndEndsWithLetter/isStartsWithAndEndsWithLetter.js +4 -0
- package/core/utils/isValidFullNameLength/index.d.ts +1 -0
- package/core/utils/isValidFullNameLength/index.js +1 -0
- package/core/utils/isValidFullNameLength/isValidFullNameLength.d.ts +4 -0
- package/core/utils/isValidFullNameLength/isValidFullNameLength.js +4 -0
- package/date/date.d.ts +2 -2
- package/deepPartial/deepPartial.d.ts +1 -1
- package/email/email.d.ts +1 -1
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/innIP/innIP.d.ts +1 -1
- package/innUL/innUL.d.ts +1 -1
- package/integer/integer.d.ts +1 -1
- package/kpp/kpp.d.ts +1 -1
- package/max/max.d.ts +3 -3
- package/min/min.d.ts +3 -3
- package/mobilePhone/mobilePhone.d.ts +1 -1
- package/number/number.d.ts +2 -2
- package/object/object.d.ts +8 -8
- package/object/object.js +5 -4
- package/ogrnIP/ogrnIP.d.ts +1 -1
- package/ogrnUL/ogrnUL.d.ts +1 -1
- package/onlyNumber/onlyNumber.d.ts +1 -1
- package/optional/optional.d.ts +1 -1
- package/or/or.d.ts +1 -1
- package/package.json +1 -1
- package/partial/partial.d.ts +1 -1
- package/pattern/pattern.d.ts +1 -1
- package/personName/constants.d.ts +2 -0
- package/personName/constants.js +5 -0
- package/personName/index.d.ts +2 -0
- package/personName/index.js +2 -0
- package/personName/personName.d.ts +17 -0
- package/personName/personName.js +29 -0
- package/personPatronymic/constants.d.ts +2 -0
- package/personPatronymic/constants.js +5 -0
- package/personPatronymic/index.d.ts +2 -0
- package/personPatronymic/index.js +2 -0
- package/personPatronymic/personPatronymic.d.ts +17 -0
- package/personPatronymic/personPatronymic.js +29 -0
- package/personSurname/constants.d.ts +2 -0
- package/personSurname/constants.js +5 -0
- package/personSurname/index.d.ts +2 -0
- package/personSurname/index.js +2 -0
- package/personSurname/personSurname.d.ts +17 -0
- package/personSurname/personSurname.js +29 -0
- package/positiveNumber/positiveNumber.d.ts +1 -1
- package/snils/snils.d.ts +1 -1
- package/string/string.d.ts +2 -2
- package/transform/transform.d.ts +1 -1
- package/when/when.d.ts +6 -6
- package/when/when.js +2 -2
package/README.md
CHANGED
@@ -34,6 +34,9 @@
|
|
34
34
|
- [kpp](#kpp)
|
35
35
|
- [ogrnIP](#ogrnIP)
|
36
36
|
- [ogrnUL](#ogrnUL)
|
37
|
+
- [personName](#personName)
|
38
|
+
- [personSurname](#personSurname)
|
39
|
+
- [personPatronymic](#personPatronymic)
|
37
40
|
- [date](#date)
|
38
41
|
- [min](#min-date)
|
39
42
|
- [max](#max-date)
|
@@ -50,6 +53,7 @@
|
|
50
53
|
- [Custom rules](#custom-rules)
|
51
54
|
- [Базовый пример](#базовый-пример)
|
52
55
|
- [Связанные поля](#связанные-поля)
|
56
|
+
- [Доступ к ctx.global.values](#доступ-к-высокоуровневым-values-ctxglobalvalues)
|
53
57
|
- [Переиспользуемое правило](#переиспользуемое-правило)
|
54
58
|
- [Common](#common)
|
55
59
|
- [optional](#optional)
|
@@ -63,6 +67,7 @@
|
|
63
67
|
- [Переиспользование объектов схемы, с условной валидацией и зависимыми полями](#переиспользование-объектов-схемы-с-условной-валидацией-и-зависимыми-полями)
|
64
68
|
- [Error message customization](#error-message-customization)
|
65
69
|
- [Exclusion managing](#exclusion-managing)
|
70
|
+
- [Migration Guide](#migration-guide)
|
66
71
|
|
67
72
|
---
|
68
73
|
|
@@ -571,6 +576,72 @@ validate('1-22-33-5555555-6')
|
|
571
576
|
|
572
577
|
---
|
573
578
|
|
579
|
+
### personName
|
580
|
+
|
581
|
+
Проверяет валидно ли имя
|
582
|
+
|
583
|
+
#### [Требования на реализацию](https://track.astral.ru/soft/wiki/pages/viewpage.action?pageId=3813152849#id-Требованиянареализацию-Требование5.Поле"Имя")
|
584
|
+
|
585
|
+
```ts
|
586
|
+
import { string, personName } from '@astral/validations';
|
587
|
+
|
588
|
+
const validate = string(personName());
|
589
|
+
|
590
|
+
// undefined
|
591
|
+
validate('Иван');
|
592
|
+
validate('иван');
|
593
|
+
|
594
|
+
// { message: 'Проверьте имя' }
|
595
|
+
validate('');
|
596
|
+
validate('Иван--Иван');
|
597
|
+
```
|
598
|
+
|
599
|
+
---
|
600
|
+
|
601
|
+
### personSurname
|
602
|
+
|
603
|
+
Проверяет валидно ли фамилия
|
604
|
+
|
605
|
+
#### [Требования на реализацию](https://track.astral.ru/soft/wiki/pages/viewpage.action?pageId=3813152849#id-Требованиянареализацию-Требование4.Поле"Фамилия")
|
606
|
+
|
607
|
+
```ts
|
608
|
+
import { string, personSurname } from '@astral/validations';
|
609
|
+
|
610
|
+
const validate = string(personSurname());
|
611
|
+
|
612
|
+
// undefined
|
613
|
+
validate('Иванов');
|
614
|
+
validate('иванов');
|
615
|
+
|
616
|
+
// { message: 'Проверьте фамилию' }
|
617
|
+
validate('');
|
618
|
+
validate('Иванов--иванов');
|
619
|
+
```
|
620
|
+
|
621
|
+
---
|
622
|
+
|
623
|
+
### personPatronymic
|
624
|
+
|
625
|
+
Проверяет валидно ли отчество
|
626
|
+
|
627
|
+
#### [Требования на реализацию](https://track.astral.ru/soft/wiki/pages/viewpage.action?pageId=3813152849#id-Требованиянареализацию-Требование6.Поле"Отчество")
|
628
|
+
|
629
|
+
```ts
|
630
|
+
import { string, personPatronymic } from '@astral/validations';
|
631
|
+
|
632
|
+
const validate = string(personPatronymic());
|
633
|
+
|
634
|
+
// undefined
|
635
|
+
validate('Иванович');
|
636
|
+
validate('иванович');
|
637
|
+
|
638
|
+
|
639
|
+
// { message: 'Проверьте отчество' }
|
640
|
+
validate('');
|
641
|
+
validate('Иванович--Иванович');
|
642
|
+
```
|
643
|
+
|
644
|
+
|
574
645
|
## date
|
575
646
|
|
576
647
|
- Возвращает ошибку если:
|
@@ -952,9 +1023,9 @@ validate([1, 2]);
|
|
952
1023
|
```ts
|
953
1024
|
type Values = { name: string; isAgree: boolean };
|
954
1025
|
|
955
|
-
const validate = object<Values
|
1026
|
+
const validate = object<Values>({
|
956
1027
|
name: when({
|
957
|
-
is: (_, ctx) => Boolean(ctx.
|
1028
|
+
is: (_, ctx) => Boolean(ctx.values?.isAgree),
|
958
1029
|
then: string(),
|
959
1030
|
otherwise: any(),
|
960
1031
|
}),
|
@@ -976,7 +1047,7 @@ toPrettyError(
|
|
976
1047
|
|
977
1048
|
Каждый guard позволяет переопределить дефолтные параметры:
|
978
1049
|
- Сообщение об ошибке типа
|
979
|
-
- Сообщение
|
1050
|
+
- Сообщение об ошибке required
|
980
1051
|
- Уникальные для каждого guard параметры
|
981
1052
|
|
982
1053
|
```ts
|
@@ -1010,7 +1081,7 @@ type Values = {
|
|
1010
1081
|
nickname: string;
|
1011
1082
|
};
|
1012
1083
|
|
1013
|
-
const validate = object<Values
|
1084
|
+
const validate = object<Values>({
|
1014
1085
|
name: string(),
|
1015
1086
|
nickname: string((value, ctx) => {
|
1016
1087
|
if (value.includes('_')) {
|
@@ -1032,7 +1103,7 @@ toPrettyError(
|
|
1032
1103
|
|
1033
1104
|
## Связанные поля
|
1034
1105
|
|
1035
|
-
В ```ctx.
|
1106
|
+
В ```ctx.values``` находится value, принятое последним object.
|
1036
1107
|
|
1037
1108
|
```ts
|
1038
1109
|
import { object, string, toPrettyError } from '@astral/validations';
|
@@ -1042,10 +1113,10 @@ type Values = {
|
|
1042
1113
|
repeatPassword: string;
|
1043
1114
|
};
|
1044
1115
|
|
1045
|
-
const validate = object<Values
|
1116
|
+
const validate = object<Values>({
|
1046
1117
|
password: string(min(9)),
|
1047
1118
|
repeatPassword: string(min(9), (value, ctx) => {
|
1048
|
-
if (value !== ctx.
|
1119
|
+
if (value !== ctx.values?.password) {
|
1049
1120
|
return ctx.createError({
|
1050
1121
|
message: 'Пароли не совпадают',
|
1051
1122
|
code: 'repeat-password',
|
@@ -1062,6 +1133,33 @@ toPrettyError(
|
|
1062
1133
|
);
|
1063
1134
|
```
|
1064
1135
|
|
1136
|
+
|
1137
|
+
## Доступ к высокоуровневым values (```ctx.global.values```)
|
1138
|
+
|
1139
|
+
В ```ctx.global.values``` находится values, полученное самым первым guard.
|
1140
|
+
|
1141
|
+
```ts
|
1142
|
+
import { object, string, boolean, optional } from '@astral/validations';
|
1143
|
+
|
1144
|
+
type Values = {
|
1145
|
+
isAgree: boolean;
|
1146
|
+
info: {
|
1147
|
+
name: string
|
1148
|
+
}
|
1149
|
+
};
|
1150
|
+
|
1151
|
+
const validate = object<Values>({
|
1152
|
+
isAgree: optional(boolean()),
|
1153
|
+
info: object<Values['info']>({
|
1154
|
+
name: when({
|
1155
|
+
is: (_, ctx) => Boolean(ctx.global.values?.isAgree),
|
1156
|
+
then: string(),
|
1157
|
+
otherwise: any(),
|
1158
|
+
}),
|
1159
|
+
})
|
1160
|
+
});
|
1161
|
+
```
|
1162
|
+
|
1065
1163
|
## Переиспользуемое правило
|
1066
1164
|
|
1067
1165
|
```ts
|
@@ -1137,9 +1235,9 @@ validate({
|
|
1137
1235
|
```ts
|
1138
1236
|
type Values = { name: string; isAgree: boolean };
|
1139
1237
|
|
1140
|
-
const validate = object<Values
|
1238
|
+
const validate = object<Values>({
|
1141
1239
|
name: when({
|
1142
|
-
is: (_, ctx) => Boolean(ctx.
|
1240
|
+
is: (_, ctx) => Boolean(ctx.values?.isAgree),
|
1143
1241
|
then: string(),
|
1144
1242
|
otherwise: any(),
|
1145
1243
|
}),
|
@@ -1164,10 +1262,10 @@ type Values = {
|
|
1164
1262
|
info?: ValuesInfo;
|
1165
1263
|
};
|
1166
1264
|
|
1167
|
-
const validate = object<Values
|
1265
|
+
const validate = object<Values>({
|
1168
1266
|
name: string(),
|
1169
1267
|
info: when({
|
1170
|
-
is: (_, ctx) => ctx.
|
1268
|
+
is: (_, ctx) => ctx.values?.name === 'Vasya',
|
1171
1269
|
then: object<ValuesInfo>({ surname: string() }),
|
1172
1270
|
otherwise: any(),
|
1173
1271
|
}),
|
@@ -1386,12 +1484,10 @@ type Values = {
|
|
1386
1484
|
org: { data: RusOrganization | EngOrganization };
|
1387
1485
|
};
|
1388
1486
|
|
1389
|
-
|
1390
|
-
const rusOrganization = object<RusOrganization, Values>({
|
1487
|
+
const rusOrganization = object<RusOrganization>({
|
1391
1488
|
inn: string(
|
1392
|
-
// автоматический вывод типа для ctx.global.values
|
1393
1489
|
when({
|
1394
|
-
is: (_, ctx) => Boolean(ctx.global.values
|
1490
|
+
is: (_, ctx) => Boolean((ctx.global.values as Values)?.isRus),
|
1395
1491
|
then: rusOrganization,
|
1396
1492
|
otherwise: engOrganization,
|
1397
1493
|
}),
|
@@ -1401,14 +1497,13 @@ const rusOrganization = object<RusOrganization, Values>({
|
|
1401
1497
|
|
1402
1498
|
const engOrganization = object<EngOrganization, Values>({ name: string() });
|
1403
1499
|
|
1404
|
-
// необходимо явно указать Values для типизации ctx.global.values
|
1405
1500
|
const organization = when<Values>({
|
1406
|
-
is: (_, ctx) => Boolean(ctx.global.values
|
1501
|
+
is: (_, ctx) => Boolean((ctx.global.values as Values)?.isRus),
|
1407
1502
|
then: rusOrganization,
|
1408
1503
|
otherwise: engOrganization,
|
1409
1504
|
});
|
1410
1505
|
|
1411
|
-
const validate = object<Values
|
1506
|
+
const validate = object<Values>({
|
1412
1507
|
isRus: optional(boolean()),
|
1413
1508
|
org: organization,
|
1414
1509
|
});
|
@@ -1461,3 +1556,19 @@ const validate = string(kpp({ exclude: isExclude }));
|
|
1461
1556
|
// undefined (значение не будет провалидировано)
|
1462
1557
|
validate(excludeValue);
|
1463
1558
|
```
|
1559
|
+
|
1560
|
+
# Migration guide
|
1561
|
+
|
1562
|
+
## v3 -> v4
|
1563
|
+
|
1564
|
+
### object
|
1565
|
+
|
1566
|
+
Generic object guard стал принимать один параметр - валидируемое значение.
|
1567
|
+
|
1568
|
+
### Типизация guard и rules
|
1569
|
+
|
1570
|
+
Generics правил и guards стали принимать тип для ```ctx.values``` вместо ```ctx.global.values```.
|
1571
|
+
|
1572
|
+
### ctx.global.values
|
1573
|
+
|
1574
|
+
```ctx.global.values``` стал ```unknown```. Для использования необходимо вручную уточнять тип. [Пример](#доступ-к-высокоуровневым-values-ctxglobalvalues).
|
package/any/any.d.ts
CHANGED
@@ -10,4 +10,4 @@
|
|
10
10
|
* validate({});
|
11
11
|
* ```
|
12
12
|
*/
|
13
|
-
export declare const any: <
|
13
|
+
export declare const any: <TLastSchemaValues extends Record<string, unknown>>() => (value: unknown, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
package/array/array.d.ts
CHANGED
@@ -12,8 +12,8 @@ import { ValidationRule } from '../core';
|
|
12
12
|
* validateArray(value);
|
13
13
|
* ```
|
14
14
|
*/
|
15
|
-
export declare const array: <TItem extends unknown,
|
16
|
-
(value: unknown, prevCtx?: import("../core").ValidationContext<
|
15
|
+
export declare const array: <TItem extends unknown, TLastSchemaValues extends Record<string, unknown> = {}>(...rules: ValidationRule<TItem[], TLastSchemaValues>[]) => {
|
16
|
+
(value: unknown, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined): import("../core").ValidationResult;
|
17
17
|
define(overridesDefOptions: Partial<{}> & {
|
18
18
|
requiredErrorMessage?: string | undefined;
|
19
19
|
typeErrorMessage?: string | undefined;
|
package/arrayItem/arrayItem.d.ts
CHANGED
@@ -24,4 +24,4 @@ import { ValidationRule } from '../core';
|
|
24
24
|
* validateArray(values);
|
25
25
|
* ```
|
26
26
|
*/
|
27
|
-
export declare const arrayItem: <TItem extends unknown,
|
27
|
+
export declare const arrayItem: <TItem extends unknown, TLastSchemaValues extends Record<string, unknown> = {}>(...rules: ValidationRule<TItem, TLastSchemaValues>[]) => (value: TItem[], prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
package/boolean/boolean.d.ts
CHANGED
@@ -10,8 +10,8 @@ import { ValidationRule } from '../core';
|
|
10
10
|
* validate(true);
|
11
11
|
* ```
|
12
12
|
*/
|
13
|
-
export declare const boolean: <
|
14
|
-
(value: unknown, prevCtx?: import("../core").ValidationContext<
|
13
|
+
export declare const boolean: <TLastSchemaValues extends Record<string, unknown>>(...rules: ValidationRule<boolean, TLastSchemaValues>[]) => {
|
14
|
+
(value: unknown, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined): import("../core").ValidationResult;
|
15
15
|
define(overridesDefOptions: Partial<{}> & {
|
16
16
|
requiredErrorMessage?: string | undefined;
|
17
17
|
typeErrorMessage?: string | undefined;
|
@@ -3,4 +3,4 @@ import { IndependentValidationRule, ValidationRule } from '../rule';
|
|
3
3
|
* @description Объединяет переданные правила в цепочку правил, останавливает выполнение цепочки, если появилась ошибка. Выполняет правила слева направо
|
4
4
|
* @example compose(min(), max());
|
5
5
|
*/
|
6
|
-
export declare const compose: <ValidationType,
|
6
|
+
export declare const compose: <ValidationType, TLastSchemaValues extends Record<string, unknown>>(...rules: (IndependentValidationRule<ValidationType, TLastSchemaValues> | ValidationRule<ValidationType, TLastSchemaValues>)[]) => IndependentValidationRule<ValidationType, Record<string, unknown>>;
|
@@ -4,5 +4,5 @@ import { ValidationTypes } from '../../types';
|
|
4
4
|
* @description Создает context валидации. Используется внутри фабрик guard и rule
|
5
5
|
* @default по-дефолту сбрасывает все флаги в false
|
6
6
|
*/
|
7
|
-
export declare function createContext<
|
8
|
-
export declare function createContext<
|
7
|
+
export declare function createContext<TValue extends ValidationTypes>(prevCtx: ValidationContext<{}, TValue> | undefined, value: TValue): ValidationContext<{}, TValue>;
|
8
|
+
export declare function createContext<TValue extends ValidationTypes, TLastSchemaValues extends Record<string, unknown>>(prevCtx: ValidationContext<{}> | undefined, value: TValue, lastSchemaValue: TLastSchemaValues): ValidationContext<TLastSchemaValues, TValue>;
|
@@ -1,9 +1,14 @@
|
|
1
1
|
import { createSimpleError } from '../../errors';
|
2
|
-
export function createContext(prevCtx, value) {
|
3
|
-
if (prevCtx) {
|
2
|
+
export function createContext(prevCtx, value, lastSchemaValue) {
|
3
|
+
if (prevCtx && !lastSchemaValue) {
|
4
4
|
return prevCtx;
|
5
5
|
}
|
6
|
+
const currentLastSchemaValue = lastSchemaValue ? lastSchemaValue : undefined;
|
7
|
+
if (prevCtx) {
|
8
|
+
return Object.assign(Object.assign({}, prevCtx), { values: currentLastSchemaValue });
|
9
|
+
}
|
6
10
|
return {
|
11
|
+
values: currentLastSchemaValue,
|
7
12
|
global: {
|
8
13
|
values: value,
|
9
14
|
overrides: {
|
package/core/context/types.d.ts
CHANGED
@@ -3,7 +3,11 @@ import { createSimpleError } from '../errors';
|
|
3
3
|
/**
|
4
4
|
* @description Контекст, который доступен в каждом правиле
|
5
5
|
*/
|
6
|
-
export type ValidationContext<
|
6
|
+
export type ValidationContext<TLastSchemaValues extends Record<string, unknown> = {}, TGlobalSchemaValues = unknown> = DeepReadonly<{
|
7
|
+
/**
|
8
|
+
* @description Values последнего валидируемого object
|
9
|
+
*/
|
10
|
+
values?: DeepPartial<TLastSchemaValues>;
|
7
11
|
/**
|
8
12
|
* @description Глобальные значения, идущие от самого верхнего правила к самому нижнему
|
9
13
|
*/
|
@@ -11,7 +15,7 @@ export type ValidationContext<TValues> = DeepReadonly<{
|
|
11
15
|
/**
|
12
16
|
* @description Значения, которые валидируется guard самого высоко порядка
|
13
17
|
*/
|
14
|
-
values:
|
18
|
+
values: TGlobalSchemaValues;
|
15
19
|
/**
|
16
20
|
* @description Глобальные переопределения (сквозные для всех правил)
|
17
21
|
*/
|
@@ -21,26 +21,26 @@ type GuardValue = unknown;
|
|
21
21
|
/**
|
22
22
|
* @description Интерфейс функции guard, которая в прототипе содержит метод define
|
23
23
|
*/
|
24
|
-
export interface Guard<
|
25
|
-
(value: GuardValue, ctx?: ValidationContext<
|
24
|
+
export interface Guard<TLastSchemaValues extends Record<string, unknown> = {}, AddDefOptions extends Record<string, unknown> = {}> {
|
25
|
+
(value: GuardValue, ctx?: ValidationContext<TLastSchemaValues>): ValidationResult;
|
26
26
|
/**
|
27
27
|
* @description Функция для создания нового guard с переопределенными дефолтными параметрами. Возвращает новый guard
|
28
28
|
* @param options - параметры, позволяющие переопределить дефолтные настройки guard
|
29
29
|
* @example string.define({ requiredMessage: 'ИНН не может быть пустым' })(inn())
|
30
30
|
*/
|
31
|
-
define(options: DefOptions<AddDefOptions>): Guard<
|
31
|
+
define(options: DefOptions<AddDefOptions>): Guard<TLastSchemaValues, AddDefOptions>;
|
32
32
|
}
|
33
33
|
/**
|
34
34
|
* @description Функция, которая позволяет определять частную логику для guard
|
35
35
|
*/
|
36
|
-
type GuardExecutor<
|
36
|
+
type GuardExecutor<AddDefOptions extends Record<string, unknown>> = (value: unknown, ctx: ValidationContext<Record<string, unknown>>, defOptions: DefOptions<AddDefOptions>) => ValidationResult;
|
37
37
|
/**
|
38
38
|
* @description Создает guard. Guard - функция, проверяющая тип значения
|
39
39
|
* По-дефолту проверяет value на required. Для выключения required необходимо использовать optional().
|
40
40
|
* После первого вызова guard в прототипу функции становится доступен метод define, который позволяет переопределить дефолтное поведение guard (например, изменить текст для required правила)
|
41
41
|
* @example
|
42
42
|
* ```ts
|
43
|
-
* const string = <
|
43
|
+
* const string = <TLastSchemaValues extends Record<string, unknown>>(...rules: ValidationRule<string, TValues>[]) =>
|
44
44
|
* createGuard<string, TValues>((value, ctx) => {
|
45
45
|
* if (typeof value !== 'string') {
|
46
46
|
* return ctx.createError({ code: 'custom error', message: 'Не строка' });
|
@@ -50,8 +50,8 @@ type GuardExecutor<TValues, AddDefOptions extends Record<string, unknown>> = (va
|
|
50
50
|
* });
|
51
51
|
* ```
|
52
52
|
*/
|
53
|
-
export declare const createGuard: <
|
54
|
-
(value: unknown, prevCtx?: ValidationContext<
|
53
|
+
export declare const createGuard: <TLastSchemaValues extends Record<string, unknown>, AddDefOptions extends Record<string, unknown> = {}>(executeGuard: GuardExecutor<AddDefOptions>) => {
|
54
|
+
(value: unknown, prevCtx?: ValidationContext<TLastSchemaValues> | undefined): ValidationResult;
|
55
55
|
define(overridesDefOptions: DefOptions<AddDefOptions>): any;
|
56
56
|
};
|
57
57
|
export {};
|
@@ -7,7 +7,7 @@ import { compose } from '../../compose';
|
|
7
7
|
* После первого вызова guard в прототипу функции становится доступен метод define, который позволяет переопределить дефолтное поведение guard (например, изменить текст для required правила)
|
8
8
|
* @example
|
9
9
|
* ```ts
|
10
|
-
* const string = <
|
10
|
+
* const string = <TLastSchemaValues extends Record<string, unknown>>(...rules: ValidationRule<string, TValues>[]) =>
|
11
11
|
* createGuard<string, TValues>((value, ctx) => {
|
12
12
|
* if (typeof value !== 'string') {
|
13
13
|
* return ctx.createError({ code: 'custom error', message: 'Не строка' });
|
@@ -8,12 +8,12 @@ export type CommonRuleParams<ValidationType extends ValidationTypes> = {
|
|
8
8
|
/**
|
9
9
|
* @description Функция, позволяющая для каждого правила указать исключение
|
10
10
|
*/
|
11
|
-
exclude?: (value: ValidationType, ctx: ValidationContext
|
11
|
+
exclude?: (value: ValidationType, ctx: ValidationContext) => boolean;
|
12
12
|
};
|
13
13
|
/**
|
14
14
|
* @description Функция, которая позволяет определять частную логику для guard
|
15
15
|
*/
|
16
|
-
type RuleExecutor<ValidationType extends ValidationTypes,
|
16
|
+
type RuleExecutor<ValidationType extends ValidationTypes, TLastSchemaValues extends Record<string, unknown>> = (value: ValidationType, ctx: ValidationContext<TLastSchemaValues>) => ValidationResult;
|
17
17
|
/**
|
18
18
|
* @description Создает правила валидации, которые можно использовать внутри guard или по отдельности
|
19
19
|
* @param executor - функция, которая позволяет определять частную логику для guard
|
@@ -30,5 +30,5 @@ type RuleExecutor<ValidationType extends ValidationTypes, TValues> = (value: Val
|
|
30
30
|
* }, params);
|
31
31
|
* ```
|
32
32
|
*/
|
33
|
-
export declare const createRule: <ValidationType extends unknown,
|
33
|
+
export declare const createRule: <ValidationType extends unknown, TLastSchemaValues extends Record<string, unknown> = {}>(executor: RuleExecutor<ValidationType, TLastSchemaValues>, commonParams?: CommonRuleParams<ValidationType> | undefined) => (value: ValidationType, prevCtx?: ValidationContext<TLastSchemaValues> | undefined) => ValidationResult;
|
34
34
|
export {};
|
@@ -8,4 +8,4 @@ export declare const required: ({ message, }?: {
|
|
8
8
|
* @default Обязательно
|
9
9
|
*/
|
10
10
|
message?: string | undefined;
|
11
|
-
}) => (value: unknown, prevCtx?: import("../..").ValidationContext<
|
11
|
+
}) => (value: unknown, prevCtx?: import("../..").ValidationContext<{}> | undefined) => import("../..").ValidationResult;
|
package/core/rule/types.d.ts
CHANGED
@@ -3,13 +3,13 @@ import { ValidationResult } from '../types';
|
|
3
3
|
/**
|
4
4
|
* @description Самостоятельное правило для валидации. Может использоваться вне guard'ов
|
5
5
|
*/
|
6
|
-
export type IndependentValidationRule<TValue,
|
6
|
+
export type IndependentValidationRule<TValue, TLastSchemaValues extends Record<string, unknown>> = (value: TValue, ctx?: ValidationContext<TLastSchemaValues>) => ValidationResult;
|
7
7
|
/**
|
8
8
|
* @description Правило для валидации, работающее исключительно с guard'ами
|
9
9
|
*/
|
10
|
-
export type ValidationRule<TValue,
|
10
|
+
export type ValidationRule<TValue, TLastSchemaValues extends Record<string, unknown> = {}> = (value: TValue, ctx: ValidationContext<TLastSchemaValues>) => ValidationResult;
|
11
11
|
/**
|
12
12
|
* @description Композиционное правило валидации, умеющее работать с любыми значениями.
|
13
13
|
* В основном используется для композиционных правил, которые принимают rule, умеющие валидировать разные значения (optional, transform...)
|
14
14
|
*/
|
15
|
-
export type UniversalCompositionalValidationRule<
|
15
|
+
export type UniversalCompositionalValidationRule<TLastSchemaValues extends Record<string, unknown>> = ValidationRule<any, TLastSchemaValues>;
|
package/core/utils/index.d.ts
CHANGED
@@ -1,3 +1,7 @@
|
|
1
1
|
export * from './isStringOfZeros';
|
2
2
|
export * from './isNoDoubleZeroStart';
|
3
3
|
export * from './resetTime';
|
4
|
+
export * from './isStartsWithAndEndsWithLetter';
|
5
|
+
export * from './isHasConsecutiveChars';
|
6
|
+
export * from './isFullNameValidCharacters';
|
7
|
+
export * from './isValidFullNameLength';
|
package/core/utils/index.js
CHANGED
@@ -1,3 +1,7 @@
|
|
1
1
|
export * from './isStringOfZeros';
|
2
2
|
export * from './isNoDoubleZeroStart';
|
3
3
|
export * from './resetTime';
|
4
|
+
export * from './isStartsWithAndEndsWithLetter';
|
5
|
+
export * from './isHasConsecutiveChars';
|
6
|
+
export * from './isFullNameValidCharacters';
|
7
|
+
export * from './isValidFullNameLength';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isFullNameValidCharacters';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isFullNameValidCharacters';
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* @description Проверяет, что разрешенные символы в тексте: прописные (большие) и строчные буквы (включая ё) русского алфавита,
|
3
|
+
прописные (большие) буквы I и V латинского алфавита, -, пробел, точка, апостроф, запятая, открывающая и закрывающая скобка
|
4
|
+
*/
|
5
|
+
export declare const isFullNameValidCharacters: (value: string) => boolean;
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* @description Проверяет, что разрешенные символы в тексте: прописные (большие) и строчные буквы (включая ё) русского алфавита,
|
3
|
+
прописные (большие) буквы I и V латинского алфавита, -, пробел, точка, апостроф, запятая, открывающая и закрывающая скобка
|
4
|
+
*/
|
5
|
+
export const isFullNameValidCharacters = (value) => !/^([а-яёА-ЯЁIV ё.,'’()\-\s]+)$/.test(value);
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isHasConsecutiveChars';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isHasConsecutiveChars';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isStartsWithAndEndsWithLetter';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isStartsWithAndEndsWithLetter';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isValidFullNameLength';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './isValidFullNameLength';
|
package/date/date.d.ts
CHANGED
@@ -15,8 +15,8 @@ type AdditionalDefOptions = {
|
|
15
15
|
* validate(new Date('22.22.2022'));
|
16
16
|
* ```
|
17
17
|
*/
|
18
|
-
export declare const date: <
|
19
|
-
(value: unknown, prevCtx?: import("../core").ValidationContext<
|
18
|
+
export declare const date: <TLastSchemaValues extends Record<string, unknown>>(...rules: ValidationRule<Date, TLastSchemaValues>[]) => {
|
19
|
+
(value: unknown, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined): import("../core").ValidationResult;
|
20
20
|
define(overridesDefOptions: Partial<AdditionalDefOptions> & {
|
21
21
|
requiredErrorMessage?: string | undefined;
|
22
22
|
typeErrorMessage?: string | undefined;
|
@@ -18,4 +18,4 @@ import { Guard } from '../core';
|
|
18
18
|
* const result = validate({ info: { info: {} } });
|
19
19
|
* ```
|
20
20
|
*/
|
21
|
-
export declare const deepPartial: <
|
21
|
+
export declare const deepPartial: <TLastSchemaValues extends Record<string, unknown>>(guard: Guard<TLastSchemaValues, {}>) => (value: unknown, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
package/email/email.d.ts
CHANGED
@@ -16,5 +16,5 @@ type EmailParams = {
|
|
16
16
|
* validate('example@mail.ru');
|
17
17
|
* ```
|
18
18
|
*/
|
19
|
-
export declare const email: <
|
19
|
+
export declare const email: <TLastSchemaValues extends Record<string, unknown>>(params?: EmailParams) => (value: string, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
20
20
|
export {};
|
package/index.d.ts
CHANGED
@@ -24,6 +24,9 @@ export { snils, SNILS_ERROR_INFO } from './snils';
|
|
24
24
|
export { createRule, REQUIRED_ERROR_INFO, type ValidationRule } from './core';
|
25
25
|
export { ogrnUL, OGRN_UL_ERROR_INFO } from './ogrnUL';
|
26
26
|
export { ogrnIP, OGRN_IP_ERROR_INFO } from './ogrnIP';
|
27
|
+
export { personName, PERSON_NAME_ERROR_INFO } from './personName';
|
28
|
+
export { personSurname, PERSON_SURNAME_ERROR_INFO } from './personSurname';
|
29
|
+
export { personPatronymic, PERSON_PATRONYMIC_ERROR_INFO, } from './personPatronymic';
|
27
30
|
export { any } from './any';
|
28
31
|
export { when } from './when';
|
29
32
|
export { toPrettyError } from './toPrettyError';
|
package/index.js
CHANGED
@@ -24,6 +24,9 @@ export { snils, SNILS_ERROR_INFO } from './snils';
|
|
24
24
|
export { createRule, REQUIRED_ERROR_INFO } from './core';
|
25
25
|
export { ogrnUL, OGRN_UL_ERROR_INFO } from './ogrnUL';
|
26
26
|
export { ogrnIP, OGRN_IP_ERROR_INFO } from './ogrnIP';
|
27
|
+
export { personName, PERSON_NAME_ERROR_INFO } from './personName';
|
28
|
+
export { personSurname, PERSON_SURNAME_ERROR_INFO } from './personSurname';
|
29
|
+
export { personPatronymic, PERSON_PATRONYMIC_ERROR_INFO, } from './personPatronymic';
|
27
30
|
export { any } from './any';
|
28
31
|
export { when } from './when';
|
29
32
|
export { toPrettyError } from './toPrettyError';
|
package/innIP/innIP.d.ts
CHANGED
@@ -13,5 +13,5 @@ type InnIPParams = CommonRuleParams<string> & {
|
|
13
13
|
* validate('384212952720');
|
14
14
|
* ```
|
15
15
|
*/
|
16
|
-
export declare const innIP: <
|
16
|
+
export declare const innIP: <TLastSchemaValues extends Record<string, unknown>>(params?: InnIPParams) => (value: string, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
17
17
|
export {};
|
package/innUL/innUL.d.ts
CHANGED
@@ -13,5 +13,5 @@ type InnULParams = CommonRuleParams<string> & {
|
|
13
13
|
* validate('7728168971');
|
14
14
|
* ```
|
15
15
|
*/
|
16
|
-
export declare const innUL: <
|
16
|
+
export declare const innUL: <TLastSchemaValues extends Record<string, unknown>>(params?: InnULParams) => (value: string, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => import("../core").ValidationResult;
|
17
17
|
export {};
|