@astral/validations 2.26.0 → 3.0.0-beta.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.
Files changed (316) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1243 -1
  3. package/any/any.d.ts +21 -0
  4. package/any/any.js +14 -0
  5. package/any/index.d.ts +1 -0
  6. package/any/index.js +1 -0
  7. package/array/array.d.ts +15 -0
  8. package/array/array.js +21 -0
  9. package/array/constants.d.ts +2 -0
  10. package/array/constants.js +5 -0
  11. package/array/index.d.ts +2 -0
  12. package/array/index.js +2 -0
  13. package/arrayItem/arrayItem.d.ts +35 -0
  14. package/arrayItem/arrayItem.js +33 -0
  15. package/arrayItem/index.d.ts +1 -0
  16. package/arrayItem/index.js +1 -0
  17. package/boolean/boolean.d.ts +13 -0
  18. package/boolean/boolean.js +19 -0
  19. package/boolean/constants.d.ts +2 -0
  20. package/boolean/constants.js +5 -0
  21. package/boolean/index.d.ts +2 -0
  22. package/boolean/index.js +2 -0
  23. package/core/compose/compose.d.ts +6 -0
  24. package/{compose → core/compose}/compose.js +2 -3
  25. package/core/context/createContext/createContext.d.ts +8 -0
  26. package/core/context/createContext/createContext.js +15 -0
  27. package/core/context/createContext/index.d.ts +1 -0
  28. package/core/context/createContext/index.js +1 -0
  29. package/core/context/index.d.ts +2 -0
  30. package/core/context/index.js +2 -0
  31. package/core/context/types.d.ts +28 -0
  32. package/core/errors/ArrayError/ArrayError.d.ts +18 -0
  33. package/core/errors/ArrayError/ArrayError.js +10 -0
  34. package/core/errors/ArrayError/createArrayError/createArrayError.d.ts +5 -0
  35. package/core/errors/ArrayError/createArrayError/createArrayError.js +11 -0
  36. package/core/errors/ArrayError/createArrayError/index.d.ts +1 -0
  37. package/core/errors/ArrayError/createArrayError/index.js +1 -0
  38. package/core/errors/ArrayError/index.d.ts +2 -0
  39. package/core/errors/ArrayError/index.js +2 -0
  40. package/core/errors/ErrorMap/ErrorMap.d.ts +21 -0
  41. package/core/errors/ErrorMap/ErrorMap.js +10 -0
  42. package/core/errors/ErrorMap/createErrorMap/createErrorMap.d.ts +5 -0
  43. package/core/errors/ErrorMap/createErrorMap/createErrorMap.js +10 -0
  44. package/core/errors/ErrorMap/createErrorMap/index.d.ts +1 -0
  45. package/core/errors/ErrorMap/createErrorMap/index.js +1 -0
  46. package/core/errors/ErrorMap/index.d.ts +2 -0
  47. package/core/errors/ErrorMap/index.js +2 -0
  48. package/core/errors/SimpleError/SimpleError.d.ts +16 -0
  49. package/core/errors/SimpleError/SimpleError.js +9 -0
  50. package/core/errors/SimpleError/createSimpleError/createSimpleError.d.ts +6 -0
  51. package/core/errors/SimpleError/createSimpleError/createSimpleError.js +5 -0
  52. package/core/errors/SimpleError/createSimpleError/index.d.ts +1 -0
  53. package/core/errors/SimpleError/createSimpleError/index.js +1 -0
  54. package/core/errors/SimpleError/index.d.ts +2 -0
  55. package/core/errors/SimpleError/index.js +2 -0
  56. package/core/errors/createErrorCode/createErrorCode.d.ts +5 -0
  57. package/core/errors/createErrorCode/createErrorCode.js +4 -0
  58. package/core/errors/createErrorCode/index.d.ts +1 -0
  59. package/core/errors/createErrorCode/index.js +1 -0
  60. package/core/errors/index.d.ts +5 -0
  61. package/core/errors/index.js +5 -0
  62. package/core/errors/types.d.ts +18 -0
  63. package/core/errors/types.js +1 -0
  64. package/core/guard/createGuard/createGuard.d.ts +54 -0
  65. package/core/guard/createGuard/createGuard.js +41 -0
  66. package/core/guard/createGuard/index.d.ts +1 -0
  67. package/core/guard/createGuard/index.js +1 -0
  68. package/core/guard/index.d.ts +1 -0
  69. package/core/guard/index.js +1 -0
  70. package/core/index.d.ts +8 -0
  71. package/core/index.js +8 -0
  72. package/core/rule/createRule/createRule.d.ts +42 -0
  73. package/core/rule/createRule/createRule.js +27 -0
  74. package/core/rule/index.d.ts +3 -0
  75. package/core/rule/index.js +3 -0
  76. package/core/rule/required/constants.d.ts +2 -0
  77. package/core/rule/required/constants.js +5 -0
  78. package/core/rule/required/index.d.ts +2 -0
  79. package/core/rule/required/index.js +2 -0
  80. package/core/rule/required/required.d.ts +19 -0
  81. package/core/rule/required/required.js +25 -0
  82. package/core/rule/types.d.ts +15 -0
  83. package/core/rule/types.js +1 -0
  84. package/core/types.d.ts +9 -0
  85. package/core/types.js +1 -0
  86. package/{utils → core/utils}/index.d.ts +1 -1
  87. package/{utils → core/utils}/index.js +1 -1
  88. package/core/utils/isStringOfZeros/index.d.ts +1 -0
  89. package/core/utils/isStringOfZeros/index.js +1 -0
  90. package/{utils → core/utils/isStringOfZeros}/isStringOfZeros.d.ts +1 -1
  91. package/{utils → core/utils/isStringOfZeros}/isStringOfZeros.js +1 -1
  92. package/core/utils/resetTime/index.d.ts +1 -0
  93. package/core/utils/resetTime/index.js +1 -0
  94. package/core/utils/resetTime/resetTime.d.ts +5 -0
  95. package/core/utils/resetTime/resetTime.js +12 -0
  96. package/date/constants.d.ts +3 -0
  97. package/date/constants.js +9 -0
  98. package/date/date.d.ts +19 -0
  99. package/date/date.js +24 -0
  100. package/date/index.d.ts +1 -0
  101. package/date/index.js +1 -0
  102. package/deepPartial/deepPartial.d.ts +29 -0
  103. package/deepPartial/deepPartial.js +21 -0
  104. package/deepPartial/index.d.ts +1 -0
  105. package/deepPartial/index.js +1 -0
  106. package/email/constants.d.ts +5 -0
  107. package/email/constants.js +11 -0
  108. package/email/email.d.ts +28 -0
  109. package/email/email.js +19 -0
  110. package/email/index.d.ts +2 -0
  111. package/email/index.js +2 -0
  112. package/index.d.ts +24 -20
  113. package/index.js +24 -20
  114. package/innIP/constants.d.ts +5 -0
  115. package/innIP/constants.js +8 -0
  116. package/innIP/index.d.ts +2 -0
  117. package/innIP/index.js +2 -0
  118. package/innIP/innIP.d.ts +25 -0
  119. package/innIP/innIP.js +40 -0
  120. package/innUL/constants.d.ts +4 -0
  121. package/innUL/constants.js +7 -0
  122. package/innUL/index.d.ts +2 -0
  123. package/innUL/index.js +2 -0
  124. package/innUL/innUL.d.ts +25 -0
  125. package/innUL/innUL.js +36 -0
  126. package/kpp/constants.d.ts +3 -0
  127. package/kpp/constants.js +6 -0
  128. package/kpp/index.d.ts +2 -0
  129. package/kpp/index.js +2 -0
  130. package/kpp/kpp.d.ts +25 -0
  131. package/kpp/kpp.js +16 -0
  132. package/max/constants.d.ts +5 -0
  133. package/max/constants.js +5 -0
  134. package/max/index.d.ts +2 -0
  135. package/max/index.js +2 -0
  136. package/max/max.d.ts +26 -0
  137. package/max/max.js +42 -0
  138. package/min/constants.d.ts +5 -0
  139. package/min/constants.js +5 -0
  140. package/min/index.d.ts +2 -0
  141. package/min/index.js +2 -0
  142. package/min/min.d.ts +26 -0
  143. package/min/min.js +42 -0
  144. package/mobilePhone/constants.d.ts +3 -0
  145. package/mobilePhone/constants.js +6 -0
  146. package/mobilePhone/index.d.ts +2 -0
  147. package/mobilePhone/index.js +2 -0
  148. package/mobilePhone/mobilePhone.d.ts +27 -0
  149. package/mobilePhone/mobilePhone.js +21 -0
  150. package/number/constants.d.ts +4 -0
  151. package/number/constants.js +13 -0
  152. package/number/index.d.ts +2 -0
  153. package/number/index.js +2 -0
  154. package/number/number.d.ts +19 -0
  155. package/number/number.js +26 -0
  156. package/object/constants.d.ts +2 -0
  157. package/object/constants.js +5 -0
  158. package/object/index.d.ts +2 -0
  159. package/object/index.js +2 -0
  160. package/object/isEmptyErrors/index.d.ts +1 -0
  161. package/object/isEmptyErrors/index.js +1 -0
  162. package/object/isEmptyErrors/isEmptyErrors.d.ts +5 -0
  163. package/object/isEmptyErrors/isEmptyErrors.js +4 -0
  164. package/object/object.d.ts +52 -0
  165. package/object/object.js +50 -0
  166. package/ogrnIP/constants.d.ts +3 -0
  167. package/ogrnIP/constants.js +6 -0
  168. package/ogrnIP/index.d.ts +2 -0
  169. package/ogrnIP/index.js +2 -0
  170. package/ogrnIP/ogrnIP.d.ts +25 -0
  171. package/ogrnIP/ogrnIP.js +27 -0
  172. package/ogrnUL/constants.d.ts +3 -0
  173. package/ogrnUL/constants.js +6 -0
  174. package/ogrnUL/index.d.ts +2 -0
  175. package/ogrnUL/index.js +2 -0
  176. package/ogrnUL/ogrnUL.d.ts +25 -0
  177. package/ogrnUL/ogrnUL.js +27 -0
  178. package/onlyNumber/constants.d.ts +2 -0
  179. package/onlyNumber/constants.js +2 -0
  180. package/onlyNumber/index.d.ts +2 -0
  181. package/onlyNumber/index.js +2 -0
  182. package/onlyNumber/onlyNumber.d.ts +24 -0
  183. package/onlyNumber/onlyNumber.js +20 -0
  184. package/optional/index.d.ts +1 -0
  185. package/optional/index.js +1 -0
  186. package/optional/optional.d.ts +7 -0
  187. package/optional/optional.js +15 -0
  188. package/or/index.d.ts +1 -0
  189. package/or/index.js +1 -0
  190. package/or/or.d.ts +22 -0
  191. package/or/or.js +21 -0
  192. package/package.json +2 -2
  193. package/partial/index.d.ts +1 -0
  194. package/partial/index.js +1 -0
  195. package/partial/partial.d.ts +10 -0
  196. package/partial/partial.js +6 -0
  197. package/pattern/constants.d.ts +2 -0
  198. package/pattern/constants.js +2 -0
  199. package/pattern/index.d.ts +2 -0
  200. package/pattern/index.js +2 -0
  201. package/pattern/pattern.d.ts +26 -0
  202. package/pattern/pattern.js +22 -0
  203. package/snils/constants.d.ts +4 -0
  204. package/snils/constants.js +7 -0
  205. package/snils/index.d.ts +2 -0
  206. package/snils/index.js +2 -0
  207. package/snils/snils.d.ts +25 -0
  208. package/{isSNILS/isSNILS.js → snils/snils.js} +20 -21
  209. package/string/constants.d.ts +2 -0
  210. package/string/constants.js +5 -0
  211. package/string/index.d.ts +2 -0
  212. package/string/index.js +2 -0
  213. package/string/string.d.ts +2 -0
  214. package/string/string.js +8 -0
  215. package/toPlainError/index.d.ts +1 -0
  216. package/toPlainError/index.js +1 -0
  217. package/toPlainError/toPlainError.d.ts +35 -0
  218. package/toPlainError/toPlainError.js +49 -0
  219. package/toPlainError/utils/generateArrayPath/generateArrayPath.d.ts +4 -0
  220. package/toPlainError/utils/generateArrayPath/generateArrayPath.js +9 -0
  221. package/toPlainError/utils/generateArrayPath/index.d.ts +1 -0
  222. package/toPlainError/utils/generateArrayPath/index.js +1 -0
  223. package/toPlainError/utils/generateObjectPath/generateObjectPath.d.ts +4 -0
  224. package/toPlainError/utils/generateObjectPath/generateObjectPath.js +9 -0
  225. package/toPlainError/utils/generateObjectPath/index.d.ts +1 -0
  226. package/toPlainError/utils/generateObjectPath/index.js +1 -0
  227. package/toPlainError/utils/index.d.ts +2 -0
  228. package/toPlainError/utils/index.js +2 -0
  229. package/transform/index.d.ts +1 -0
  230. package/transform/index.js +1 -0
  231. package/transform/transform.d.ts +26 -0
  232. package/transform/transform.js +16 -0
  233. package/when/index.d.ts +1 -0
  234. package/when/index.js +1 -0
  235. package/when/when.d.ts +47 -0
  236. package/when/when.js +29 -0
  237. package/compose/compose.d.ts +0 -7
  238. package/composeSome/composeSome.d.ts +0 -8
  239. package/composeSome/composeSome.js +0 -25
  240. package/composeSome/index.d.ts +0 -1
  241. package/composeSome/index.js +0 -1
  242. package/constants.d.ts +0 -2
  243. package/constants.js +0 -2
  244. package/createRule/createRule.d.ts +0 -14
  245. package/createRule/createRule.js +0 -12
  246. package/isDate/index.d.ts +0 -1
  247. package/isDate/index.js +0 -1
  248. package/isDate/isDate.d.ts +0 -10
  249. package/isDate/isDate.js +0 -23
  250. package/isEmail/index.d.ts +0 -1
  251. package/isEmail/index.js +0 -1
  252. package/isEmail/isEmail.d.ts +0 -13
  253. package/isEmail/isEmail.js +0 -25
  254. package/isINNIP/index.d.ts +0 -1
  255. package/isINNIP/index.js +0 -1
  256. package/isINNIP/isINNIP.d.ts +0 -10
  257. package/isINNIP/isINNIP.js +0 -42
  258. package/isINNUL/index.d.ts +0 -1
  259. package/isINNUL/index.js +0 -1
  260. package/isINNUL/isINNUL.d.ts +0 -10
  261. package/isINNUL/isINNUL.js +0 -37
  262. package/isKPP/index.d.ts +0 -1
  263. package/isKPP/index.js +0 -1
  264. package/isKPP/isKPP.d.ts +0 -7
  265. package/isKPP/isKPP.js +0 -19
  266. package/isMaxLength/index.d.ts +0 -1
  267. package/isMaxLength/index.js +0 -1
  268. package/isMaxLength/isMaxLength.d.ts +0 -18
  269. package/isMaxLength/isMaxLength.js +0 -34
  270. package/isMaxValue/index.d.ts +0 -1
  271. package/isMaxValue/index.js +0 -1
  272. package/isMaxValue/isMaxValue.d.ts +0 -17
  273. package/isMaxValue/isMaxValue.js +0 -35
  274. package/isMaybeNumber/index.d.ts +0 -1
  275. package/isMaybeNumber/index.js +0 -1
  276. package/isMaybeNumber/isMaybeNumber.d.ts +0 -10
  277. package/isMaybeNumber/isMaybeNumber.js +0 -23
  278. package/isMinLength/index.d.ts +0 -1
  279. package/isMinLength/index.js +0 -1
  280. package/isMinLength/isMinLength.d.ts +0 -18
  281. package/isMinLength/isMinLength.js +0 -34
  282. package/isMinValue/index.d.ts +0 -1
  283. package/isMinValue/index.js +0 -1
  284. package/isMinValue/isMinValue.d.ts +0 -17
  285. package/isMinValue/isMinValue.js +0 -35
  286. package/isMobilePhone/index.d.ts +0 -1
  287. package/isMobilePhone/index.js +0 -1
  288. package/isMobilePhone/isMobilePhone.d.ts +0 -10
  289. package/isMobilePhone/isMobilePhone.js +0 -20
  290. package/isOGRNIP/index.d.ts +0 -1
  291. package/isOGRNIP/index.js +0 -1
  292. package/isOGRNIP/isOGRNIP.d.ts +0 -10
  293. package/isOGRNIP/isOGRNIP.js +0 -29
  294. package/isOGRNUL/index.d.ts +0 -1
  295. package/isOGRNUL/index.js +0 -1
  296. package/isOGRNUL/isOGRNUL.d.ts +0 -10
  297. package/isOGRNUL/isOGRNUL.js +0 -29
  298. package/isRequired/index.d.ts +0 -1
  299. package/isRequired/index.js +0 -1
  300. package/isRequired/isRequired.d.ts +0 -11
  301. package/isRequired/isRequired.js +0 -23
  302. package/isSNILS/index.d.ts +0 -1
  303. package/isSNILS/index.js +0 -1
  304. package/isSNILS/isSNILS.d.ts +0 -10
  305. package/types.d.ts +0 -4
  306. package/utils/isEmptyString.d.ts +0 -4
  307. package/utils/isEmptyString.js +0 -6
  308. package/yupAdapter/index.d.ts +0 -1
  309. package/yupAdapter/index.js +0 -1
  310. package/yupAdapter/yupAdapter.d.ts +0 -8
  311. package/yupAdapter/yupAdapter.js +0 -11
  312. /package/{compose → core/compose}/index.d.ts +0 -0
  313. /package/{compose → core/compose}/index.js +0 -0
  314. /package/{types.js → core/context/types.js} +0 -0
  315. /package/{createRule → core/rule/createRule}/index.d.ts +0 -0
  316. /package/{createRule → core/rule/createRule}/index.js +0 -0
