@astral/validations 4.17.0 → 4.18.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
@@ -379,7 +379,7 @@ validate('long string')
379
379
 
380
380
  ### email
381
381
 
382
- Проверяет валиден ли email. Не работает с русскими доменами
382
+ Проверяет валиден ли email. Работает с русскими доменами и punycode
383
383
 
384
384
  ```ts
385
385
  import { string, email } from '@astral/validations';
@@ -393,11 +393,21 @@ validate('example@mail.ru');
393
393
  // { message: 'Некорректный E-mail' }
394
394
  validate('example.ru');
395
395
 
396
+
396
397
  //Пользовательское сообщение для ошибки с максимальным количеством символов
397
398
  const validateEmail = email({ invalidLengthMessage: 'слишком длинный email' });
398
399
 
399
400
  // { message: 'слишком длинный email' }
400
401
  validateEmail('longlonglong.......')
402
+
403
+ //Проверка email с разрешенной кирилицей и punycode
404
+ const validateCyrillicEmail = email({ allowCyrillic: true });
405
+
406
+ // undefined
407
+ validateCyrillicEmail('test@домен.рф')
408
+
409
+ // undefined
410
+ validateCyrillicEmail('asdasd@xn--h1alffa9fa.xn--p1ai')
401
411
  ```
402
412
 
403
413
  ---
@@ -1,6 +1,8 @@
1
1
  import { type ErrorInfo } from '../core';
2
2
  export declare const EMAIL_REGEXP: RegExp;
3
3
  export declare const EMAIL_CYRILLIC_PUNYCODE_REGEXP: RegExp;
4
+ export declare const LATIN_SYMBOLS: RegExp;
5
+ export declare const CYRILLIC_SYMBOLS: RegExp;
4
6
  export declare const EMAIL_MAX_LENGTH = 254;
5
7
  export declare const PUNYCODE_REGEXP: RegExp;
6
8
  export declare const INVALID_EMAIL_ERROR_INFO: ErrorInfo;
@@ -1,6 +1,8 @@
1
1
  import { createErrorCode } from '../core';
2
2
  export const EMAIL_REGEXP = /^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,}$/;
3
3
  export const EMAIL_CYRILLIC_PUNYCODE_REGEXP = /^[-\w.<+]*\w+@((([A-z0-9][-_A-z0-9]+)|([А-яЁё0-9][-_А-яЁё0-9]+)|(xn--[a-z0-9]+))\.)+?(([A-zА-яЁё]{2,})|(xn--[a-z0-9]+))$/;
4
+ export const LATIN_SYMBOLS = /[a-zA-Z]/;
5
+ export const CYRILLIC_SYMBOLS = /[а-яА-ЯёЁ]/;
4
6
  export const EMAIL_MAX_LENGTH = 254;
5
7
  export const PUNYCODE_REGEXP = /^xn--/;
6
8
  export const INVALID_EMAIL_ERROR_INFO = {
package/email/email.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createRule } from '../core';
2
- import { DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_CYRILLIC_PUNYCODE_REGEXP, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_EMAIL_ERROR_INFO, LENGTH_EMAIL_ERROR_INFO, PUNYCODE_REGEXP, } from './constants';
2
+ import { CYRILLIC_SYMBOLS, DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_CYRILLIC_PUNYCODE_REGEXP, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_EMAIL_ERROR_INFO, LATIN_SYMBOLS, LENGTH_EMAIL_ERROR_INFO, PUNYCODE_REGEXP, } from './constants';
3
3
  /**
4
4
  * Проверяет валидность email.
5
5
  * Работает с русскими доменами и punycode через параметр allowCyrillic.
@@ -32,6 +32,10 @@ export const email = (params) => createRule((value, ctx) => {
32
32
  return ctx.createError(Object.assign(Object.assign({}, DOUBLE_DOTS_EMAIL_ERROR_INFO), { message: (params === null || params === void 0 ? void 0 : params.doubleDotsErrorMessage) ||
33
33
  DOUBLE_DOTS_EMAIL_ERROR_INFO.message }));
34
34
  }
35
+ //Проверка, что не может содержать одновременно латинские и кириллические символы
36
+ if (LATIN_SYMBOLS.test(hostname) && CYRILLIC_SYMBOLS.test(hostname)) {
37
+ return invalidEmailError;
38
+ }
35
39
  if (!PUNYCODE_REGEXP.test(hostname) &&
36
40
  hostname[2] === '-' &&
37
41
  hostname[3] === '-') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astral/validations",
3
- "version": "4.17.0",
3
+ "version": "4.18.0",
4
4
  "browser": "./index.js",
5
5
  "main": "./index.js",
6
6
  "dependencies": {