@astral/validations 4.22.0 → 4.23.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 +102 -53
- package/emailOrPhone/emailOrPhone.d.ts +5 -8
- package/emailOrPhone/emailOrPhone.js +23 -14
- package/emailOrPhone/types.d.ts +5 -0
- package/emailOrPhone/types.js +1 -0
- package/node/emailOrPhone/emailOrPhone.d.ts +5 -8
- package/node/emailOrPhone/emailOrPhone.js +22 -13
- package/node/emailOrPhone/types.d.ts +5 -0
- package/node/emailOrPhone/types.js +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
@@ -59,6 +59,7 @@
|
|
59
59
|
- [file](#file)
|
60
60
|
- [uploadedFile](#uploadedfile)
|
61
61
|
- [uploadedFileList](#uploadedfilelist)
|
62
|
+
- [emailOrPhone](#emailOrPhone)
|
62
63
|
- [boolean](#boolean)
|
63
64
|
- [object](#object)
|
64
65
|
- [partial](#partial)
|
@@ -415,59 +416,6 @@ validateCyrillicEmail('asdasd@xn--h1alffa9fa.xn--p1ai')
|
|
415
416
|
|
416
417
|
---
|
417
418
|
|
418
|
-
### emailOrPhone
|
419
|
-
|
420
|
-
Проверяет валиден ли email или мобильный телефон.
|
421
|
-
- Если строка содержит кириллицу, латиницу или символ @ - проверяется как email
|
422
|
-
- Иначе убираются все символы, кроме digits, и проверяется как mobilePhone
|
423
|
-
|
424
|
-
|
425
|
-
- для email работает с русскими доменами и punycode,
|
426
|
-
```ts
|
427
|
-
import { string, emailOrPhone } from '@astral/validations';
|
428
|
-
|
429
|
-
const validate = string(emailOrPhone());
|
430
|
-
|
431
|
-
// undefined
|
432
|
-
validate('example@mail.ru');
|
433
|
-
|
434
|
-
// { message: 'Некорректный E-mail' }
|
435
|
-
validate('example.ru');
|
436
|
-
|
437
|
-
|
438
|
-
// Пользовательское сообщение для ошибки с максимальным количеством символов
|
439
|
-
const validateEmail = emailOrPhone({ invalidLengthMessage: 'Слишком длинный email' });
|
440
|
-
|
441
|
-
// { message: 'Слишком длинный email' }
|
442
|
-
validateEmail('longlonglong.......')
|
443
|
-
|
444
|
-
//Проверка email с разрешенной кирилицей и punycode
|
445
|
-
const validateCyrillicEmail = emailOrPhone({ allowCyrillic: true });
|
446
|
-
|
447
|
-
// undefined
|
448
|
-
validateCyrillicEmail('test@домен.рф')
|
449
|
-
validateCyrillicEmail('asdasd@xn--h1alffa9fa.xn--p1ai')
|
450
|
-
|
451
|
-
```
|
452
|
-
- для телефона работает с произвольными масками
|
453
|
-
```ts
|
454
|
-
import { string, emailOrPhone } from '@astral/validations';
|
455
|
-
|
456
|
-
const validate = string(emailOrPhone());
|
457
|
-
|
458
|
-
// undefined
|
459
|
-
validate('79999999999')
|
460
|
-
validate('7 (999) 99-99-999')
|
461
|
-
validate('+79999999999')
|
462
|
-
validate('89999999999')
|
463
|
-
|
464
|
-
// { message: 'Некорректный формат' }
|
465
|
-
validate('8999999')
|
466
|
-
validate('%$^*%$(')
|
467
|
-
```
|
468
|
-
|
469
|
-
---
|
470
|
-
|
471
419
|
### guid
|
472
420
|
|
473
421
|
Проверяет валиден ли GUID.
|
@@ -1287,6 +1235,107 @@ validate([{ id: '1', name: 'document1.pdf', status: { isRestrictionError: true }
|
|
1287
1235
|
validate([{ id: '1', name: 'document1.pdf', status: { isRestrictionError: true, errorMsg: 'Размер файла не может превышать 3.00 Кб' } },
|
1288
1236
|
{ id: '2', name: 'document2.pdf' }])
|
1289
1237
|
```
|
1238
|
+
|
1239
|
+
---
|
1240
|
+
|
1241
|
+
### emailOrPhone
|
1242
|
+
|
1243
|
+
- Валидация предназначена для компонента [FormEmailOrPhoneField](https://main--61baeff6f06230003a88ef8a.chromatic.com/?path=/docs/form-formemailorphonefield--docs)
|
1244
|
+
|
1245
|
+
|
1246
|
+
Проверяет валиден ли email или мобильный телефон.
|
1247
|
+
- Если строка содержит кириллицу, латиницу или символ @ - проверяется как email
|
1248
|
+
- Иначе убираются все символы, кроме digits, и проверяется как mobilePhone
|
1249
|
+
|
1250
|
+
- для email работает с русскими доменами и punycode,
|
1251
|
+
```ts
|
1252
|
+
import { emailOrPhone } from '@astral/validations';
|
1253
|
+
|
1254
|
+
const validate = emailOrPhone();
|
1255
|
+
|
1256
|
+
// undefined
|
1257
|
+
validate({
|
1258
|
+
value: 'example@mail.ru',
|
1259
|
+
normalizedValue: 'example@mail.ru',
|
1260
|
+
type: 'email',
|
1261
|
+
});
|
1262
|
+
|
1263
|
+
// { message: 'Некорректный E-mail' }
|
1264
|
+
validate({
|
1265
|
+
value: 'example.ru',
|
1266
|
+
normalizedValue: 'example.ru',
|
1267
|
+
type: 'email',
|
1268
|
+
});
|
1269
|
+
|
1270
|
+
|
1271
|
+
// Пользовательское сообщение для ошибки с максимальным количеством символов
|
1272
|
+
const validateEmail = emailOrPhone({ invalidLengthMessage: 'Слишком длинный email' });
|
1273
|
+
|
1274
|
+
// { message: 'Слишком длинный email' }
|
1275
|
+
validateEmail({
|
1276
|
+
value: 'longlonglong.......',
|
1277
|
+
normalizedValue: 'longlonglong.......',
|
1278
|
+
type: 'email',
|
1279
|
+
});
|
1280
|
+
|
1281
|
+
//Проверка email с разрешенной кирилицей и punycode
|
1282
|
+
const validateCyrillicEmail = emailOrPhone({ allowCyrillic: true });
|
1283
|
+
|
1284
|
+
// undefined
|
1285
|
+
validateCyrillicEmail({
|
1286
|
+
value: 'test@домен.рф',
|
1287
|
+
normalizedValue: 'test@домен.рф',
|
1288
|
+
type: 'email',
|
1289
|
+
});
|
1290
|
+
validateCyrillicEmail({
|
1291
|
+
value: 'asdasd@xn--h1alffa9fa.xn--p1ai',
|
1292
|
+
normalizedValue: 'asdasd@xn--h1alffa9fa.xn--p1ai',
|
1293
|
+
type: 'email',
|
1294
|
+
});
|
1295
|
+
|
1296
|
+
```
|
1297
|
+
- для телефона работает с произвольными масками
|
1298
|
+
```ts
|
1299
|
+
import { string, emailOrPhone } from '@astral/validations';
|
1300
|
+
|
1301
|
+
const validate = emailOrPhone();
|
1302
|
+
|
1303
|
+
// undefined
|
1304
|
+
validate({
|
1305
|
+
value: '79999999999',
|
1306
|
+
normalizedValue: '79999999999',
|
1307
|
+
type: 'phone',
|
1308
|
+
});
|
1309
|
+
|
1310
|
+
validate({
|
1311
|
+
value: '7 (999) 99-99-999',
|
1312
|
+
normalizedValue: '79999999999',
|
1313
|
+
type: 'phone',
|
1314
|
+
});
|
1315
|
+
validate({
|
1316
|
+
value: '+79999999999',
|
1317
|
+
normalizedValue: '79999999999',
|
1318
|
+
type: 'phone',
|
1319
|
+
});
|
1320
|
+
validate({
|
1321
|
+
value: '89999999999',
|
1322
|
+
normalizedValue: '79999999999',
|
1323
|
+
type: 'phone',
|
1324
|
+
});
|
1325
|
+
|
1326
|
+
// { message: 'Некорректный формат' }
|
1327
|
+
validate({
|
1328
|
+
value: '8999999',
|
1329
|
+
normalizedValue: '8999999',
|
1330
|
+
type: 'unknown',
|
1331
|
+
});
|
1332
|
+
validate({
|
1333
|
+
value: '%$^*%$(',
|
1334
|
+
normalizedValue: '%$^*%$(',
|
1335
|
+
type: 'unknown',
|
1336
|
+
});
|
1337
|
+
```
|
1338
|
+
|
1290
1339
|
---
|
1291
1340
|
|
1292
1341
|
## boolean
|
@@ -1,15 +1,12 @@
|
|
1
|
-
import { type EmailParams } from '../email';
|
2
|
-
import { type MobilePhoneParams } from '../mobilePhone';
|
3
|
-
export type EmailOrPhoneParams = EmailParams & MobilePhoneParams;
|
4
1
|
/**
|
5
|
-
* Проверяет валидность email или мобильного телефона.
|
2
|
+
* Guard для поля "Email или телефон". Проверяет валидность email или мобильного телефона.
|
6
3
|
* - Если строка содержит кириллицу, латиницу или символ @ - проверяется как email
|
7
4
|
* - Иначе убираются все символы, кроме digits, и проверяется как mobilePhone
|
8
5
|
* @example
|
9
6
|
* ```ts
|
10
|
-
* const validate =
|
11
|
-
* validate('example@mail.ru');
|
12
|
-
* validate('79999999999');
|
7
|
+
* const validate = emailOrPhone();
|
8
|
+
* validate({ value: 'example@mail.ru', normalizedValue: 'example@mail.ru', type: 'email' });
|
9
|
+
* validate({ value: '+7 (999) 999-99-99', normalizedValue: '79999999999', type: 'phone' });
|
13
10
|
* ```
|
14
11
|
*/
|
15
|
-
export declare const emailOrPhone: <TLastSchemaValues extends Record<string, unknown>>(
|
12
|
+
export declare const emailOrPhone: <TLastSchemaValues extends Record<string, unknown>>() => import("../core").Guard<TLastSchemaValues, {}>;
|
@@ -1,29 +1,38 @@
|
|
1
|
-
import {
|
2
|
-
import { createRule } from '../core';
|
1
|
+
import { createGuard } from '../core';
|
3
2
|
import { email } from '../email';
|
4
3
|
import { mobilePhone } from '../mobilePhone';
|
5
4
|
import { EMAIL_OR_PHONE_ERROR_INFO } from './constants';
|
6
5
|
/**
|
7
|
-
* Проверяет валидность email или мобильного телефона.
|
6
|
+
* Guard для поля "Email или телефон". Проверяет валидность email или мобильного телефона.
|
8
7
|
* - Если строка содержит кириллицу, латиницу или символ @ - проверяется как email
|
9
8
|
* - Иначе убираются все символы, кроме digits, и проверяется как mobilePhone
|
10
9
|
* @example
|
11
10
|
* ```ts
|
12
|
-
* const validate =
|
13
|
-
* validate('example@mail.ru');
|
14
|
-
* validate('79999999999');
|
11
|
+
* const validate = emailOrPhone();
|
12
|
+
* validate({ value: 'example@mail.ru', normalizedValue: 'example@mail.ru', type: 'email' });
|
13
|
+
* validate({ value: '+7 (999) 999-99-99', normalizedValue: '79999999999', type: 'phone' });
|
15
14
|
* ```
|
16
15
|
*/
|
17
|
-
export const emailOrPhone = (
|
18
|
-
if (
|
19
|
-
|
16
|
+
export const emailOrPhone = () => createGuard((value, ctx) => {
|
17
|
+
if (!value ||
|
18
|
+
typeof value !== 'object' ||
|
19
|
+
!('value' in value) ||
|
20
|
+
!('normalizedValue' in value) ||
|
21
|
+
!('type' in value)) {
|
22
|
+
return ctx.createError({
|
23
|
+
code: EMAIL_OR_PHONE_ERROR_INFO.code,
|
24
|
+
message: EMAIL_OR_PHONE_ERROR_INFO.message,
|
25
|
+
});
|
20
26
|
}
|
21
|
-
const
|
22
|
-
if (
|
23
|
-
return
|
27
|
+
const { value: formattedValue = '', normalizedValue = '', type, } = value;
|
28
|
+
if (type === 'email') {
|
29
|
+
return email()(formattedValue, ctx);
|
30
|
+
}
|
31
|
+
if (type === 'phone') {
|
32
|
+
return mobilePhone()(normalizedValue, ctx);
|
24
33
|
}
|
25
34
|
return ctx.createError({
|
26
|
-
message:
|
35
|
+
message: EMAIL_OR_PHONE_ERROR_INFO.message,
|
27
36
|
code: EMAIL_OR_PHONE_ERROR_INFO.code,
|
28
37
|
});
|
29
|
-
}
|
38
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -1,15 +1,12 @@
|
|
1
|
-
import { type EmailParams } from '../email';
|
2
|
-
import { type MobilePhoneParams } from '../mobilePhone';
|
3
|
-
export type EmailOrPhoneParams = EmailParams & MobilePhoneParams;
|
4
1
|
/**
|
5
|
-
* Проверяет валидность email или мобильного телефона.
|
2
|
+
* Guard для поля "Email или телефон". Проверяет валидность email или мобильного телефона.
|
6
3
|
* - Если строка содержит кириллицу, латиницу или символ @ - проверяется как email
|
7
4
|
* - Иначе убираются все символы, кроме digits, и проверяется как mobilePhone
|
8
5
|
* @example
|
9
6
|
* ```ts
|
10
|
-
* const validate =
|
11
|
-
* validate('example@mail.ru');
|
12
|
-
* validate('79999999999');
|
7
|
+
* const validate = emailOrPhone();
|
8
|
+
* validate({ value: 'example@mail.ru', normalizedValue: 'example@mail.ru', type: 'email' });
|
9
|
+
* validate({ value: '+7 (999) 999-99-99', normalizedValue: '79999999999', type: 'phone' });
|
13
10
|
* ```
|
14
11
|
*/
|
15
|
-
export declare const emailOrPhone: <TLastSchemaValues extends Record<string, unknown>>(
|
12
|
+
export declare const emailOrPhone: <TLastSchemaValues extends Record<string, unknown>>() => import("../core").Guard<TLastSchemaValues, {}>;
|
@@ -1,33 +1,42 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.emailOrPhone = void 0;
|
4
|
-
const utils_1 = require("@astral/utils");
|
5
4
|
const core_1 = require("../core");
|
6
5
|
const email_1 = require("../email");
|
7
6
|
const mobilePhone_1 = require("../mobilePhone");
|
8
7
|
const constants_1 = require("./constants");
|
9
8
|
/**
|
10
|
-
* Проверяет валидность email или мобильного телефона.
|
9
|
+
* Guard для поля "Email или телефон". Проверяет валидность email или мобильного телефона.
|
11
10
|
* - Если строка содержит кириллицу, латиницу или символ @ - проверяется как email
|
12
11
|
* - Иначе убираются все символы, кроме digits, и проверяется как mobilePhone
|
13
12
|
* @example
|
14
13
|
* ```ts
|
15
|
-
* const validate =
|
16
|
-
* validate('example@mail.ru');
|
17
|
-
* validate('79999999999');
|
14
|
+
* const validate = emailOrPhone();
|
15
|
+
* validate({ value: 'example@mail.ru', normalizedValue: 'example@mail.ru', type: 'email' });
|
16
|
+
* validate({ value: '+7 (999) 999-99-99', normalizedValue: '79999999999', type: 'phone' });
|
18
17
|
* ```
|
19
18
|
*/
|
20
|
-
const emailOrPhone = (
|
21
|
-
if (
|
22
|
-
|
19
|
+
const emailOrPhone = () => (0, core_1.createGuard)((value, ctx) => {
|
20
|
+
if (!value ||
|
21
|
+
typeof value !== 'object' ||
|
22
|
+
!('value' in value) ||
|
23
|
+
!('normalizedValue' in value) ||
|
24
|
+
!('type' in value)) {
|
25
|
+
return ctx.createError({
|
26
|
+
code: constants_1.EMAIL_OR_PHONE_ERROR_INFO.code,
|
27
|
+
message: constants_1.EMAIL_OR_PHONE_ERROR_INFO.message,
|
28
|
+
});
|
23
29
|
}
|
24
|
-
const
|
25
|
-
if (
|
26
|
-
return (0,
|
30
|
+
const { value: formattedValue = '', normalizedValue = '', type, } = value;
|
31
|
+
if (type === 'email') {
|
32
|
+
return (0, email_1.email)()(formattedValue, ctx);
|
33
|
+
}
|
34
|
+
if (type === 'phone') {
|
35
|
+
return (0, mobilePhone_1.mobilePhone)()(normalizedValue, ctx);
|
27
36
|
}
|
28
37
|
return ctx.createError({
|
29
|
-
message:
|
38
|
+
message: constants_1.EMAIL_OR_PHONE_ERROR_INFO.message,
|
30
39
|
code: constants_1.EMAIL_OR_PHONE_ERROR_INFO.code,
|
31
40
|
});
|
32
|
-
}
|
41
|
+
});
|
33
42
|
exports.emailOrPhone = emailOrPhone;
|