package/any/any.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @description Выключает любые проверки
3
+ * @example
4
+ * ```ts
5
+ * type Values = { name: string; surname?: string };
6
+ *
7
+ * const validate = object<Values>({ name: any(), surname: any() });
8
+ *
9
+ * // undefined
10
+ * validate({});
11
+ * ```
12
+ */
13
+ export declare const any: <TValues>() => (value: unknown, prevCtx?: Readonly<{
14
+ global: Readonly<{
15
+ values: TValues;
16
+ overrides: Readonly<{
17
+ objectIsPartial: boolean;
18
+ }>;
19
+ }>;
20
+ createError: ({ message, code }: import("../core").ErrorInfo) => import("../core").ValidationSimpleError<{}>;
21
+ }> | undefined) => import("../core").ValidationResult;
package/any/any.js ADDED
@@ -0,0 +1,14 @@
1
+ import { createRule } from '../core';
2
+ /**
3
+ * @description Выключает любые проверки
4
+ * @example
5
+ * ```ts
6
+ * type Values = { name: string; surname?: string };
7
+ *
8
+ * const validate = object<Values>({ name: any(), surname: any() });
9
+ *
10
+ * // undefined
11
+ * validate({});
12
+ * ```
13
+ */
14
+ export const any = () => createRule(() => undefined);
package/any/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './any';
package/any/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from './any';
@@ -0,0 +1,15 @@
1
+ import { ValidationRule } from '../core';
2
+ /**
3
+ * @description Guard для массива. Проверяет value на соответствие типу array
4
+ * @param rules - правила валидаций, применяющиеся ко всему массиву
5
+ * @example
6
+ * ```ts
7
+ * const value = ['Vasya', 'Ivan'];
8
+ *
9
+ * const validateArray = array(min(1), arrayItem(string()));
10
+ *
11
+ * // undefined
12
+ * validateArray(value);
13
+ * ```
14
+ */
15
+ export declare const array: <TItem extends unknown, TValues = unknown>(...rules: ValidationRule<TItem[], TValues>[]) => import("../core").Guard<unknown[], TValues, {}>;
package/array/array.js ADDED
@@ -0,0 +1,21 @@
1
+ import { compose, createGuard } from '../core';
2
+ import { ARRAY_TYPE_ERROR_INFO } from './constants';
3
+ /**
4
+ * @description Guard для массива. Проверяет value на соответствие типу array
5
+ * @param rules - правила валидаций, применяющиеся ко всему массиву
6
+ * @example
7
+ * ```ts
8
+ * const value = ['Vasya', 'Ivan'];
9
+ *
10
+ * const validateArray = array(min(1), arrayItem(string()));
11
+ *
12
+ * // undefined
13
+ * validateArray(value);
14
+ * ```
15
+ */
16
+ export const array = (...rules) => createGuard((value, ctx, { typeErrorMessage }) => {
17
+ if (!Array.isArray(value)) {
18
+ return ctx.createError(Object.assign(Object.assign({}, ARRAY_TYPE_ERROR_INFO), { message: typeErrorMessage || ARRAY_TYPE_ERROR_INFO.message }));
19
+ }
20
+ return compose(...rules)(value, ctx);
21
+ });
@@ -0,0 +1,2 @@
1
+ import { ErrorInfo } from '../core';
2
+ export declare const ARRAY_TYPE_ERROR_INFO: ErrorInfo;
@@ -0,0 +1,5 @@
1
+ import { createErrorCode } from '../core';
2
+ export const ARRAY_TYPE_ERROR_INFO = {
3
+ code: createErrorCode('array'),
4
+ message: 'Не является массивом',
5
+ };
@@ -0,0 +1,2 @@
1
+ export * from './array';
2
+ export * from './constants';
package/array/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './array';
2
+ export * from './constants';
@@ -0,0 +1,35 @@
1
+ import { ValidationRule } from '../core';
2
+ /**
3
+ * @description Применяет правила к каждому элементу массива
4
+ * @param rules - правила валидации, которое применится к каждому элементу массива
5
+ * @example
6
+ * ```ts
7
+ * type Item = {
8
+ * name: string;
9
+ * age?: number;
10
+ * };
11
+ *
12
+ * const values: Values = [{ name: 'Vasya' }, { name: 'Vasya', age: 22 }];
13
+ *
14
+ * const validateArray = array(
15
+ * arrayItem(
16
+ * object<Item>({
17
+ * name: string(min(2)),
18
+ * age: optional(number()),
19
+ * }),
20
+ * ),
21
+ * );
22
+ *
23
+ * // undefined
24
+ * validateArray(values);
25
+ * ```
26
+ */
27
+ export declare const arrayItem: <TItem extends unknown, TValues = unknown>(...rules: ValidationRule<TItem, TValues>[]) => (value: TItem[], prevCtx?: Readonly<{
28
+ global: Readonly<{
29
+ values: TValues;
30
+ overrides: Readonly<{
31
+ objectIsPartial: boolean;
32
+ }>;
33
+ }>;
34
+ createError: ({ message, code }: import("../core").ErrorInfo) => import("../core").ValidationSimpleError<{}>;
35
+ }> | undefined) => import("../core").ValidationResult;
@@ -0,0 +1,33 @@
1
+ import { compose, createArrayError, createRule, } from '../core';
2
+ /**
3
+ * @description Применяет правила к каждому элементу массива
4
+ * @param rules - правила валидации, которое применится к каждому элементу массива
5
+ * @example
6
+ * ```ts
7
+ * type Item = {
8
+ * name: string;
9
+ * age?: number;
10
+ * };
11
+ *
12
+ * const values: Values = [{ name: 'Vasya' }, { name: 'Vasya', age: 22 }];
13
+ *
14
+ * const validateArray = array(
15
+ * arrayItem(
16
+ * object<Item>({
17
+ * name: string(min(2)),
18
+ * age: optional(number()),
19
+ * }),
20
+ * ),
21
+ * );
22
+ *
23
+ * // undefined
24
+ * validateArray(values);
25
+ * ```
26
+ */
27
+ export const arrayItem = (...rules) => createRule((array, ctx) => {
28
+ const validationItemsResult = array.map((item) => compose(...rules)(item, ctx));
29
+ if (validationItemsResult.some((result) => result !== undefined)) {
30
+ return createArrayError(validationItemsResult);
31
+ }
32
+ return undefined;
33
+ });
@@ -0,0 +1 @@
1
+ export * from './arrayItem';
@@ -0,0 +1 @@
1
+ export * from './arrayItem';
@@ -0,0 +1,13 @@
1
+ import { ValidationRule } from '../core';
2
+ /**
3
+ * @description Guard для boolean. Проверяет значение на тип boolean
4
+ * @param rules - правила, валидирующие boolean или unknown value
5
+ * @example
6
+ * ```ts
7
+ * const validate = boolean();
8
+ *
9
+ * // undefined
10
+ * validate(true);
11
+ * ```
12
+ */
13
+ export declare const boolean: <TValues>(...rules: ValidationRule<boolean, TValues>[]) => import("../core").Guard<boolean, TValues, {}>;
@@ -0,0 +1,19 @@
1
+ import { compose, createGuard } from '../core';
2
+ import { BOOLEAN_TYPE_ERROR_INFO } from './constants';
3
+ /**
4
+ * @description Guard для boolean. Проверяет значение на тип boolean
5
+ * @param rules - правила, валидирующие boolean или unknown value
6
+ * @example
7
+ * ```ts
8
+ * const validate = boolean();
9
+ *
10
+ * // undefined
11
+ * validate(true);
12
+ * ```
13
+ */
14
+ export const boolean = (...rules) => createGuard((value, ctx, { typeErrorMessage }) => {
15
+ if (typeof value !== 'boolean') {
16
+ return ctx.createError(Object.assign(Object.assign({}, BOOLEAN_TYPE_ERROR_INFO), { message: typeErrorMessage || BOOLEAN_TYPE_ERROR_INFO.message }));
17
+ }
18
+ return compose(...rules)(value, ctx);
19
+ });
@@ -0,0 +1,2 @@
1
+ import { ErrorInfo } from '../core';
2
+ export declare const BOOLEAN_TYPE_ERROR_INFO: ErrorInfo;
@@ -0,0 +1,5 @@
1
+ import { createErrorCode } from '../core';
2
+ export const BOOLEAN_TYPE_ERROR_INFO = {
3
+ code: createErrorCode('boolean-type'),
4
+ message: 'Не boolean',
5
+ };
@@ -0,0 +1,2 @@
1
+ export * from './boolean';
2
+ export * from './constants';
@@ -0,0 +1,2 @@
1
+ export * from './boolean';
2
+ export * from './constants';
@@ -0,0 +1,6 @@
1
+ import { IndependentValidationRule, ValidationRule } from '../rule';
2
+ /**
3
+ * @description Объединяет переданные правила в цепочку правил, останавливает выполнение цепочки, если появилась ошибка. Выполняет правила слева направо
4
+ * @example compose(min(), max());
5
+ */
6
+ export declare const compose: <ValidationType, TValues>(...rules: (IndependentValidationRule<ValidationType, TValues> | ValidationRule<ValidationType, TValues>)[]) => IndependentValidationRule<ValidationType, TValues>;
@@ -1,6 +1,5 @@
1
1
  /**
2
2
  * @description Объединяет переданные правила в цепочку правил, останавливает выполнение цепочки, если появилась ошибка. Выполняет правила слева направо
3
- * @example compose(isRequired(), isEmail());
4
- * @example compose(isRequired(), compose(isIncludeDot(), isIncludeComma()));
3
+ * @example compose(min(), max());
5
4
  */
