@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 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 = string(emailOrPhone());
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>>(params?: EmailOrPhoneParams) => (value: string, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => ReturnType<import("../core").IndependentValidationRule<string, TLastSchemaValues>>;
12
+ export declare const emailOrPhone: <TLastSchemaValues extends Record<string, unknown>>() => import("../core").Guard<TLastSchemaValues, {}>;
@@ -1,29 +1,38 @@
1
- import { checkPhone, checkProbablyEmail, normalizePhone } from '@astral/utils';
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 = string(emailOrPhone());
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 = (params) => createRule((value, ctx) => {
18
- if (checkProbablyEmail(value)) {
19
- return email(params)(value, ctx);
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 normalizedPhone = normalizePhone(value);
22
- if (checkPhone(normalizedPhone)) {
23
- return mobilePhone(params)(normalizedPhone, ctx);
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: (params === null || params === void 0 ? void 0 : params.message) || EMAIL_OR_PHONE_ERROR_INFO.message,
35
+ message: EMAIL_OR_PHONE_ERROR_INFO.message,
27
36
  code: EMAIL_OR_PHONE_ERROR_INFO.code,
28
37
  });
29
- }, { exclude: params === null || params === void 0 ? void 0 : params.exclude });
38
+ });
@@ -0,0 +1,5 @@
1
+ export type EmailOrPhone = {
2
+ value?: string;
3
+ normalizedValue?: string;
4
+ type: 'email' | 'phone' | 'unknown';
5
+ };
@@ -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 = string(emailOrPhone());
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>>(params?: EmailOrPhoneParams) => (value: string, prevCtx?: import("../core").ValidationContext<TLastSchemaValues> | undefined) => ReturnType<import("../core").IndependentValidationRule<string, TLastSchemaValues>>;
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 = string(emailOrPhone());
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 = (params) => (0, core_1.createRule)((value, ctx) => {
21
- if ((0, utils_1.checkProbablyEmail)(value)) {
22
- return (0, email_1.email)(params)(value, ctx);
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 normalizedPhone = (0, utils_1.normalizePhone)(value);
25
- if ((0, utils_1.checkPhone)(normalizedPhone)) {
26
- return (0, mobilePhone_1.mobilePhone)(params)(normalizedPhone, ctx);
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: (params === null || params === void 0 ? void 0 : params.message) || constants_1.EMAIL_OR_PHONE_ERROR_INFO.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
- }, { exclude: params === null || params === void 0 ? void 0 : params.exclude });
41
+ });
33
42
  exports.emailOrPhone = emailOrPhone;
@@ -0,0 +1,5 @@
1
+ export type EmailOrPhone = {
2
+ value?: string;
3
+ normalizedValue?: string;
4
+ type: 'email' | 'phone' | 'unknown';
5
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astral/validations",
3
- "version": "4.22.0",
3
+ "version": "4.23.0",
4
4
  "browser": "./index.js",
5
5
  "main": "./mode/index.js",
6
6
  "dependencies": {