@astral/validations 4.16.0 → 4.17.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.
@@ -1,6 +1,8 @@
1
1
  import { type ErrorInfo } from '../core';
2
2
  export declare const EMAIL_REGEXP: RegExp;
3
+ export declare const EMAIL_CYRILLIC_PUNYCODE_REGEXP: RegExp;
3
4
  export declare const EMAIL_MAX_LENGTH = 254;
5
+ export declare const PUNYCODE_REGEXP: RegExp;
4
6
  export declare const INVALID_EMAIL_ERROR_INFO: ErrorInfo;
5
7
  export declare const LENGTH_EMAIL_ERROR_INFO: ErrorInfo;
6
8
  export declare const DOUBLE_DOTS_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
+ 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]+))$/;
3
4
  export const EMAIL_MAX_LENGTH = 254;
5
+ export const PUNYCODE_REGEXP = /^xn--/;
4
6
  export const INVALID_EMAIL_ERROR_INFO = {
5
7
  code: createErrorCode('email-invalid'),
6
8
  message: 'Некорректный E-mail',
package/email/email.d.ts CHANGED
@@ -11,9 +11,15 @@ type EmailParams = {
11
11
  * Замена стандартного сообщения ошибки для повторяющихся точек.
12
12
  */
13
13
  doubleDotsErrorMessage?: string;
14
+ /**
15
+ * Разрешение символов кирилицы и punycode
16
+ */
17
+ allowCyrillic?: boolean;
14
18
  };
15
19
  /**
16
- * Проверяет валидность email. Не работает с русскими доменами
20
+ * Проверяет валидность email.
21
+ * Работает с русскими доменами и punycode через параметр allowCyrillic.
22
+ * punycode приходит на фронте только из input type='email'.
17
23
  * @example
18
24
  * ```ts
19
25
  * const validate = string(email());
package/email/email.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { createRule } from '../core';
2
- import { DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_EMAIL_ERROR_INFO, LENGTH_EMAIL_ERROR_INFO, } from './constants';
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';
3
3
  /**
4
- * Проверяет валидность email. Не работает с русскими доменами
4
+ * Проверяет валидность email.
5
+ * Работает с русскими доменами и punycode через параметр allowCyrillic.
6
+ * punycode приходит на фронте только из input type='email'.
5
7
  * @example
6
8
  * ```ts
7
9
  * const validate = string(email());
@@ -10,7 +12,10 @@ import { DOUBLE_DOTS_EMAIL_ERROR_INFO, EMAIL_MAX_LENGTH, EMAIL_REGEXP, INVALID_E
10
12
  */
11
13
  export const email = (params) => createRule((value, ctx) => {
12
14
  const invalidEmailError = ctx.createError(Object.assign(Object.assign({}, INVALID_EMAIL_ERROR_INFO), { message: (params === null || params === void 0 ? void 0 : params.message) || INVALID_EMAIL_ERROR_INFO.message }));
13
- if (!EMAIL_REGEXP.test(value)) {
15
+ const emailRegexp = (params === null || params === void 0 ? void 0 : params.allowCyrillic)
16
+ ? EMAIL_CYRILLIC_PUNYCODE_REGEXP
17
+ : EMAIL_REGEXP;
18
+ if (!emailRegexp.test(value)) {
14
19
  return invalidEmailError;
15
20
  }
16
21
  if (value.length > EMAIL_MAX_LENGTH) {
@@ -27,7 +32,9 @@ export const email = (params) => createRule((value, ctx) => {
27
32
  return ctx.createError(Object.assign(Object.assign({}, DOUBLE_DOTS_EMAIL_ERROR_INFO), { message: (params === null || params === void 0 ? void 0 : params.doubleDotsErrorMessage) ||
28
33
  DOUBLE_DOTS_EMAIL_ERROR_INFO.message }));
29
34
  }
30
- if (hostname[2] === '-' && hostname[3] === '-') {
35
+ if (!PUNYCODE_REGEXP.test(hostname) &&
36
+ hostname[2] === '-' &&
37
+ hostname[3] === '-') {
31
38
  return invalidEmailError;
32
39
  }
33
40
  return undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astral/validations",
3
- "version": "4.16.0",
3
+ "version": "4.17.0",
4
4
  "browser": "./index.js",
5
5
  "main": "./index.js",
6
6
  "dependencies": {