6
- export const compose = (...rules) => (value) => rules.reduce((result, rule) => result || rule(value), undefined);
5
+ export const compose = (...rules) => (value, ctx) => rules.reduce((result, rule) => result || rule(value, ctx), undefined);
@@ -0,0 +1,8 @@
1
+ import { ValidationContext } from '../types';
2
+ import { ValidationTypes } from '../../types';
3
+ /**
4
+ * @description Создает context валидации. Используется внутри фабрик guard и rule
5
+ * @default по-дефолту сбрасывает все флаги в false
6
+ */
7
+ export declare function createContext<Value extends ValidationTypes>(prevCtx: ValidationContext<Value> | undefined, value: Value): ValidationContext<Value>;
8
+ export declare function createContext<Value extends ValidationTypes, Values>(prevCtx: ValidationContext<Values> | undefined, value: Value): ValidationContext<Values>;
@@ -0,0 +1,15 @@
1
+ import { createSimpleError } from '../../errors';
2
+ export function createContext(prevCtx, value) {
3
+ if (prevCtx) {
4
+ return prevCtx;
5
+ }
6
+ return {
7
+ global: {
8
+ values: value,
9
+ overrides: {
10
+ objectIsPartial: false,
11
+ },
12
+ },
13
+ createError: createSimpleError,
14
+ };
15
+ }
@@ -0,0 +1 @@
1
+ export * from './createContext';
@@ -0,0 +1 @@
1
+ export * from './createContext';
@@ -0,0 +1,2 @@
1
+ export * from './createContext';
2
+ export * from './types';
@@ -0,0 +1,2 @@
1
+ export * from './createContext';
2
+ export * from './types';
@@ -0,0 +1,28 @@
1
+ import { createSimpleError } from '../errors';
2
+ /**
3
+ * @description Контекст, который доступен в каждом правиле
4
+ */
5
+ export type ValidationContext<TValues> = Readonly<{
6
+ /**
7
+ * @description Глобальные значения, идущие от самого верхнего правила к самому нижнему
8
+ */
9
+ global: Readonly<{
10
+ /**
11
+ * @description Значения, которые валидируется guard самого высоко порядка
12
+ */
13
+ values: TValues;
14
+ /**
15
+ * @description Глобальные переопределения (сквозные для всех правил)
16
+ */
17
+ overrides: Readonly<{
18
+ /**
19
+ * @description Делает для всех объектов в схеме все свойства необязательными
20
+ */
21
+ objectIsPartial: boolean;
22
+ }>;
23
+ }>;
24
+ /**
25
+ * @description Фабрика ошибок. Возвращает новую ошибку валидации
26
+ */
27
+ createError: typeof createSimpleError;
28
+ }>;
@@ -0,0 +1,18 @@
1
+ import { ValidationResult } from '../../types';
2
+ import { ValidationErrorData, ValidationSimpleError } from '../SimpleError';
3
+ /**
4
+ * @description Доп. поля для ошибок элементов массива
5
+ */
6
+ export type ValidationArrayErrorCause = {
7
+ /**
8
+ * @description Массив ошибок элементов валидируемого массива.
9
+ * Индекс errorArray соответвует индексу валидируемого элемента массива
10
+ */
11
+ errorArray: Array<ValidationResult>;
12
+ };
13
+ /**
14
+ * @description Array ошибок для массива
15
+ */
16
+ export declare class ValidationArrayError extends ValidationSimpleError<ValidationArrayErrorCause> {
17
+ constructor(message: string, data: ValidationErrorData<ValidationArrayErrorCause>);
18
+ }
@@ -0,0 +1,10 @@
1
+ import { ValidationSimpleError } from '../SimpleError';
2
+ /**
3
+ * @description Array ошибок для массива
4
+ */
5
+ export class ValidationArrayError extends ValidationSimpleError {
6
+ constructor(message, data) {
7
+ super(message, data);
8
+ this.cause = data.cause;
9
+ }
10
+ }
@@ -0,0 +1,5 @@
1
+ import { ValidationArrayError, ValidationArrayErrorCause } from '../ArrayError';
2
+ /**
3
+ * @description Создает array ошибок. Ошибка предназначена для результата валидации массива
4
+ */
5
+ export declare const createArrayError: (errorArray: ValidationArrayErrorCause['errorArray']) => ValidationArrayError;
@@ -0,0 +1,11 @@
1
+ import { ValidationArrayError } from '../ArrayError';
2
+ /**
3
+ * @description Создает array ошибок. Ошибка предназначена для результата валидации массива
4
+ */
5
+ export const createArrayError = (errorArray) => {
6
+ const firstErrorIndex = errorArray.findIndex((error) => Boolean(error));
7
+ const firstError = errorArray[firstErrorIndex];
8
+ return new ValidationArrayError(`Ошибка в item[${firstErrorIndex}]: ${firstError.message}`, {
9
+ cause: { errorArray, code: firstError.cause.code },
10
+ });
11
+ };
@@ -0,0 +1 @@
1
+ export * from './createArrayError';
@@ -0,0 +1 @@
1
+ export * from './createArrayError';
@@ -0,0 +1,2 @@
1
+ export * from './ArrayError';
2
+ export * from './createArrayError';
@@ -0,0 +1,2 @@
1
+ export * from './ArrayError';
2
+ export * from './createArrayError';
@@ -0,0 +1,21 @@
1
+ import { ValidationErrorData, ValidationSimpleError } from '../SimpleError';
2
+ import { ValidationResult } from '../../types';
3
+ /**
4
+ * @description Map, которое содержит результат валидации свойств
5
+ */
6
+ export type ErrorMap = Record<string, ValidationResult>;
7
+ /**
8
+ * @description Доп. поля для ошибки в объекте
9
+ */
10
+ export type ValidationObjectErrorCause = {
11
+ /**
12
+ * @description Map, которое содержит результат валидации свойств
13
+ */
14
+ errorMap: Record<string, ValidationResult>;
15
+ };
16
+ /**
17
+ * @description Map ошибок для объекта
18
+ */
19
+ export declare class ValidationErrorMap extends ValidationSimpleError<ValidationObjectErrorCause> {
20
+ constructor(message: string, data: ValidationErrorData<ValidationObjectErrorCause>);
21
+ }
@@ -0,0 +1,10 @@
1
+ import { ValidationSimpleError } from '../SimpleError';
2
+ /**
3
+ * @description Map ошибок для объекта
4
+ */
5
+ export class ValidationErrorMap extends ValidationSimpleError {
6
+ constructor(message, data) {
7
+ super(message, data);
8
+ this.cause = data.cause;
9
+ }
10
+ }
@@ -0,0 +1,5 @@
1
+ import { ValidationErrorMap, ValidationObjectErrorCause } from '../ErrorMap';
2
+ /**
3
+ * @description Создает map ошибок валидаций. Ошибка предназначена для генерации результата валидации объекта
4
+ */
5
+ export declare const createErrorMap: (errorMap: ValidationObjectErrorCause['errorMap']) => ValidationErrorMap;
@@ -0,0 +1,10 @@
1
+ import { ValidationErrorMap } from '../ErrorMap';
2
+ /**
3
+ * @description Создает map ошибок валидаций. Ошибка предназначена для генерации результата валидации объекта
4
+ */
5
+ export const createErrorMap = (errorMap) => {
6
+ const [firstErrorPath, firstError] = Object.entries(errorMap).find(([, error]) => Boolean(error));
7
+ return new ValidationErrorMap(`Ошибка в свойстве ${firstErrorPath}: ${firstError.message}`, {
8
+ cause: { errorMap, code: firstError.cause.code },
9
+ });
10
+ };
@@ -0,0 +1 @@
1
+ export * from './createErrorMap';
@@ -0,0 +1 @@
1
+ export * from './createErrorMap';
@@ -0,0 +1,2 @@
1
+ export * from './ErrorMap';
2
+ export * from './createErrorMap';
@@ -0,0 +1,2 @@
1
+ export * from './ErrorMap';
2
+ export * from './createErrorMap';
@@ -0,0 +1,16 @@
1
+ import { ErrorCode } from '../types';
2
+ /**
3
+ * @description Причина ошибки валидации
4
+ */
5
+ export type ValidationErrorData<AddCause extends Record<string, unknown>> = {
6
+ cause: AddCause & {
7
+ code: ErrorCode;
8
+ };
9
+ };
10
+ /**
11
+ * @description Простая ошибка правил валидации. Не имеет вложенных ошибок
12
+ */
13
+ export declare class ValidationSimpleError<AddCause extends Record<string, unknown> = {}> extends Error {
14
+ cause: ValidationErrorData<AddCause>['cause'];
15
+ constructor(message: string, data: ValidationErrorData<AddCause>);
16
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description Простая ошибка правил валидации. Не имеет вложенных ошибок
3
+ */
4
+ export class ValidationSimpleError extends Error {
5
+ constructor(message, data) {
6
+ super(message);
7
+ this.cause = data.cause;
8
+ }
9
+ }
@@ -0,0 +1,6 @@
1
+ import { ValidationSimpleError } from '../SimpleError';
2
+ import { ErrorInfo } from '../../types';
3
+ /**
4
+ * @description Создает простую ошибки валидации. Используется в обычных rules
5
+ */
6
+ export declare const createSimpleError: ({ message, code }: ErrorInfo) => ValidationSimpleError<{}>;
@@ -0,0 +1,5 @@
1
+ import { ValidationSimpleError } from '../SimpleError';
2
+ /**
3
+ * @description Создает простую ошибки валидации. Используется в обычных rules
4
+ */
5
+ export const createSimpleError = ({ message, code }) => new ValidationSimpleError(message, { cause: { code } });
@@ -0,0 +1 @@
1
+ export * from './createSimpleError';
@@ -0,0 +1 @@
1
+ export * from './createSimpleError';
@@ -0,0 +1,2 @@
1
+ export * from './SimpleError';
2
+ export * from './createSimpleError';
@@ -0,0 +1,2 @@
1
+ export * from './SimpleError';
2
+ export * from './createSimpleError';
@@ -0,0 +1,5 @@
1
+ import { ErrorCode } from '../types';
2
+ /**
3
+ * @description Создает уникальный код ошибки
4
+ */
5
+ export declare const createErrorCode: (errorName: string) => ErrorCode;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @description Создает уникальный код ошибки
3
+ */
4
+ export const createErrorCode = (errorName) => `astral-validations-${errorName}`;
@@ -0,0 +1 @@
1
+ export * from './createErrorCode';
@@ -0,0 +1 @@
1
+ export * from './createErrorCode';
@@ -0,0 +1,5 @@
1
+ export * from './SimpleError';
2
+ export * from './ArrayError';
3
+ export * from './ErrorMap';
4
+ export * from './types';
5
+ export * from './createErrorCode';
@@ -0,0 +1,5 @@
1
+ export * from './SimpleError';
2
+ export * from './ArrayError';
3
+ export * from './ErrorMap';
4
+ export * from './types';
5
+ export * from './createErrorCode';
@@ -0,0 +1,18 @@
1
+ import { ValidationErrorMap } from './ErrorMap';
2
+ import { ValidationSimpleError } from './SimpleError';
3
+ import { ValidationArrayError } from './ArrayError';
4
+ /**
5
+ * @description Уникальный код ошибки валидации
6
+ */
7
+ export type ErrorCode = string;
8
+ /**
9
+ * @description Информация, которая есть для каждой ошибки
10
+ */
11
+ export type ErrorInfo = {
12
+ code: ErrorCode;
13
+ message: string;
14
+ };
15
+ /**
16
+ * @description Union возможных ошибок
17
+ */
18
+ export type ValidationError = ValidationSimpleError | ValidationArrayError | ValidationErrorMap;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,54 @@
1
+ import { ValidationResult, ValidationTypes } from '../../types';
2
+ import { ValidationContext } from '../../context';
3
+ type DefOptions<AddDefOptions extends Record<string, unknown>> = Partial<AddDefOptions> & {
4
+ /**
5
+ * @description Переопределяет дефолтное сообщения ошибки для required
6
+ * @example string.define({ requiredMessage: 'ИНН не может быть пустым' })(inn())
7
+ */
8
+ requiredErrorMessage?: string;
9
+ /**
10
+ * @description Переопределяет сообщение об ошибке типа
11
+ * @example string.define({ typeErrorMessage: 'ИНН не может быть числом' })(inn())
12
+ */
13
+ typeErrorMessage?: string;
14
+ /**
15
+ * @description Позволяет выключать проверку на required
16
+ * @default false
17
+ */
18
+ isOptional?: boolean;
19
+ };
20
+ type GuardValue<ValidationType> = ValidationType | undefined | null | unknown;
21
+ /**
22
+ * @description Интерфейс функции guard, которая в прототипе содержит метод define
23
+ */
24
+ export interface Guard<ValidationType extends ValidationTypes, TValues, AddDefOptions extends Record<string, unknown> = {}> {
25
+ (value: GuardValue<ValidationType>, ctx?: ValidationContext<TValues>): ValidationResult;
26
+ /**
27
+ * @description Функция для создания нового guard с переопределенными дефолтными параметрами. Возвращает новый guard
28
+ * @param options - параметры, позволяющие переопределить дефолтные настройки guard
29
+ * @example string.define({ requiredMessage: 'ИНН не может быть пустым' })(inn())
30
+ */
31
+ define(options: DefOptions<AddDefOptions>): Guard<ValidationType, TValues, AddDefOptions>;
32
+ }
33
+ /**
34
+ * @description Функция, которая позволяет определять частную логику для guard
35
+ */
36
+ type GuardExecutor<TValues, AddDefOptions extends Record<string, unknown>> = (value: unknown, ctx: ValidationContext<TValues>, defOptions: DefOptions<AddDefOptions>) => ValidationResult;
37
+ /**
38
+ * @description Создает guard. Guard - функция, проверяющая тип значения
39
+ * По-дефолту проверяет value на required. Для выключения required необходимо использовать optional().
40
+ * После первого вызова guard в прототипу функции становится доступен метод define, который позволяет переопределить дефолтное поведение guard (например, изменить текст для required правила)
41
+ * @example
42
+ * ```ts
43
+ * const string = <TValues>(...rules: ValidationRule<string, TValues>[]) =>
44
+ * createGuard<string, TValues>((value, ctx) => {
45
+ * if (typeof value !== 'string') {
46
+ * return ctx.createError({ code: 'custom error', message: 'Не строка' });
47
+ * }
48
+ *
49
+ * return compose<string, TValues>(...rules)(value, ctx);
50
+ * });
51
+ * ```
52
+ */
53
+ export declare const createGuard: <ValidationType extends unknown, TValues, AddDefOptions extends Record<string, unknown> = {}>(executeGuard: GuardExecutor<TValues, AddDefOptions>) => Guard<ValidationType, TValues, AddDefOptions>;
54
+ export {};