react-hook-form-rules 1.5.9 → 1.7.1
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/.github/workflows/test.yml +17 -0
- package/CHANGELOG.md +68 -0
- package/dist/i18n.d.ts +2 -0
- package/dist/i18n.js +26 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +27 -0
- package/dist/rules/array/get-max-array-length-rule.d.ts +9 -0
- package/dist/rules/array/get-max-array-length-rule.js +17 -0
- package/dist/rules/array/get-max-array-length.d.ts +9 -0
- package/dist/rules/array/get-max-array-length.js +17 -0
- package/dist/rules/array/get-min-array-length-rule.d.ts +9 -0
- package/dist/rules/array/get-min-array-length-rule.js +17 -0
- package/dist/rules/array/get-min-array-length.d.ts +9 -0
- package/dist/rules/array/get-min-array-length.js +17 -0
- package/dist/rules/array/get-required-array-rule.d.ts +8 -0
- package/dist/rules/array/get-required-array-rule.js +15 -0
- package/dist/rules/array/tests/get-max-array-length-rule.test.d.ts +1 -0
- package/dist/rules/array/tests/get-max-array-length-rule.test.js +15 -0
- package/dist/rules/array/tests/get-min-array-length-rule.test.d.ts +1 -0
- package/dist/rules/array/tests/get-min-array-length-rule.test.js +15 -0
- package/dist/rules/array/tests/get-required-array-rule.test.d.ts +1 -0
- package/dist/rules/array/tests/get-required-array-rule.test.js +15 -0
- package/dist/rules/constants.d.ts +1 -0
- package/dist/rules/constants.js +4 -0
- package/dist/rules/default/get-max-length-rule.d.ts +11 -0
- package/dist/rules/default/get-max-length-rule.js +18 -0
- package/dist/rules/default/get-max-rule.d.ts +11 -0
- package/dist/rules/default/get-max-rule.js +16 -0
- package/dist/rules/default/get-min-length-rule.d.ts +11 -0
- package/dist/rules/default/get-min-length-rule.js +18 -0
- package/dist/rules/default/get-min-rule.d.ts +11 -0
- package/dist/rules/default/get-min-rule.js +18 -0
- package/dist/rules/default/get-require-rule.d.ts +11 -0
- package/dist/rules/default/get-require-rule.js +16 -0
- package/dist/rules/default/tests/get-max-length-rule.test.d.ts +1 -0
- package/dist/rules/default/tests/get-max-length-rule.test.js +23 -0
- package/dist/rules/default/tests/get-max-rule.test.d.ts +1 -0
- package/dist/rules/default/tests/get-max-rule.test.js +23 -0
- package/dist/rules/default/tests/get-min-length-rule.test.d.ts +1 -0
- package/dist/rules/default/tests/get-min-length-rule.test.js +23 -0
- package/dist/rules/default/tests/get-min-rule.test.d.ts +1 -0
- package/dist/rules/default/tests/get-min-rule.test.js +23 -0
- package/dist/rules/default/tests/get-required-rule.test.d.ts +1 -0
- package/dist/rules/default/tests/get-required-rule.test.js +11 -0
- package/dist/rules/get-email-rule.d.ts +17 -0
- package/dist/rules/get-email-rule.js +20 -0
- package/dist/rules/get-max-array-length.d.ts +8 -0
- package/dist/rules/get-max-array-length.js +16 -0
- package/dist/rules/get-max-length-rule.d.ts +11 -0
- package/dist/rules/get-max-length-rule.js +22 -0
- package/dist/rules/get-max-rule.d.ts +11 -0
- package/dist/rules/get-max-rule.js +15 -0
- package/dist/rules/get-min-array-length.d.ts +8 -0
- package/dist/rules/get-min-array-length.js +16 -0
- package/dist/rules/get-min-length-rule.d.ts +11 -0
- package/dist/rules/get-min-length-rule.js +22 -0
- package/dist/rules/get-min-rule.d.ts +16 -0
- package/dist/rules/get-min-rule.js +16 -0
- package/dist/rules/get-require-rule.d.ts +11 -0
- package/dist/rules/get-require-rule.js +16 -0
- package/dist/rules/get-required-array-role.d.ts +8 -0
- package/dist/rules/get-required-array-role.js +15 -0
- package/dist/rules/get-required-array-rule.d.ts +8 -0
- package/dist/rules/get-required-array-rule.js +15 -0
- package/dist/rules/get-required-object-rule.d.ts +8 -0
- package/dist/rules/get-required-object-rule.js +20 -0
- package/dist/rules/get-url-rule.d.ts +17 -0
- package/dist/rules/get-url-rule.js +20 -0
- package/dist/rules/helpers/get-min-error.d.ts +6 -0
- package/dist/rules/helpers/get-min-error.js +9 -0
- package/dist/rules/helpers/get-min-length-error.d.ts +6 -0
- package/dist/rules/helpers/get-min-length-error.js +9 -0
- package/dist/rules/link/get-email-rule.d.ts +17 -0
- package/dist/rules/link/get-email-rule.js +40 -0
- package/dist/rules/link/get-url-rule.d.ts +17 -0
- package/dist/rules/link/get-url-rule.js +20 -0
- package/dist/rules/object/get-required-object-rule.d.ts +8 -0
- package/dist/rules/object/get-required-object-rule.js +21 -0
- package/dist/rules/object/tests/get-require-object-rule.test.d.ts +1 -0
- package/dist/rules/object/tests/get-require-object-rule.test.js +15 -0
- package/dist/rules/patterns/get-email-rule.d.ts +17 -0
- package/dist/rules/patterns/get-email-rule.js +16 -0
- package/dist/rules/patterns/get-pattern-rule.d.ts +12 -0
- package/dist/rules/patterns/get-pattern-rule.js +16 -0
- package/dist/rules/patterns/get-url-rule.d.ts +17 -0
- package/dist/rules/patterns/get-url-rule.js +16 -0
- package/dist/rules/patterns/tests/get-email-rule.test.d.ts +1 -0
- package/dist/rules/patterns/tests/get-email-rule.test.js +25 -0
- package/dist/rules/patterns/tests/get-pattern-rule.test.d.ts +1 -0
- package/dist/rules/patterns/tests/get-pattern-rule.test.js +11 -0
- package/dist/rules/patterns/tests/get-url-rule.test.d.ts +1 -0
- package/dist/rules/patterns/tests/get-url-rule.test.js +25 -0
- package/i18n.ts +25 -0
- package/index.ts +4 -2
- package/jest.config.js +8 -0
- package/locales/en.json +12 -0
- package/locales/ru.json +11 -0
- package/package.json +7 -3
- package/rules/array/get-max-array-length-rule.ts +3 -3
- package/rules/array/get-min-array-length-rule.ts +4 -4
- package/rules/array/get-required-array-rule.ts +2 -2
- package/rules/array/tests/get-max-array-length-rule.test.ts +17 -0
- package/rules/array/tests/get-min-array-length-rule.test.ts +17 -0
- package/rules/array/tests/get-required-array-rule.test.ts +16 -0
- package/rules/default/get-max-length-rule.ts +8 -8
- package/rules/default/get-max-rule.ts +3 -1
- package/rules/default/get-min-length-rule.ts +3 -2
- package/rules/default/get-min-rule.ts +5 -1
- package/rules/default/get-require-rule.ts +2 -2
- package/rules/default/tests/get-max-length-rule.test.ts +24 -0
- package/rules/default/tests/get-max-rule.test.ts +24 -0
- package/rules/default/tests/get-min-length-rule.test.ts +24 -0
- package/rules/default/tests/get-min-rule.test.ts +24 -0
- package/rules/default/tests/get-required-rule.test.ts +10 -0
- package/rules/object/get-required-object-rule.ts +5 -5
- package/rules/object/tests/get-require-object-rule.test.ts +18 -0
- package/rules/patterns/get-email-rule.ts +22 -0
- package/rules/patterns/get-pattern-rule.ts +12 -0
- package/rules/{link → patterns}/get-url-rule.ts +6 -9
- package/rules/patterns/tests/get-email-rule.test.ts +27 -0
- package/rules/patterns/tests/get-pattern-rule.test.ts +10 -0
- package/rules/patterns/tests/get-url-rule.test.ts +28 -0
- package/rules/link/get-email-rule.ts +0 -25
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getEmailRule = void 0;
|
|
4
|
+
const get_pattern_rule_1 = require("./get-pattern-rule");
|
|
5
|
+
const i18n_1 = require("../../i18n");
|
|
6
|
+
const DEFAULT_PATTERN = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
|
|
7
|
+
/**
|
|
8
|
+
* Validates an email address.
|
|
9
|
+
* @param options - Parameters.
|
|
10
|
+
* @param {string} options.pattern - Regular expression.
|
|
11
|
+
* @param {string} options.message - Custom message.
|
|
12
|
+
*
|
|
13
|
+
* @example rules: { pattern: getEmailRule() }
|
|
14
|
+
*/
|
|
15
|
+
const getEmailRule = ({ pattern = DEFAULT_PATTERN, message = (0, i18n_1.translate)('email'), }) => (0, get_pattern_rule_1.getPatternRule)(pattern, message);
|
|
16
|
+
exports.getEmailRule = getEmailRule;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a rule that validates the pattern.
|
|
3
|
+
* @param options - Parameters.
|
|
4
|
+
* @param options.pattern - Regular expression.
|
|
5
|
+
* @param options.message - Custom message.
|
|
6
|
+
*
|
|
7
|
+
* @example rules: { pattern: getPatternRule(pattern) }
|
|
8
|
+
*/
|
|
9
|
+
export declare const getPatternRule: (pattern: RegExp, message: string) => {
|
|
10
|
+
value: RegExp;
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPatternRule = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Returns a rule that validates the pattern.
|
|
6
|
+
* @param options - Parameters.
|
|
7
|
+
* @param options.pattern - Regular expression.
|
|
8
|
+
* @param options.message - Custom message.
|
|
9
|
+
*
|
|
10
|
+
* @example rules: { pattern: getPatternRule(pattern) }
|
|
11
|
+
*/
|
|
12
|
+
const getPatternRule = (pattern, message) => ({
|
|
13
|
+
value: pattern,
|
|
14
|
+
message,
|
|
15
|
+
});
|
|
16
|
+
exports.getPatternRule = getPatternRule;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface UrlRule {
|
|
2
|
+
message?: string;
|
|
3
|
+
pattern?: RegExp;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Returns a rule that validates the input URL.
|
|
7
|
+
* @param options - Parameters.
|
|
8
|
+
* @param options.pattern - Regular expression.
|
|
9
|
+
* @param options.message - Custom message.
|
|
10
|
+
*
|
|
11
|
+
* @example rules: { pattern: getUrlRule() }
|
|
12
|
+
*/
|
|
13
|
+
export declare const getUrlRule: ({ pattern, message, }: UrlRule) => {
|
|
14
|
+
value: RegExp;
|
|
15
|
+
message: string;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUrlRule = void 0;
|
|
4
|
+
const i18n_1 = require("../../i18n");
|
|
5
|
+
const get_pattern_rule_1 = require("./get-pattern-rule");
|
|
6
|
+
const DEFAULT_PATTERN = /(http(s)?):\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/;
|
|
7
|
+
/**
|
|
8
|
+
* Returns a rule that validates the input URL.
|
|
9
|
+
* @param options - Parameters.
|
|
10
|
+
* @param options.pattern - Regular expression.
|
|
11
|
+
* @param options.message - Custom message.
|
|
12
|
+
*
|
|
13
|
+
* @example rules: { pattern: getUrlRule() }
|
|
14
|
+
*/
|
|
15
|
+
const getUrlRule = ({ pattern = DEFAULT_PATTERN, message = (0, i18n_1.translate)('url'), }) => (0, get_pattern_rule_1.getPatternRule)(pattern, message);
|
|
16
|
+
exports.getUrlRule = getUrlRule;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const get_email_rule_1 = require("../get-email-rule");
|
|
4
|
+
const DEFAULT_MESSAGE = "Please check the correctness of the entered email address.";
|
|
5
|
+
const DEFAULT_PATTERN = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
|
|
6
|
+
describe('Тестирование функции getEmailRule', () => {
|
|
7
|
+
test('Проверка значения по умолчанию', () => {
|
|
8
|
+
expect((0, get_email_rule_1.getEmailRule)({})).toEqual({
|
|
9
|
+
message: DEFAULT_MESSAGE,
|
|
10
|
+
value: DEFAULT_PATTERN
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
test('Проверка передачи кастомного сообщения', () => {
|
|
14
|
+
expect((0, get_email_rule_1.getEmailRule)({ message: 'Custom message' })).toEqual({
|
|
15
|
+
message: 'Custom message',
|
|
16
|
+
value: DEFAULT_PATTERN
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
test('Проверка передачи камсного паттерна', () => {
|
|
20
|
+
expect((0, get_email_rule_1.getEmailRule)({ pattern: /test/ })).toEqual({
|
|
21
|
+
message: DEFAULT_MESSAGE,
|
|
22
|
+
value: /test/
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const get_pattern_rule_1 = require("../get-pattern-rule");
|
|
4
|
+
describe('Тестирование функции getEmailRule', () => {
|
|
5
|
+
test('Проверка кастомного сообщения', () => {
|
|
6
|
+
expect((0, get_pattern_rule_1.getPatternRule)(/-/, 'test message')).toEqual({
|
|
7
|
+
message: 'test message',
|
|
8
|
+
value: /-/
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const get_url_rule_1 = require("../get-url-rule");
|
|
4
|
+
const DEFAULT_MESSAGE = "The URL does not match the format.";
|
|
5
|
+
const DEFAULT_PATTERN = /(http(s)?):\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/;
|
|
6
|
+
describe('Тестирование функции getEmailRule', () => {
|
|
7
|
+
test('Проверка значения по умолчанию', () => {
|
|
8
|
+
expect((0, get_url_rule_1.getUrlRule)({})).toEqual({
|
|
9
|
+
message: DEFAULT_MESSAGE,
|
|
10
|
+
value: DEFAULT_PATTERN
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
test('Проверка передачи кастомного сообщения', () => {
|
|
14
|
+
expect((0, get_url_rule_1.getUrlRule)({ message: 'Custom message' })).toEqual({
|
|
15
|
+
message: 'Custom message',
|
|
16
|
+
value: DEFAULT_PATTERN
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
test('Проверка передачи камсного паттерна', () => {
|
|
20
|
+
expect((0, get_url_rule_1.getUrlRule)({ pattern: /test/ })).toEqual({
|
|
21
|
+
message: DEFAULT_MESSAGE,
|
|
22
|
+
value: /test/
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
});
|
package/i18n.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const translataions = {
|
|
2
|
+
en: require("./locales/en.json"),
|
|
3
|
+
ru: require("./locales/ru.json"),
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
let currentLang = 'en'
|
|
7
|
+
|
|
8
|
+
export const setLanguage = (lang: string) => {
|
|
9
|
+
if ((translataions as any)[lang]) {
|
|
10
|
+
currentLang = lang;
|
|
11
|
+
} else {
|
|
12
|
+
console.warn(`⚠️ Language "${lang}" is not supported. Defaulting to English.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const translate = (key: string, params = {}) => {
|
|
17
|
+
let text = (translataions as any)[currentLang][key] || key;
|
|
18
|
+
|
|
19
|
+
// Подставляем параметры (например, {{min}})
|
|
20
|
+
Object.keys(params).forEach((param) => {
|
|
21
|
+
text = text.replace(`{{${param}}}`, (params as any)[param]);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return text;
|
|
25
|
+
}
|
package/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { getEmailRule } from "./rules/
|
|
2
|
-
import { getUrlRule } from "./rules/
|
|
1
|
+
import { getEmailRule } from "./rules/patterns/get-email-rule";
|
|
2
|
+
import { getUrlRule } from "./rules/patterns/get-url-rule";
|
|
3
|
+
import { getPatternRule } from "./rules/patterns/get-pattern-rule";
|
|
3
4
|
|
|
4
5
|
import { getMaxArrayLengthRule } from "./rules/array/get-max-array-length-rule";
|
|
5
6
|
import { getMinArrayLengthRule } from "./rules/array/get-min-array-length-rule";
|
|
@@ -14,6 +15,7 @@ import { getRequiredRule } from "./rules/default/get-require-rule";
|
|
|
14
15
|
import { getRequiredObjectRule } from "./rules/object/get-required-object-rule";
|
|
15
16
|
|
|
16
17
|
export {
|
|
18
|
+
getPatternRule,
|
|
17
19
|
getMaxRule,
|
|
18
20
|
getRequiredObjectRule,
|
|
19
21
|
getRequiredArrayRule,
|
package/jest.config.js
ADDED
package/locales/en.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"required": "This field is required.",
|
|
3
|
+
"maxArrayLength": "Maximum number of values - {{max}}.",
|
|
4
|
+
"minArrayLength": "Minimum number of values - {{min}}.",
|
|
5
|
+
"min": "Minimum value - {{min}}.",
|
|
6
|
+
"max": "Maximum value - {{max}}.",
|
|
7
|
+
"minLength": "Minimum length - {{min}}.",
|
|
8
|
+
"maxLength": "Maximum length - {{max}}.",
|
|
9
|
+
"email": "Please check the correctness of the entered email address.",
|
|
10
|
+
"url": "The URL does not match the format."
|
|
11
|
+
}
|
|
12
|
+
|
package/locales/ru.json
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"required": "Поле объязательное.",
|
|
3
|
+
"maxArrayLength": "Максимальное количество значений - {{max}}.",
|
|
4
|
+
"minArrayLength": "Минимальное количество значений - {{min}}.",
|
|
5
|
+
"min": "Минимальное значение - {{min}}.",
|
|
6
|
+
"max": "Максимальное значение - {{max}}.",
|
|
7
|
+
"minLength": "Минимальная длина - {{min}}.",
|
|
8
|
+
"maxLength": "Максимальная длина - {{max}}.",
|
|
9
|
+
"email": "Проверьте правильность введенного адреса электронной почты.",
|
|
10
|
+
"url": "URL не соответствует формату."
|
|
11
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-hook-form-rules",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"test": "
|
|
8
|
+
"test": "jest",
|
|
9
|
+
"test-watch": "jest --watch --verbose",
|
|
9
10
|
"build": "tsc --declaration",
|
|
10
11
|
"check-npmrc": "cat ~/.npmrc",
|
|
11
12
|
"deploy": "npm run build && npm publish",
|
|
@@ -22,9 +23,12 @@
|
|
|
22
23
|
"@semantic-release/changelog": "^6.0.3",
|
|
23
24
|
"@semantic-release/exec": "^7.0.3",
|
|
24
25
|
"@semantic-release/git": "^10.0.1",
|
|
26
|
+
"@types/jest": "^29.5.14",
|
|
25
27
|
"conventional-changelog-conventionalcommits": "^8.0.0",
|
|
26
28
|
"cz-conventional-changelog": "^3.3.0",
|
|
27
|
-
"
|
|
29
|
+
"jest": "^29.7.0",
|
|
30
|
+
"semantic-release": "^24.2.3",
|
|
31
|
+
"ts-jest": "^29.2.6"
|
|
28
32
|
},
|
|
29
33
|
"config": {
|
|
30
34
|
"commitizen": {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Validates an array for the maximum number of values.
|
|
3
5
|
* @param arr - Array of values.
|
|
@@ -11,9 +13,7 @@ export const getMaxArrayLengthRule = (
|
|
|
11
13
|
maxLength: number,
|
|
12
14
|
message?: string,
|
|
13
15
|
) => {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const formattedMessage = message || defaultMessage;
|
|
16
|
+
const formattedMessage = message || translate('maxArrayLength', { max: maxLength });
|
|
17
17
|
|
|
18
18
|
return arr.length < maxLength || formattedMessage;
|
|
19
19
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Validates an array for the maximum number of values.
|
|
3
5
|
* @param arr - Array of values.
|
|
@@ -11,9 +13,7 @@ export const getMinArrayLengthRule = (
|
|
|
11
13
|
minLength: number,
|
|
12
14
|
message?: string,
|
|
13
15
|
) => {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const formattedMessage = message || defaultMessage;
|
|
16
|
+
const formattedMessage = message || translate('minArrayLength', { min: minLength });
|
|
17
17
|
|
|
18
|
-
return arr.length
|
|
18
|
+
return arr.length >= minLength || formattedMessage;
|
|
19
19
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Validates an array, checking if it contains values.
|
|
@@ -8,5 +8,5 @@ import { REQUIRED_MESSAGE_TEXT } from "../constants";
|
|
|
8
8
|
* @example rules: { validate: (arr) => getRequiredArrayRule(arr) }
|
|
9
9
|
*/
|
|
10
10
|
export const getRequiredArrayRule = (arr: unknown[], message?: string) => {
|
|
11
|
-
return arr.length > 0 || (message ||
|
|
11
|
+
return arr.length > 0 || (message || translate('required'));
|
|
12
12
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getMaxArrayLengthRule } from '../get-max-array-length-rule'
|
|
2
|
+
|
|
3
|
+
const MAX_LENGTH = 2;
|
|
4
|
+
|
|
5
|
+
describe('Тестирование функции getMaxArrayLengthRule', () => {
|
|
6
|
+
test('Проверка, что функция возвращает текстовое сообщение с ошибкой если длинна массива превышает максимальную.', () => {
|
|
7
|
+
expect(getMaxArrayLengthRule([1, 2, 3], MAX_LENGTH)).toBe(`Maximum number of values - ${MAX_LENGTH}.`)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('Проверка, что функция возвращает true, если длинна массива меньше, либо равна максимальной.', () => {
|
|
11
|
+
expect(getMaxArrayLengthRule([1], MAX_LENGTH)).toBe(true)
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
test('Проверка, что функция возвращает кастомное сообщение, если кол-во заначений превышает максимальное.', () => {
|
|
15
|
+
expect(getMaxArrayLengthRule([1, 2, 3, 4], MAX_LENGTH, 'test message')).toBe('test message')
|
|
16
|
+
})
|
|
17
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getMinArrayLengthRule } from "../get-min-array-length-rule";
|
|
2
|
+
|
|
3
|
+
const MIN_LENGTH = 2;
|
|
4
|
+
|
|
5
|
+
describe('Тестирование функции getMinArrayLengthRule', () => {
|
|
6
|
+
test('Проверка, что функция возвращает текстовое сообщение с ошибкой если длинна массива меньше минимальной.', () => {
|
|
7
|
+
expect(getMinArrayLengthRule([1], MIN_LENGTH)).toBe(`Minimum number of values - ${MIN_LENGTH}.`)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('Проверка, что функция возвращает true, если длинна массива большe, либо равна минимальной.', () => {
|
|
11
|
+
expect(getMinArrayLengthRule([1, 3, 4], MIN_LENGTH)).toBe(true)
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
test('Проверка, что функция возвращает кастомное сообщение, если кол-во заначений меньше минимальной.', () => {
|
|
15
|
+
expect(getMinArrayLengthRule([1], MIN_LENGTH, 'test message')).toBe('test message')
|
|
16
|
+
})
|
|
17
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { REQUIRED_MESSAGE_TEXT } from '../../constants'
|
|
2
|
+
import { getRequiredArrayRule } from '../get-required-array-rule'
|
|
3
|
+
|
|
4
|
+
describe('Тестирование функции getRequiredArrayRule', () => {
|
|
5
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой, когда массив не содержит значения.', () => {
|
|
6
|
+
expect(getRequiredArrayRule([], 'test message')).toBe('test message')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
test('Проверка, что функция возвращает true, когда массив не пустой.', () => {
|
|
10
|
+
expect(getRequiredArrayRule([1, 2, 3])).toBe(true)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
test('Проверка, что функция возвращает базовое сообщение, когда массив пустой.', () => {
|
|
14
|
+
expect(getRequiredArrayRule([])).toBe(REQUIRED_MESSAGE_TEXT)
|
|
15
|
+
})
|
|
16
|
+
})
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Validates the maximum length of a string.
|
|
3
5
|
* @param maxLength - Maximum number of characters allowed.
|
|
@@ -5,11 +7,9 @@
|
|
|
5
7
|
*
|
|
6
8
|
* @example rules: { maxLength: getMaxLengthRule(1000) }
|
|
7
9
|
*/
|
|
8
|
-
export const getMaxLengthRule = (maxLength: number, message?: string) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
};
|
|
10
|
+
export const getMaxLengthRule = (maxLength: number, message?: string) => ({
|
|
11
|
+
value: maxLength,
|
|
12
|
+
message: message || translate('maxLength', {
|
|
13
|
+
max: maxLength,
|
|
14
|
+
}),
|
|
15
|
+
})
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Returns an error if the number exceeds the specified value.
|
|
3
5
|
* @param max - Maximum number.
|
|
@@ -7,5 +9,5 @@
|
|
|
7
9
|
*/
|
|
8
10
|
export const getMaxRule = (max: number, message?: string) => ({
|
|
9
11
|
value: max,
|
|
10
|
-
message: message ||
|
|
12
|
+
message: message || translate('max', { max }),
|
|
11
13
|
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Returns a rule that validates the minimum length of a string.
|
|
3
5
|
* @param minLength - Minimum number of characters allowed.
|
|
@@ -6,10 +8,9 @@
|
|
|
6
8
|
* @example rules: { minLength: getMinLengthRule(20) }
|
|
7
9
|
*/
|
|
8
10
|
export const getMinLengthRule = (minLength: number, message?: string) => {
|
|
9
|
-
const formattedMessage = `Minimum length - ${minLength}.`;
|
|
10
11
|
|
|
11
12
|
return {
|
|
12
13
|
value: minLength,
|
|
13
|
-
message: message ||
|
|
14
|
+
message: message || translate('minLength', { min: minLength }),
|
|
14
15
|
};
|
|
15
16
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { translate } from "../../i18n"
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Returns an error if the number is less than the specified value.
|
|
3
5
|
* @param min - Minimum number.
|
|
@@ -7,5 +9,7 @@
|
|
|
7
9
|
*/
|
|
8
10
|
export const getMinRule = (min: number, message?: string) => ({
|
|
9
11
|
value: min,
|
|
10
|
-
message: message ||
|
|
12
|
+
message: message || translate('min', {
|
|
13
|
+
min,
|
|
14
|
+
}),
|
|
11
15
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Validates a required field.
|
|
@@ -9,7 +9,7 @@ import { REQUIRED_MESSAGE_TEXT } from "../constants";
|
|
|
9
9
|
*/
|
|
10
10
|
export const getRequiredRule = (
|
|
11
11
|
isRequired = true,
|
|
12
|
-
message =
|
|
12
|
+
message = translate('required')
|
|
13
13
|
) => ({
|
|
14
14
|
value: isRequired,
|
|
15
15
|
message,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getMaxLengthRule } from "../get-max-length-rule"
|
|
2
|
+
|
|
3
|
+
describe('Тестирование функции getMinLengthRule', () => {
|
|
4
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой.', () => {
|
|
5
|
+
expect(getMaxLengthRule(1, 'test message')).toEqual({
|
|
6
|
+
value: 1,
|
|
7
|
+
message: 'test message',
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
test('Проверка, что функция возвращает базовую ошибку.', () => {
|
|
12
|
+
expect(getMaxLengthRule(1)).toEqual({
|
|
13
|
+
value: 1,
|
|
14
|
+
message: `Maximum length - ${1}.`
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('Проверка, что функция возвращает базовую ошибку и переданное минимальное значение.', () => {
|
|
19
|
+
expect(getMaxLengthRule(111)).toEqual({
|
|
20
|
+
value: 111,
|
|
21
|
+
message: `Maximum length - 111.`
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getMaxRule } from "../get-max-rule"
|
|
2
|
+
|
|
3
|
+
describe('Тестирование функции getMaxRule', () => {
|
|
4
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой.', () => {
|
|
5
|
+
expect(getMaxRule(1, 'test message')).toEqual({
|
|
6
|
+
value: 1,
|
|
7
|
+
message: 'test message',
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
test('Проверка, что функция возвращает базовую ошибку.', () => {
|
|
12
|
+
expect(getMaxRule(1)).toEqual({
|
|
13
|
+
value: 1,
|
|
14
|
+
message: `Maximum value - 1.`
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('Проверка, что функция возвращает базовую ошибку и переданное минимальное значение.', () => {
|
|
19
|
+
expect(getMaxRule(111)).toEqual({
|
|
20
|
+
value: 111,
|
|
21
|
+
message: `Maximum value - 111.`
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getMinLengthRule } from "../get-min-length-rule"
|
|
2
|
+
|
|
3
|
+
describe('Тестирование функции getMinLengthRule', () => {
|
|
4
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой.', () => {
|
|
5
|
+
expect(getMinLengthRule(1, 'test message')).toEqual({
|
|
6
|
+
value: 1,
|
|
7
|
+
message: 'test message',
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
test('Проверка, что функция возвращает базовую ошибку.', () => {
|
|
12
|
+
expect(getMinLengthRule(1)).toEqual({
|
|
13
|
+
value: 1,
|
|
14
|
+
message: `Minimum length - ${1}.`
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('Проверка, что функция возвращает базовую ошибку и переданное минимальное значение.', () => {
|
|
19
|
+
expect(getMinLengthRule(111)).toEqual({
|
|
20
|
+
value: 111,
|
|
21
|
+
message: `Minimum length - 111.`
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getMinRule } from "../get-min-rule";
|
|
2
|
+
|
|
3
|
+
describe('Тестирование функции getMinRule', () => {
|
|
4
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой.', () => {
|
|
5
|
+
expect(getMinRule(1, 'test message')).toEqual({
|
|
6
|
+
value: 1,
|
|
7
|
+
message: 'test message',
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
test('Проверка, что функция возвращает базовую ошибку.', () => {
|
|
12
|
+
expect(getMinRule(1)).toEqual({
|
|
13
|
+
value: 1,
|
|
14
|
+
message: `Minimum value - 1.`
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('Проверка, что функция возвращает базовую ошибку и переданное минимальное значение.', () => {
|
|
19
|
+
expect(getMinRule(111)).toEqual({
|
|
20
|
+
value: 111,
|
|
21
|
+
message: `Minimum value - 111.`
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { getRequiredRule } from '../get-require-rule'
|
|
2
|
+
|
|
3
|
+
describe('Тестирование функции getRequiredRule', () => {
|
|
4
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой.', () => {
|
|
5
|
+
expect(getRequiredRule(true, 'test message')).toEqual({
|
|
6
|
+
value: true,
|
|
7
|
+
message: 'test message',
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
})
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { translate } from "../../i18n";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Validates an object, checking if it contains values.
|
|
5
|
-
* @param obj - Object with values.
|
|
6
|
-
* @param message - Custom message.
|
|
5
|
+
* @param {Object} obj - Object with values.
|
|
6
|
+
* @param {string} message - Custom message.
|
|
7
7
|
*
|
|
8
8
|
* @example rules: { validate: (obj) => getRequiredObjectRule(obj) }
|
|
9
9
|
*/
|
|
10
10
|
export const getRequiredObjectRule = (obj: Record<string, unknown>, message?: string) => {
|
|
11
|
-
const formattedMessage = message ||
|
|
11
|
+
const formattedMessage = message || translate("required");
|
|
12
12
|
|
|
13
13
|
if (!obj) {
|
|
14
14
|
return false || formattedMessage;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
const isEmpty = Object?.keys(obj)?.length
|
|
17
|
+
const isEmpty = Object?.keys(obj)?.length > 0;
|
|
18
18
|
|
|
19
19
|
return isEmpty || formattedMessage;
|
|
20
20
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { REQUIRED_MESSAGE_TEXT } from '../../constants'
|
|
2
|
+
import { getRequiredObjectRule } from '../get-required-object-rule'
|
|
3
|
+
|
|
4
|
+
describe('Тестирование функции getRequireObjectRule', () => {
|
|
5
|
+
test('Проверка, что функция возвращает кастомное сообщение с ошибкой, когда объект не содержит значения.', () => {
|
|
6
|
+
expect(getRequiredObjectRule({}, 'test message')).toBe('test message')
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
test('Проверка, что функция возвращает true, когда объект не пустой.', () => {
|
|
10
|
+
expect(getRequiredObjectRule({ test: '123' })).toBe(true)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
test('Проверка, что функция возвращает базовое сообщение, когда объект пустой.', () => {
|
|
14
|
+
expect(getRequiredObjectRule({})).toBe(REQUIRED_MESSAGE_TEXT)
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getPatternRule } from "./get-pattern-rule";
|
|
2
|
+
import { translate } from "../../i18n";
|
|
3
|
+
|
|
4
|
+
const DEFAULT_PATTERN = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
|
|
5
|
+
|
|
6
|
+
interface EmailRule {
|
|
7
|
+
pattern?: RegExp;
|
|
8
|
+
message?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Validates an email address.
|
|
13
|
+
* @param options - Parameters.
|
|
14
|
+
* @param {string} options.pattern - Regular expression.
|
|
15
|
+
* @param {string} options.message - Custom message.
|
|
16
|
+
*
|
|
17
|
+
* @example rules: { pattern: getEmailRule({}) }
|
|
18
|
+
*/
|
|
19
|
+
export const getEmailRule = ({
|
|
20
|
+
pattern = DEFAULT_PATTERN,
|
|
21
|
+
message = translate('email'),
|
|
22
|
+
}: EmailRule) => getPatternRule(pattern, message)
|