@acorex/core 16.0.2 → 17.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. package/common/README.md +3 -0
  2. package/common/countries/countries.data.d.ts +2 -0
  3. package/common/countries/country.d.ts +13 -0
  4. package/common/index.d.ts +2 -0
  5. package/config/README.md +3 -0
  6. package/config/index.d.ts +2 -0
  7. package/config/lib/configs.d.ts +6 -0
  8. package/config/lib/configs.service.d.ts +12 -0
  9. package/date-time/README.md +3 -0
  10. package/date-time/index.d.ts +10 -0
  11. package/date-time/lib/calendar.service.d.ts +27 -0
  12. package/date-time/lib/dateTime.config.d.ts +12 -0
  13. package/date-time/lib/datetime.class.d.ts +138 -0
  14. package/date-time/lib/datetime.module.d.ts +8 -0
  15. package/date-time/lib/datetime.pipe.d.ts +12 -0
  16. package/date-time/lib/formatters/datetime-formatter.d.ts +19 -0
  17. package/date-time/lib/formatters/timeleft-formatter.d.ts +16 -0
  18. package/date-time/lib/georgian.calendar.d.ts +21 -0
  19. package/date-time/lib/holidays.loader.d.ts +21 -0
  20. package/date-time/lib/jalali.calendar.d.ts +40 -0
  21. package/esm2022/common/acorex-core-common.mjs +5 -0
  22. package/esm2022/common/countries/countries.data.mjs +2625 -0
  23. package/esm2022/common/countries/country.mjs +2 -0
  24. package/esm2022/common/index.mjs +3 -0
  25. package/esm2022/config/acorex-core-config.mjs +5 -0
  26. package/esm2022/config/index.mjs +3 -0
  27. package/esm2022/config/lib/configs.mjs +7 -0
  28. package/esm2022/config/lib/configs.service.mjs +27 -0
  29. package/esm2022/date-time/acorex-core-date-time.mjs +5 -0
  30. package/esm2022/date-time/index.mjs +11 -0
  31. package/esm2022/date-time/lib/calendar.service.mjs +100 -0
  32. package/esm2022/date-time/lib/dateTime.config.mjs +50 -0
  33. package/esm2022/date-time/lib/datetime.class.mjs +337 -0
  34. package/esm2022/date-time/lib/datetime.module.mjs +27 -0
  35. package/esm2022/date-time/lib/datetime.pipe.mjs +29 -0
  36. package/esm2022/date-time/lib/formatters/datetime-formatter.mjs +32 -0
  37. package/esm2022/date-time/lib/formatters/timeleft-formatter.mjs +91 -0
  38. package/esm2022/date-time/lib/georgian.calendar.mjs +203 -0
  39. package/esm2022/date-time/lib/holidays.loader.mjs +13 -0
  40. package/esm2022/date-time/lib/jalali.calendar.mjs +440 -0
  41. package/esm2022/events/acorex-core-events.mjs +5 -0
  42. package/esm2022/events/index.mjs +3 -0
  43. package/esm2022/events/lib/event.service.mjs +43 -0
  44. package/esm2022/events/lib/event.type.mjs +6 -0
  45. package/esm2022/file/acorex-core-file.mjs +5 -0
  46. package/esm2022/file/index.mjs +7 -0
  47. package/esm2022/file/lib/file-download-ref.class.mjs +12 -0
  48. package/esm2022/file/lib/file-download-result.class.mjs +45 -0
  49. package/esm2022/file/lib/file-size-formatter.mjs +24 -0
  50. package/esm2022/file/lib/file-upload-ref.class.mjs +12 -0
  51. package/esm2022/file/lib/file.module.mjs +20 -0
  52. package/esm2022/file/lib/file.service.mjs +103 -0
  53. package/esm2022/format/acorex-core-format.mjs +5 -0
  54. package/esm2022/format/index.mjs +8 -0
  55. package/esm2022/format/lib/format.config.mjs +3 -0
  56. package/esm2022/format/lib/format.module.mjs +64 -0
  57. package/esm2022/format/lib/format.pipe.mjs +37 -0
  58. package/esm2022/format/lib/format.service.mjs +95 -0
  59. package/esm2022/format/lib/format.types.mjs +2 -0
  60. package/esm2022/format/lib/formatters/number-formatter.mjs +74 -0
  61. package/esm2022/format/lib/formatters/string-formatter.mjs +15 -0
  62. package/esm2022/image/acorex-core-image.mjs +5 -0
  63. package/esm2022/image/index.mjs +2 -0
  64. package/esm2022/image/lib/image.service.mjs +43 -0
  65. package/esm2022/index.mjs +2 -44
  66. package/esm2022/memorize/acorex-core-memorize.mjs +5 -0
  67. package/esm2022/memorize/index.mjs +2 -0
  68. package/esm2022/memorize/lib/memorize.decorator.mjs +19 -0
  69. package/esm2022/pipes/acorex-core-pipes.mjs +5 -0
  70. package/esm2022/pipes/index.mjs +2 -0
  71. package/esm2022/pipes/lib/safe/safe.pipe.mjs +38 -0
  72. package/esm2022/platform/acorex-core-platform.mjs +5 -0
  73. package/esm2022/platform/index.mjs +2 -0
  74. package/esm2022/platform/lib/platform.service.mjs +225 -0
  75. package/esm2022/storage/acorex-core-storage.mjs +5 -0
  76. package/esm2022/storage/cookie-storage.service.mjs +202 -0
  77. package/esm2022/storage/index.mjs +5 -0
  78. package/esm2022/storage/local-storage.service.mjs +58 -0
  79. package/esm2022/storage/session-storage.service.mjs +22 -0
  80. package/esm2022/storage/storage.interface.mjs +2 -0
  81. package/esm2022/translation/acorex-core-translation.mjs +5 -0
  82. package/esm2022/translation/index.mjs +9 -0
  83. package/esm2022/translation/lib/translation-scope.resolver.mjs +11 -0
  84. package/esm2022/translation/lib/translation.config.mjs +20 -0
  85. package/esm2022/translation/lib/translation.loader.mjs +14 -0
  86. package/esm2022/translation/lib/translation.module.mjs +40 -0
  87. package/esm2022/translation/lib/translation.service.mjs +173 -0
  88. package/esm2022/translation/lib/translation.types.mjs +2 -0
  89. package/esm2022/translation/lib/translator.directive.mjs +28 -0
  90. package/esm2022/translation/lib/translator.pipe.mjs +23 -0
  91. package/esm2022/types/acorex-core-types.mjs +5 -0
  92. package/esm2022/types/index.mjs +2 -0
  93. package/esm2022/utils/acorex-core-utils.mjs +5 -0
  94. package/esm2022/utils/index.mjs +6 -0
  95. package/esm2022/utils/lib/auto-unsubscribe.mjs +36 -0
  96. package/esm2022/utils/lib/color-util.mjs +111 -0
  97. package/esm2022/utils/lib/drawing-util.mjs +35 -0
  98. package/esm2022/utils/lib/html-util.mjs +39 -0
  99. package/esm2022/utils/lib/string-util.mjs +19 -0
  100. package/esm2022/validation/acorex-core-validation.mjs +5 -0
  101. package/esm2022/validation/index.mjs +18 -0
  102. package/esm2022/validation/lib/rules/between-rule.mjs +31 -0
  103. package/esm2022/validation/lib/rules/callback-rule.mjs +29 -0
  104. package/esm2022/validation/lib/rules/equal-rule.mjs +26 -0
  105. package/esm2022/validation/lib/rules/greater-than.mjs +29 -0
  106. package/esm2022/validation/lib/rules/length-rule.mjs +26 -0
  107. package/esm2022/validation/lib/rules/less-than-rule.mjs +29 -0
  108. package/esm2022/validation/lib/rules/maxlength-rule.mjs +27 -0
  109. package/esm2022/validation/lib/rules/minlength-rule.mjs +26 -0
  110. package/esm2022/validation/lib/rules/regex-rule.mjs +49 -0
  111. package/esm2022/validation/lib/rules/required-rule.mjs +36 -0
  112. package/esm2022/validation/lib/validation.config.mjs +33 -0
  113. package/esm2022/validation/lib/validation.module.mjs +84 -0
  114. package/esm2022/validation/lib/validation.service.mjs +98 -0
  115. package/esm2022/validation/lib/validation.types.mjs +3 -0
  116. package/events/README.md +3 -0
  117. package/events/index.d.ts +2 -0
  118. package/{lib/services → events/lib}/event.service.d.ts +8 -0
  119. package/events/lib/event.type.d.ts +5 -0
  120. package/fesm2022/acorex-core-common.mjs +2631 -0
  121. package/fesm2022/acorex-core-common.mjs.map +1 -0
  122. package/fesm2022/acorex-core-config.mjs +39 -0
  123. package/fesm2022/acorex-core-config.mjs.map +1 -0
  124. package/fesm2022/acorex-core-date-time.mjs +1305 -0
  125. package/fesm2022/acorex-core-date-time.mjs.map +1 -0
  126. package/fesm2022/acorex-core-events.mjs +56 -0
  127. package/fesm2022/acorex-core-events.mjs.map +1 -0
  128. package/fesm2022/acorex-core-file.mjs +214 -0
  129. package/fesm2022/acorex-core-file.mjs.map +1 -0
  130. package/fesm2022/acorex-core-format.mjs +282 -0
  131. package/fesm2022/acorex-core-format.mjs.map +1 -0
  132. package/fesm2022/acorex-core-image.mjs +50 -0
  133. package/fesm2022/acorex-core-image.mjs.map +1 -0
  134. package/fesm2022/acorex-core-memorize.mjs +26 -0
  135. package/fesm2022/acorex-core-memorize.mjs.map +1 -0
  136. package/fesm2022/acorex-core-pipes.mjs +44 -0
  137. package/fesm2022/acorex-core-pipes.mjs.map +1 -0
  138. package/fesm2022/acorex-core-platform.mjs +232 -0
  139. package/fesm2022/acorex-core-platform.mjs.map +1 -0
  140. package/fesm2022/acorex-core-storage.mjs +285 -0
  141. package/fesm2022/acorex-core-storage.mjs.map +1 -0
  142. package/fesm2022/acorex-core-translation.mjs +293 -0
  143. package/fesm2022/acorex-core-translation.mjs.map +1 -0
  144. package/fesm2022/acorex-core-types.mjs +6 -0
  145. package/fesm2022/acorex-core-types.mjs.map +1 -0
  146. package/fesm2022/acorex-core-utils.mjs +247 -0
  147. package/fesm2022/acorex-core-utils.mjs.map +1 -0
  148. package/fesm2022/acorex-core-validation.mjs +488 -0
  149. package/fesm2022/acorex-core-validation.mjs.map +1 -0
  150. package/fesm2022/acorex-core.mjs +2 -2309
  151. package/fesm2022/acorex-core.mjs.map +1 -1
  152. package/file/README.md +3 -0
  153. package/file/index.d.ts +6 -0
  154. package/file/lib/file-download-ref.class.d.ts +6 -0
  155. package/file/lib/file-download-result.class.d.ts +8 -0
  156. package/file/lib/file-size-formatter.d.ts +16 -0
  157. package/file/lib/file-upload-ref.class.d.ts +5 -0
  158. package/file/lib/file.module.d.ts +7 -0
  159. package/file/lib/file.service.d.ts +18 -0
  160. package/format/README.md +3 -0
  161. package/format/index.d.ts +7 -0
  162. package/format/lib/format.config.d.ts +5 -0
  163. package/format/lib/format.module.d.ts +18 -0
  164. package/format/lib/format.pipe.d.ts +12 -0
  165. package/format/lib/format.service.d.ts +43 -0
  166. package/format/lib/format.types.d.ts +4 -0
  167. package/format/lib/formatters/number-formatter.d.ts +23 -0
  168. package/format/lib/formatters/string-formatter.d.ts +14 -0
  169. package/image/README.md +3 -0
  170. package/image/index.d.ts +1 -0
  171. package/image/lib/image.service.d.ts +11 -0
  172. package/index.d.ts +1 -43
  173. package/memorize/README.md +3 -0
  174. package/memorize/index.d.ts +1 -0
  175. package/memorize/lib/memorize.decorator.d.ts +1 -0
  176. package/package.json +98 -5
  177. package/pipes/README.md +3 -0
  178. package/pipes/index.d.ts +1 -0
  179. package/pipes/lib/safe/safe.pipe.d.ts +10 -0
  180. package/platform/README.md +3 -0
  181. package/platform/index.d.ts +1 -0
  182. package/{lib/platform → platform/lib}/platform.service.d.ts +14 -6
  183. package/storage/README.md +3 -0
  184. package/storage/cookie-storage.service.d.ts +104 -0
  185. package/storage/index.d.ts +4 -0
  186. package/storage/local-storage.service.d.ts +16 -0
  187. package/storage/session-storage.service.d.ts +10 -0
  188. package/storage/storage.interface.d.ts +14 -0
  189. package/translation/README.md +3 -0
  190. package/translation/index.d.ts +8 -0
  191. package/translation/lib/translation-scope.resolver.d.ts +2 -0
  192. package/translation/lib/translation.config.d.ts +14 -0
  193. package/translation/lib/translation.loader.d.ts +14 -0
  194. package/translation/lib/translation.module.d.ts +8 -0
  195. package/translation/lib/translation.service.d.ts +31 -0
  196. package/translation/lib/translation.types.d.ts +10 -0
  197. package/translation/lib/translator.directive.d.ts +12 -0
  198. package/translation/lib/translator.pipe.d.ts +12 -0
  199. package/types/README.md +3 -0
  200. package/types/index.d.ts +2 -0
  201. package/utils/README.md +3 -0
  202. package/utils/index.d.ts +5 -0
  203. package/utils/lib/auto-unsubscribe.d.ts +12 -0
  204. package/utils/lib/color-util.d.ts +24 -0
  205. package/utils/lib/drawing-util.d.ts +18 -0
  206. package/utils/lib/html-util.d.ts +5 -0
  207. package/utils/lib/string-util.d.ts +6 -0
  208. package/validation/README.md +3 -0
  209. package/validation/index.d.ts +14 -0
  210. package/validation/lib/rules/between-rule.d.ts +18 -0
  211. package/validation/lib/rules/callback-rule.d.ts +23 -0
  212. package/validation/lib/rules/equal-rule.d.ts +17 -0
  213. package/validation/lib/rules/greater-than.d.ts +17 -0
  214. package/validation/lib/rules/length-rule.d.ts +17 -0
  215. package/validation/lib/rules/less-than-rule.d.ts +17 -0
  216. package/validation/lib/rules/maxlength-rule.d.ts +16 -0
  217. package/validation/lib/rules/minlength-rule.d.ts +16 -0
  218. package/validation/lib/rules/regex-rule.d.ts +17 -0
  219. package/validation/lib/rules/required-rule.d.ts +16 -0
  220. package/validation/lib/validation.config.d.ts +15 -0
  221. package/validation/lib/validation.module.d.ts +17 -0
  222. package/validation/lib/validation.service.d.ts +35 -0
  223. package/validation/lib/validation.types.d.ts +21 -0
  224. package/esm2022/lib/classes/base-page.class.mjs +0 -26
  225. package/esm2022/lib/classes/color.class.mjs +0 -49
  226. package/esm2022/lib/classes/datetime.class.mjs +0 -323
  227. package/esm2022/lib/classes/menu.class.mjs +0 -35
  228. package/esm2022/lib/classes/navigator.class.mjs +0 -2
  229. package/esm2022/lib/classes/popup.class.mjs +0 -2
  230. package/esm2022/lib/classes/promise.class.mjs +0 -21
  231. package/esm2022/lib/classes/sectionlist.class.mjs +0 -2
  232. package/esm2022/lib/classes/select.class.mjs +0 -8
  233. package/esm2022/lib/core.module.mjs +0 -27
  234. package/esm2022/lib/error/error.class.mjs +0 -2
  235. package/esm2022/lib/error/error.module.mjs +0 -19
  236. package/esm2022/lib/error/error.service.mjs +0 -22
  237. package/esm2022/lib/events/keyboard.mjs +0 -2
  238. package/esm2022/lib/http/http-error.class.mjs +0 -2
  239. package/esm2022/lib/http/http-events.interceptor.mjs +0 -3
  240. package/esm2022/lib/http/http-request.class.mjs +0 -2
  241. package/esm2022/lib/http/http-result.class.mjs +0 -25
  242. package/esm2022/lib/http/http.module.mjs +0 -35
  243. package/esm2022/lib/http/http.service.mjs +0 -148
  244. package/esm2022/lib/locale/en.json +0 -255
  245. package/esm2022/lib/locale/fa.json +0 -245
  246. package/esm2022/lib/pipe/datetime.pipe.mjs +0 -25
  247. package/esm2022/lib/pipe/htmlToText.pipe.mjs +0 -25
  248. package/esm2022/lib/platform/index.mjs +0 -2
  249. package/esm2022/lib/platform/platform.service.mjs +0 -152
  250. package/esm2022/lib/services/config.mjs +0 -29
  251. package/esm2022/lib/services/event.service.mjs +0 -34
  252. package/esm2022/lib/services/navigator.service.mjs +0 -10
  253. package/esm2022/lib/services/storage.service.mjs +0 -16
  254. package/esm2022/lib/translator/translator.mjs +0 -26
  255. package/esm2022/lib/translator/translator.module.mjs +0 -25
  256. package/esm2022/lib/translator/translator.pipe.mjs +0 -24
  257. package/esm2022/lib/translator/translator.service.mjs +0 -21
  258. package/esm2022/lib/utils/array/array-util.mjs +0 -133
  259. package/esm2022/lib/utils/html/html-util.mjs +0 -200
  260. package/esm2022/lib/utils/html/html.module.mjs +0 -19
  261. package/esm2022/lib/utils/math/math-util.mjs +0 -6
  262. package/esm2022/lib/utils/object/object-util.mjs +0 -83
  263. package/esm2022/lib/utils/render/on-demand-preload-strategy.service.mjs +0 -21
  264. package/esm2022/lib/utils/render/render.service.mjs +0 -109
  265. package/esm2022/lib/utils/render/rendering.module.mjs +0 -35
  266. package/esm2022/lib/utils/scroll/scroll.directive.mjs +0 -56
  267. package/esm2022/lib/utils/scroll/scroll.module.mjs +0 -19
  268. package/esm2022/lib/utils/separator/separator.module.mjs +0 -19
  269. package/esm2022/lib/utils/separator/separator.pipe.mjs +0 -33
  270. package/lib/classes/base-page.class.d.ts +0 -13
  271. package/lib/classes/color.class.d.ts +0 -17
  272. package/lib/classes/datetime.class.d.ts +0 -63
  273. package/lib/classes/menu.class.d.ts +0 -34
  274. package/lib/classes/navigator.class.d.ts +0 -5
  275. package/lib/classes/popup.class.d.ts +0 -12
  276. package/lib/classes/promise.class.d.ts +0 -7
  277. package/lib/classes/sectionlist.class.d.ts +0 -8
  278. package/lib/classes/select.class.d.ts +0 -7
  279. package/lib/core.module.d.ts +0 -9
  280. package/lib/error/error.class.d.ts +0 -4
  281. package/lib/error/error.module.d.ts +0 -7
  282. package/lib/error/error.service.d.ts +0 -13
  283. package/lib/events/keyboard.d.ts +0 -2
  284. package/lib/http/http-error.class.d.ts +0 -7
  285. package/lib/http/http-events.interceptor.d.ts +0 -10
  286. package/lib/http/http-request.class.d.ts +0 -14
  287. package/lib/http/http-result.class.d.ts +0 -11
  288. package/lib/http/http.module.d.ts +0 -10
  289. package/lib/http/http.service.d.ts +0 -23
  290. package/lib/pipe/datetime.pipe.d.ts +0 -8
  291. package/lib/pipe/htmlToText.pipe.d.ts +0 -7
  292. package/lib/platform/index.d.ts +0 -1
  293. package/lib/services/config.d.ts +0 -9
  294. package/lib/services/navigator.service.d.ts +0 -8
  295. package/lib/services/storage.service.d.ts +0 -7
  296. package/lib/translator/translator.d.ts +0 -9
  297. package/lib/translator/translator.module.d.ts +0 -8
  298. package/lib/translator/translator.pipe.d.ts +0 -8
  299. package/lib/translator/translator.service.d.ts +0 -8
  300. package/lib/utils/array/array-util.d.ts +0 -6
  301. package/lib/utils/html/html-util.d.ts +0 -62
  302. package/lib/utils/html/html.module.d.ts +0 -8
  303. package/lib/utils/math/math-util.d.ts +0 -3
  304. package/lib/utils/object/object-util.d.ts +0 -7
  305. package/lib/utils/render/on-demand-preload-strategy.service.d.ts +0 -10
  306. package/lib/utils/render/render.service.d.ts +0 -18
  307. package/lib/utils/render/rendering.module.d.ts +0 -8
  308. package/lib/utils/scroll/scroll.directive.d.ts +0 -18
  309. package/lib/utils/scroll/scroll.module.d.ts +0 -8
  310. package/lib/utils/separator/separator.module.d.ts +0 -8
  311. package/lib/utils/separator/separator.pipe.d.ts +0 -8
@@ -0,0 +1,31 @@
1
+ import { isEmpty } from 'lodash-es';
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class AXBetweenValidationRule {
5
+ get name() {
6
+ return 'between';
7
+ }
8
+ async validate(value, options) {
9
+ let isValid;
10
+ if (options.inclusive) {
11
+ isValid = value >= options.lowerValue && value <= options.upperValue;
12
+ }
13
+ else {
14
+ isValid = value > options.lowerValue && value < options.upperValue;
15
+ }
16
+ const rangeType = options.inclusive ? 'inclusive' : 'exclusive';
17
+ const baseMessage = `The value must be within the ${rangeType} range of ${options.lowerValue} to ${options.upperValue}.`;
18
+ return {
19
+ rule: this.name,
20
+ result: isValid || isEmpty(value),
21
+ message: isValid ? '' : options?.message ?? baseMessage,
22
+ value: value,
23
+ };
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBetweenValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBetweenValidationRule }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBetweenValidationRule, decorators: [{
29
+ type: Injectable
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0d2Vlbi1ydWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3ZhbGlkYXRpb24vc3JjL2xpYi9ydWxlcy9iZXR3ZWVuLXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWdCM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUdsQyxJQUFJLElBQUk7UUFDTixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FDWixLQUFRLEVBQ1IsT0FBMEM7UUFFMUMsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsS0FBSyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDdkUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckUsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHLGdDQUFnQyxTQUFTLGFBQWEsT0FBTyxDQUFDLFVBQVUsT0FBTyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUM7UUFFekgsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVztZQUN2RCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDOzhHQTNCVSx1QkFBdUI7a0hBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhWYWxpZGF0aW9uUnVsZSxcbiAgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMsXG4gIEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24udHlwZXMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYQmV0d2VlblZhbGlkYXRpb25SdWxlT3B0aW9uczxUID0gbnVtYmVyIHwgRGF0ZT5cbiAgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7XG4gIGxvd2VyVmFsdWU6IFQ7XG4gIHVwcGVyVmFsdWU6IFQ7XG4gIGluY2x1c2l2ZT86IGJvb2xlYW47IC8vIE9wdGlvbmFsIGZsYWcgZm9yIGluY2x1c2l2ZW5lc3Ncbn1cblxuZGVjbGFyZSBtb2R1bGUgJy4uL3ZhbGlkYXRpb24udHlwZXMnIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICBiZXR3ZWVuOiBBWEJldHdlZW5WYWxpZGF0aW9uUnVsZU9wdGlvbnM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYQmV0d2VlblZhbGlkYXRpb25SdWxlPFQgPSBudW1iZXIgfCBEYXRlPlxuICBpbXBsZW1lbnRzIEFYVmFsaWRhdGlvblJ1bGVcbntcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2JldHdlZW4nO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IFQsXG4gICAgb3B0aW9uczogQVhCZXR3ZWVuVmFsaWRhdGlvblJ1bGVPcHRpb25zPFQ+XG4gICk6IFByb21pc2U8QVhWYWxpZGF0aW9uUnVsZVJlc3VsdD4ge1xuICAgIGxldCBpc1ZhbGlkO1xuICAgIGlmIChvcHRpb25zLmluY2x1c2l2ZSkge1xuICAgICAgaXNWYWxpZCA9IHZhbHVlID49IG9wdGlvbnMubG93ZXJWYWx1ZSAmJiB2YWx1ZSA8PSBvcHRpb25zLnVwcGVyVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzVmFsaWQgPSB2YWx1ZSA+IG9wdGlvbnMubG93ZXJWYWx1ZSAmJiB2YWx1ZSA8IG9wdGlvbnMudXBwZXJWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZVR5cGUgPSBvcHRpb25zLmluY2x1c2l2ZSA/ICdpbmNsdXNpdmUnIDogJ2V4Y2x1c2l2ZSc7XG4gICAgY29uc3QgYmFzZU1lc3NhZ2UgPSBgVGhlIHZhbHVlIG11c3QgYmUgd2l0aGluIHRoZSAke3JhbmdlVHlwZX0gcmFuZ2Ugb2YgJHtvcHRpb25zLmxvd2VyVmFsdWV9IHRvICR7b3B0aW9ucy51cHBlclZhbHVlfS5gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bGU6IHRoaXMubmFtZSxcbiAgICAgIHJlc3VsdDogaXNWYWxpZCB8fCBpc0VtcHR5KHZhbHVlKSxcbiAgICAgIG1lc3NhZ2U6IGlzVmFsaWQgPyAnJyA6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYmFzZU1lc3NhZ2UsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,29 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class AXCallbackValidationRule {
4
+ get name() {
5
+ return 'callback';
6
+ }
7
+ async validate(value, options) {
8
+ const validationResult = options?.validate(value, options) || {
9
+ result: false,
10
+ message: 'Invalid callback function',
11
+ };
12
+ const createResult = (result) => ({
13
+ rule: this.name,
14
+ result: result.result,
15
+ message: result.message ?? options?.message ?? '',
16
+ value: value,
17
+ });
18
+ if (validationResult instanceof Promise) {
19
+ return validationResult.then(createResult);
20
+ }
21
+ return createResult(validationResult);
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXCallbackValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXCallbackValidationRule }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXCallbackValidationRule, decorators: [{
27
+ type: Injectable
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbGJhY2stcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS92YWxpZGF0aW9uL3NyYy9saWIvcnVsZXMvY2FsbGJhY2stcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQTJCM0MsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxJQUFJLElBQUk7UUFDTixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FDWixLQUFRLEVBQ1IsT0FBMkM7UUFFM0MsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSTtZQUM1RCxNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRSwyQkFBMkI7U0FDckMsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBNkMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFO1lBQ2pELEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxnQkFBZ0IsWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUN4QyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4QyxDQUFDOzhHQXpCVSx3QkFBd0I7a0hBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICcuLi92YWxpZGF0aW9uLnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhDYWxsYmFja1ZhbGlkYXRpb248VD4gPSAoXG4gIHZhbHVlOiBULFxuICBvcHRpb25zPzogQVhDYWxsYmFja1ZhbGlkYXRpb25SdWxlT3B0aW9uczxUPlxuKSA9PlxuICB8IFByb21pc2U8eyByZXN1bHQ6IGJvb2xlYW47IG1lc3NhZ2U/OiBzdHJpbmcgfT5cbiAgfCB7IHJlc3VsdDogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYQ2FsbGJhY2tWYWxpZGF0aW9uUnVsZU9wdGlvbnM8VD5cbiAgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7XG4gIHZhbGlkYXRlOiBBWENhbGxiYWNrVmFsaWRhdGlvbjxUPjtcbn1cblxuLy8gQXVnbWVudCB0aGUgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnNNYXBcbmRlY2xhcmUgbW9kdWxlICcuLi92YWxpZGF0aW9uLnR5cGVzJyB7XG4gIGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCB7XG4gICAgY2FsbGJhY2s6IEFYQ2FsbGJhY2tWYWxpZGF0aW9uUnVsZU9wdGlvbnM8dW5rbm93bj47XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYQ2FsbGJhY2tWYWxpZGF0aW9uUnVsZTxUPiBpbXBsZW1lbnRzIEFYVmFsaWRhdGlvblJ1bGUge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY2FsbGJhY2snO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IFQsXG4gICAgb3B0aW9uczogQVhDYWxsYmFja1ZhbGlkYXRpb25SdWxlT3B0aW9uczxUPlxuICApOiBQcm9taXNlPEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQ+IHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gb3B0aW9ucz8udmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpIHx8IHtcbiAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICBtZXNzYWdlOiAnSW52YWxpZCBjYWxsYmFjayBmdW5jdGlvbicsXG4gICAgfTtcbiAgICBjb25zdCBjcmVhdGVSZXN1bHQgPSAocmVzdWx0OiB7IHJlc3VsdDogYm9vbGVhbjsgbWVzc2FnZT86IHN0cmluZyB9KSA9PiAoe1xuICAgICAgcnVsZTogdGhpcy5uYW1lLFxuICAgICAgcmVzdWx0OiByZXN1bHQucmVzdWx0LFxuICAgICAgbWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UgPz8gb3B0aW9ucz8ubWVzc2FnZSA/PyAnJyxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQudGhlbihjcmVhdGVSZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVSZXN1bHQodmFsaWRhdGlvblJlc3VsdCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ // ax-equal-validation-rule.ts
2
+ import { isEqual } from 'lodash-es';
3
+ import { Injectable } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ export class AXEqualValidationRule {
6
+ get name() {
7
+ return 'equal';
8
+ }
9
+ async validate(value, options) {
10
+ const isValueEqual = isEqual(value, options.value);
11
+ const isValid = options.not ? !isValueEqual : isValueEqual;
12
+ const defaultMessage = `The value must ${options.not ? 'not ' : ''}be equal to ${options.value}.`;
13
+ return {
14
+ rule: this.name,
15
+ result: isValid,
16
+ message: isValid ? '' : options?.message ?? defaultMessage,
17
+ value: value,
18
+ };
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXEqualValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
21
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXEqualValidationRule }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXEqualValidationRule, decorators: [{
24
+ type: Injectable
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWwtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS92YWxpZGF0aW9uL3NyYy9saWIvcnVsZXMvZXF1YWwtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWEzQyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLElBQUksSUFBSTtRQUNOLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQVUsRUFDVixPQUFxQztRQUVyQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBRTNELE1BQU0sY0FBYyxHQUFHLGtCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ3pCLGVBQWUsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDO1FBQ2hDLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixNQUFNLEVBQUUsT0FBTztZQUNmLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxjQUFjO1lBQzFELEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQztJQUNKLENBQUM7OEdBckJVLHFCQUFxQjtrSEFBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gYXgtZXF1YWwtdmFsaWRhdGlvbi1ydWxlLnRzXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICcuLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWEVxdWFsVmFsaWRhdGlvblJ1bGVPcHRpb25zIGV4dGVuZHMgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMge1xuICB2YWx1ZTogYW55O1xuICBub3Q/OiBib29sZWFuOyAvLyBPcHRpb25hbCBmbGFnIHRvIGludmVydCB0aGUgdmFsaWRhdGlvbiBsb2dpY1xufVxuXG5kZWNsYXJlIG1vZHVsZSAnLi4vdmFsaWRhdGlvbi50eXBlcycge1xuICBpbnRlcmZhY2UgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnNNYXAge1xuICAgIGVxdWFsOiBBWEVxdWFsVmFsaWRhdGlvblJ1bGVPcHRpb25zO1xuICB9XG59XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhFcXVhbFZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdlcXVhbCc7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wdGlvbnM6IEFYRXF1YWxWYWxpZGF0aW9uUnVsZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0PiB7XG4gICAgY29uc3QgaXNWYWx1ZUVxdWFsID0gaXNFcXVhbCh2YWx1ZSwgb3B0aW9ucy52YWx1ZSk7XG4gICAgY29uc3QgaXNWYWxpZCA9IG9wdGlvbnMubm90ID8gIWlzVmFsdWVFcXVhbCA6IGlzVmFsdWVFcXVhbDtcblxuICAgIGNvbnN0IGRlZmF1bHRNZXNzYWdlID0gYFRoZSB2YWx1ZSBtdXN0ICR7XG4gICAgICBvcHRpb25zLm5vdCA/ICdub3QgJyA6ICcnXG4gICAgfWJlIGVxdWFsIHRvICR7b3B0aW9ucy52YWx1ZX0uYDtcbiAgICByZXR1cm4ge1xuICAgICAgcnVsZTogdGhpcy5uYW1lLFxuICAgICAgcmVzdWx0OiBpc1ZhbGlkLFxuICAgICAgbWVzc2FnZTogaXNWYWxpZCA/ICcnIDogb3B0aW9ucz8ubWVzc2FnZSA/PyBkZWZhdWx0TWVzc2FnZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ // ax-greater-than-validation-rule.ts
2
+ import { isNull, isUndefined } from 'lodash-es';
3
+ import { Injectable } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ export class AXGreaterThanValidationRule {
6
+ get name() {
7
+ return 'greaterThan';
8
+ }
9
+ async validate(value, options) {
10
+ const isValid = isNull(value) || isUndefined(value)
11
+ ? true
12
+ : options.inclusive
13
+ ? value >= options.value
14
+ : value > options.value;
15
+ const baseMessage = `The value must be ${options.inclusive ? 'greater than or equal to' : 'greater than'} ${options.value}.`;
16
+ return {
17
+ rule: this.name,
18
+ result: isValid,
19
+ message: isValid ? '' : options?.message ?? baseMessage,
20
+ value: value,
21
+ };
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXGreaterThanValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXGreaterThanValidationRule }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXGreaterThanValidationRule, decorators: [{
27
+ type: Injectable
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlYXRlci10aGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3ZhbGlkYXRpb24vc3JjL2xpYi9ydWxlcy9ncmVhdGVyLXRoYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUNBQXFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBZTNDLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsSUFBSSxJQUFJO1FBQ04sT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osS0FBYSxFQUNiLE9BQTJDO1FBRTNDLE1BQU0sT0FBTyxHQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUNuQixDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLO2dCQUN4QixDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcscUJBQ2xCLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxjQUNuRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUVyQixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVztZQUN2RCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDOzhHQXpCVSwyQkFBMkI7a0hBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGF4LWdyZWF0ZXItdGhhbi12YWxpZGF0aW9uLXJ1bGUudHNcbmltcG9ydCB7IGlzTnVsbCwgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhWYWxpZGF0aW9uUnVsZSxcbiAgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMsXG4gIEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24udHlwZXMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYR3JlYXRlclRoYW5WYWxpZGF0aW9uUnVsZU9wdGlvbnNcbiAgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGluY2x1c2l2ZT86IGJvb2xlYW47IC8vIE9wdGlvbmFsIGZsYWcgZm9yIGluY2x1c2l2ZW5lc3Ncbn1cblxuZGVjbGFyZSBtb2R1bGUgJy4uL3ZhbGlkYXRpb24udHlwZXMnIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICBncmVhdGVyVGhhbjogQVhHcmVhdGVyVGhhblZhbGlkYXRpb25SdWxlT3B0aW9ucztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhHcmVhdGVyVGhhblZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdncmVhdGVyVGhhbic7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIG9wdGlvbnM6IEFYR3JlYXRlclRoYW5WYWxpZGF0aW9uUnVsZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0PiB7XG4gICAgY29uc3QgaXNWYWxpZCA9XG4gICAgICBpc051bGwodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKVxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBvcHRpb25zLmluY2x1c2l2ZVxuICAgICAgICA/IHZhbHVlID49IG9wdGlvbnMudmFsdWVcbiAgICAgICAgOiB2YWx1ZSA+IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgYmFzZU1lc3NhZ2UgPSBgVGhlIHZhbHVlIG11c3QgYmUgJHtcbiAgICAgIG9wdGlvbnMuaW5jbHVzaXZlID8gJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycgOiAnZ3JlYXRlciB0aGFuJ1xuICAgIH0gJHtvcHRpb25zLnZhbHVlfS5gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bGU6IHRoaXMubmFtZSxcbiAgICAgIHJlc3VsdDogaXNWYWxpZCxcbiAgICAgIG1lc3NhZ2U6IGlzVmFsaWQgPyAnJyA6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYmFzZU1lc3NhZ2UsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ // ax-max-length-validation-rule.ts
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class AXLengthValidationRule {
5
+ get name() {
6
+ return 'length';
7
+ }
8
+ async validate(value, options) {
9
+ const isValid = value?.length >= options.min && value?.length <= options.max;
10
+ return {
11
+ rule: this.name,
12
+ result: isValid,
13
+ message: isValid
14
+ ? null
15
+ : options?.message ??
16
+ `The value must be between ${options.min} and ${options.max} chars`,
17
+ value: value,
18
+ };
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLengthValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
21
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLengthValidationRule }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLengthValidationRule, decorators: [{
24
+ type: Injectable
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVuZ3RoLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3J1bGVzL2xlbmd0aC1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQW1CM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxJQUFJLElBQUk7UUFDTixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FDWixLQUFhLEVBQ2IsT0FBc0M7UUFFdEMsTUFBTSxPQUFPLEdBQ1gsS0FBSyxFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixPQUFPLEVBQUUsT0FBTztnQkFDZCxDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLDZCQUE2QixPQUFPLENBQUMsR0FBRyxRQUFRLE9BQU8sQ0FBQyxHQUFHLFFBQVE7WUFDdkUsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQzs4R0FwQlUsc0JBQXNCO2tIQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBheC1tYXgtbGVuZ3RoLXZhbGlkYXRpb24tcnVsZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhWYWxpZGF0aW9uUnVsZSxcbiAgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMsXG4gIEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24udHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYTGVuZ3RoVmFsaWRhdGlvblJ1bGVPcHRpb25zIGV4dGVuZHMgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMge1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG59XG5cbmRlY2xhcmUgbW9kdWxlICcuLi92YWxpZGF0aW9uLnR5cGVzJyB7XG4gIGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCB7XG4gICAgbGVuZ3RoOiBBWExlbmd0aFZhbGlkYXRpb25SdWxlT3B0aW9ucztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhMZW5ndGhWYWxpZGF0aW9uUnVsZSBpbXBsZW1lbnRzIEFYVmFsaWRhdGlvblJ1bGUge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnbGVuZ3RoJztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQVhMZW5ndGhWYWxpZGF0aW9uUnVsZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0PiB7XG4gICAgY29uc3QgaXNWYWxpZCA9XG4gICAgICB2YWx1ZT8ubGVuZ3RoID49IG9wdGlvbnMubWluICYmIHZhbHVlPy5sZW5ndGggPD0gb3B0aW9ucy5tYXg7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bGU6IHRoaXMubmFtZSxcbiAgICAgIHJlc3VsdDogaXNWYWxpZCxcbiAgICAgIG1lc3NhZ2U6IGlzVmFsaWRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogb3B0aW9ucz8ubWVzc2FnZSA/P1xuICAgICAgICAgIGBUaGUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7b3B0aW9ucy5taW59IGFuZCAke29wdGlvbnMubWF4fSBjaGFyc2AsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,29 @@
1
+ // ax-less-than-validation-rule.ts
2
+ import { isNull, isUndefined } from 'lodash-es';
3
+ import { Injectable } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ export class AXLessThanValidationRule {
6
+ get name() {
7
+ return 'lessThan';
8
+ }
9
+ async validate(value, options) {
10
+ const isValid = isNull(value) || isUndefined(value)
11
+ ? true
12
+ : options.inclusive
13
+ ? value <= options.value
14
+ : value < options.value;
15
+ const baseMessage = `The value must be ${options.inclusive ? 'less than or equal to' : 'less than'} ${options.value}.`;
16
+ return {
17
+ rule: this.name,
18
+ result: isValid,
19
+ message: isValid ? '' : options?.message ?? baseMessage,
20
+ value: value,
21
+ };
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLessThanValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLessThanValidationRule }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLessThanValidationRule, decorators: [{
27
+ type: Injectable
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVzcy10aGFuLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3J1bGVzL2xlc3MtdGhhbi1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtDQUFrQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1oRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWUzQyxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLElBQUksSUFBSTtRQUNOLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQWEsRUFDYixPQUF3QztRQUV4QyxNQUFNLE9BQU8sR0FDWCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUztnQkFDbkIsQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSztnQkFDeEIsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzVCLE1BQU0sV0FBVyxHQUFHLHFCQUNsQixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsV0FDaEQsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFckIsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxPQUFPO1lBQ2YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVc7WUFDdkQsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQzs4R0F6QlUsd0JBQXdCO2tIQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBheC1sZXNzLXRoYW4tdmFsaWRhdGlvbi1ydWxlLnRzXG5pbXBvcnQgeyBpc051bGwsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICcuLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWExlc3NUaGFuVmFsaWRhdGlvblJ1bGVPcHRpb25zXG4gIGV4dGVuZHMgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMge1xuICB2YWx1ZTogbnVtYmVyO1xuICBpbmNsdXNpdmU/OiBib29sZWFuOyAvLyBPcHRpb25hbCBmbGFnIGZvciBpbmNsdXNpdmVuZXNzXG59XG5cbmRlY2xhcmUgbW9kdWxlICcuLi92YWxpZGF0aW9uLnR5cGVzJyB7XG4gIGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCB7XG4gICAgbGVzc1RoYW46IEFYTGVzc1RoYW5WYWxpZGF0aW9uUnVsZU9wdGlvbnM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTGVzc1RoYW5WYWxpZGF0aW9uUnVsZSBpbXBsZW1lbnRzIEFYVmFsaWRhdGlvblJ1bGUge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnbGVzc1RoYW4nO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBvcHRpb25zOiBBWExlc3NUaGFuVmFsaWRhdGlvblJ1bGVPcHRpb25zXG4gICk6IFByb21pc2U8QVhWYWxpZGF0aW9uUnVsZVJlc3VsdD4ge1xuICAgIGNvbnN0IGlzVmFsaWQgPVxuICAgICAgaXNOdWxsKHZhbHVlKSB8fCBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogb3B0aW9ucy5pbmNsdXNpdmVcbiAgICAgICAgPyB2YWx1ZSA8PSBvcHRpb25zLnZhbHVlXG4gICAgICAgIDogdmFsdWUgPCBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGJhc2VNZXNzYWdlID0gYFRoZSB2YWx1ZSBtdXN0IGJlICR7XG4gICAgICBvcHRpb25zLmluY2x1c2l2ZSA/ICdsZXNzIHRoYW4gb3IgZXF1YWwgdG8nIDogJ2xlc3MgdGhhbidcbiAgICB9ICR7b3B0aW9ucy52YWx1ZX0uYDtcblxuICAgIHJldHVybiB7XG4gICAgICBydWxlOiB0aGlzLm5hbWUsXG4gICAgICByZXN1bHQ6IGlzVmFsaWQsXG4gICAgICBtZXNzYWdlOiBpc1ZhbGlkID8gJycgOiBvcHRpb25zPy5tZXNzYWdlID8/IGJhc2VNZXNzYWdlLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,27 @@
1
+ // ax-max-length-validation-rule.ts
2
+ import { isEmpty } from 'lodash-es';
3
+ import { Injectable } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ export class AXMaxLengthValidationRule {
6
+ get name() {
7
+ return 'maxLength';
8
+ }
9
+ async validate(value, options) {
10
+ const isValid = isEmpty(value) ? true : value?.length <= options.value;
11
+ return {
12
+ rule: this.name,
13
+ result: isValid,
14
+ message: isValid
15
+ ? ''
16
+ : options?.message ??
17
+ `The value must not exceed ${options.value} characters.`,
18
+ value: value,
19
+ };
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMaxLengthValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMaxLengthValidationRule }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMaxLengthValidationRule, decorators: [{
25
+ type: Injectable
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4bGVuZ3RoLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3J1bGVzL21heGxlbmd0aC1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBYzNDLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsSUFBSSxJQUFJO1FBQ04sT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osS0FBYSxFQUNiLE9BQXlDO1FBRXpDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDdkUsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxPQUFPO1lBQ2YsT0FBTyxFQUFFLE9BQU87Z0JBQ2QsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPO29CQUNoQiw2QkFBNkIsT0FBTyxDQUFDLEtBQUssY0FBYztZQUM1RCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDOzhHQW5CVSx5QkFBeUI7a0hBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGF4LW1heC1sZW5ndGgtdmFsaWRhdGlvbi1ydWxlLnRzXG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICcuLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWE1heExlbmd0aFZhbGlkYXRpb25SdWxlT3B0aW9uc1xuICBleHRlbmRzIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zIHtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZGVjbGFyZSBtb2R1bGUgJy4uL3ZhbGlkYXRpb24udHlwZXMnIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICBtYXhMZW5ndGg6IEFYTWF4TGVuZ3RoVmFsaWRhdGlvblJ1bGVPcHRpb25zO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1heExlbmd0aFZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdtYXhMZW5ndGgnO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBWE1heExlbmd0aFZhbGlkYXRpb25SdWxlT3B0aW9uc1xuICApOiBQcm9taXNlPEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQ+IHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaXNFbXB0eSh2YWx1ZSkgPyB0cnVlIDogdmFsdWU/Lmxlbmd0aCA8PSBvcHRpb25zLnZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBydWxlOiB0aGlzLm5hbWUsXG4gICAgICByZXN1bHQ6IGlzVmFsaWQsXG4gICAgICBtZXNzYWdlOiBpc1ZhbGlkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBvcHRpb25zPy5tZXNzYWdlID8/XG4gICAgICAgICAgYFRoZSB2YWx1ZSBtdXN0IG5vdCBleGNlZWQgJHtvcHRpb25zLnZhbHVlfSBjaGFyYWN0ZXJzLmAsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ import { isEmpty } from 'lodash-es';
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class AXMinLengthValidationRule {
5
+ get name() {
6
+ return 'minLength';
7
+ }
8
+ async validate(value, options) {
9
+ const isValid = isEmpty(value) ? true : value?.length >= options.value;
10
+ return {
11
+ rule: this.name,
12
+ result: isValid,
13
+ message: isValid
14
+ ? ''
15
+ : options?.message ??
16
+ `The value must be at least ${options.value} characters long.`,
17
+ value: value,
18
+ };
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMinLengthValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
21
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMinLengthValidationRule }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMinLengthValidationRule, decorators: [{
24
+ type: Injectable
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlubGVuZ3RoLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3J1bGVzL21pbmxlbmd0aC1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFNcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFjM0MsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxJQUFJLElBQUk7UUFDTixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FDWixLQUFhLEVBQ2IsT0FBeUM7UUFFekMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixPQUFPLEVBQUUsT0FBTztnQkFDZCxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLDhCQUE4QixPQUFPLENBQUMsS0FBSyxtQkFBbUI7WUFDbEUsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQzs4R0FuQlUseUJBQXlCO2tIQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICcuLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWE1pbkxlbmd0aFZhbGlkYXRpb25SdWxlT3B0aW9uc1xuICBleHRlbmRzIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zIHtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZGVjbGFyZSBtb2R1bGUgJy4uL3ZhbGlkYXRpb24udHlwZXMnIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICBtaW5MZW5ndGg6IEFYTWluTGVuZ3RoVmFsaWRhdGlvblJ1bGVPcHRpb25zO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1pbkxlbmd0aFZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdtaW5MZW5ndGgnO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBWE1pbkxlbmd0aFZhbGlkYXRpb25SdWxlT3B0aW9uc1xuICApOiBQcm9taXNlPEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQ+IHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaXNFbXB0eSh2YWx1ZSkgPyB0cnVlIDogdmFsdWU/Lmxlbmd0aCA+PSBvcHRpb25zLnZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBydWxlOiB0aGlzLm5hbWUsXG4gICAgICByZXN1bHQ6IGlzVmFsaWQsXG4gICAgICBtZXNzYWdlOiBpc1ZhbGlkXG4gICAgICAgID8gJydcbiAgICAgICAgOiBvcHRpb25zPy5tZXNzYWdlID8/XG4gICAgICAgICAgYFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0ICR7b3B0aW9ucy52YWx1ZX0gY2hhcmFjdGVycyBsb25nLmAsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,49 @@
1
+ import { isEmpty, isString } from 'lodash-es';
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { AXTranslationService } from '@acorex/core/translation';
4
+ import * as i0 from "@angular/core";
5
+ export class AXRegexValidationRule {
6
+ constructor() {
7
+ this.traslationService = inject(AXTranslationService);
8
+ }
9
+ get name() {
10
+ return 'regex';
11
+ }
12
+ async validate(value, options) {
13
+ // Convert string pattern to RegExp if necessary
14
+ const regexPattern = typeof options.pattern === 'string'
15
+ ? new RegExp(options.pattern)
16
+ : options.pattern;
17
+ if (!value || (isString(value) && isEmpty(value.trim()))) {
18
+ return {
19
+ rule: this.name,
20
+ result: true,
21
+ message: null,
22
+ value: value,
23
+ };
24
+ }
25
+ else if (!isString(value)) {
26
+ return {
27
+ rule: this.name,
28
+ result: false,
29
+ message: `${value} is not string value.`,
30
+ value: value,
31
+ };
32
+ }
33
+ const isValid = regexPattern.test(value);
34
+ const translatedMessage = await this.traslationService.translateAsync(options?.message ??
35
+ `The value does not match the pattern ${regexPattern}.`, { params: { title: options?.['title'] } });
36
+ return {
37
+ rule: this.name,
38
+ result: isValid,
39
+ message: isValid ? null : translatedMessage,
40
+ value: value,
41
+ };
42
+ }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRegexValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRegexValidationRule }); }
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRegexValidationRule, decorators: [{
47
+ type: Injectable
48
+ }] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXgtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS92YWxpZGF0aW9uL3NyYy9saWIvcnVsZXMvcmVnZXgtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU05QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFjaEUsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVVLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBNkMxRDtJQTNDQyxJQUFJLElBQUk7UUFDTixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FDWixLQUFhLEVBQ2IsT0FBcUM7UUFFckMsZ0RBQWdEO1FBQ2hELE1BQU0sWUFBWSxHQUNoQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUNqQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUM3QixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUV0QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osT0FBTyxFQUFFLElBQUk7Z0JBQ2IsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixNQUFNLEVBQUUsS0FBSztnQkFDYixPQUFPLEVBQUUsR0FBRyxLQUFLLHVCQUF1QjtnQkFDeEMsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQ25FLE9BQU8sRUFBRSxPQUFPO1lBQ2Qsd0NBQXdDLFlBQVksR0FBRyxFQUN6RCxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQzFDLENBQUM7UUFDRixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtZQUMzQyxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDOzhHQTdDVSxxQkFBcUI7a0hBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRW1wdHksIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LFxufSBmcm9tICcuLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUmVnZXhWYWxpZGF0aW9uUnVsZU9wdGlvbnMgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7XG4gIHBhdHRlcm46IHN0cmluZyB8IFJlZ0V4cDtcbn1cblxuLy8gQXVnbWVudCB0aGUgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnNNYXBcbmRlY2xhcmUgbW9kdWxlICcuLi92YWxpZGF0aW9uLnR5cGVzJyB7XG4gIGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCB7XG4gICAgcmVnZXg6IEFYUmVnZXhWYWxpZGF0aW9uUnVsZU9wdGlvbnM7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYUmVnZXhWYWxpZGF0aW9uUnVsZSBpbXBsZW1lbnRzIEFYVmFsaWRhdGlvblJ1bGUge1xuICBwcml2YXRlIHRyYXNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAncmVnZXgnO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBWFJlZ2V4VmFsaWRhdGlvblJ1bGVPcHRpb25zXG4gICk6IFByb21pc2U8QVhWYWxpZGF0aW9uUnVsZVJlc3VsdD4ge1xuICAgIC8vIENvbnZlcnQgc3RyaW5nIHBhdHRlcm4gdG8gUmVnRXhwIGlmIG5lY2Vzc2FyeVxuICAgIGNvbnN0IHJlZ2V4UGF0dGVybiA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5wYXR0ZXJuID09PSAnc3RyaW5nJ1xuICAgICAgICA/IG5ldyBSZWdFeHAob3B0aW9ucy5wYXR0ZXJuKVxuICAgICAgICA6IG9wdGlvbnMucGF0dGVybjtcblxuICAgIGlmICghdmFsdWUgfHwgKGlzU3RyaW5nKHZhbHVlKSAmJiBpc0VtcHR5KHZhbHVlLnRyaW0oKSkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBydWxlOiB0aGlzLm5hbWUsXG4gICAgICAgIHJlc3VsdDogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJ1bGU6IHRoaXMubmFtZSxcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYCR7dmFsdWV9IGlzIG5vdCBzdHJpbmcgdmFsdWUuYCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1ZhbGlkID0gcmVnZXhQYXR0ZXJuLnRlc3QodmFsdWUpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRNZXNzYWdlID0gYXdhaXQgdGhpcy50cmFzbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgIG9wdGlvbnM/Lm1lc3NhZ2UgPz9cbiAgICAgICAgYFRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybiAke3JlZ2V4UGF0dGVybn0uYCxcbiAgICAgIHsgcGFyYW1zOiB7IHRpdGxlOiBvcHRpb25zPy5bJ3RpdGxlJ10gfSB9XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgcnVsZTogdGhpcy5uYW1lLFxuICAgICAgcmVzdWx0OiBpc1ZhbGlkLFxuICAgICAgbWVzc2FnZTogaXNWYWxpZCA/IG51bGwgOiB0cmFuc2xhdGVkTWVzc2FnZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { find, isArray, isEmpty, isNull, isNumber, isString, isUndefined, } from 'lodash-es';
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { AXTranslationService } from '@acorex/core/translation';
4
+ import * as i0 from "@angular/core";
5
+ export class AXRequiredValidationRule {
6
+ constructor() {
7
+ this.traslationService = inject(AXTranslationService);
8
+ }
9
+ get name() {
10
+ return 'required';
11
+ }
12
+ async validate(value, options) {
13
+ const rules = [
14
+ { test: (val) => isNull(val) || isUndefined(val) },
15
+ { test: (val) => isString(val) && isEmpty(val.trim()) },
16
+ { test: (val) => isNumber(val) && isNaN(val) },
17
+ { test: (val) => isArray(val) && isEmpty(val) },
18
+ ];
19
+ const failedRule = find(rules, (rule) => rule.test(value));
20
+ const isValid = !failedRule;
21
+ const translatedMessage = await this.traslationService.translateAsync('validation.messages.required', { params: { title: options?.['title'] } });
22
+ const message = failedRule ? options?.message ?? translatedMessage : null;
23
+ return {
24
+ rule: this.name,
25
+ result: isValid,
26
+ message: message,
27
+ value,
28
+ };
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRequiredValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRequiredValidationRule }); }
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRequiredValidationRule, decorators: [{
34
+ type: Injectable
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZWQtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS92YWxpZGF0aW9uL3NyYy9saWIvcnVsZXMvcmVxdWlyZWQtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sV0FBVyxDQUFDO0FBTW5CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQWNoRSxNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBRVUsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FnQzFEO0lBOUJDLElBQUksSUFBSTtRQUNOLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUNaLEtBQWUsRUFDZixPQUF5QztRQUV6QyxNQUFNLEtBQUssR0FBRztZQUNaLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZELEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1NBQ2hELENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQ25FLDhCQUE4QixFQUM5QixFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQzFDLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUUxRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLE9BQU87WUFDZixPQUFPLEVBQUUsT0FBTztZQUNoQixLQUFLO1NBQ04sQ0FBQztJQUNKLENBQUM7OEdBaENVLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZmluZCxcbiAgaXNBcnJheSxcbiAgaXNFbXB0eSxcbiAgaXNOdWxsLFxuICBpc051bWJlcixcbiAgaXNTdHJpbmcsXG4gIGlzVW5kZWZpbmVkLFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhWYWxpZGF0aW9uUnVsZSxcbiAgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMsXG4gIEFYVmFsaWRhdGlvblJ1bGVSZXN1bHQsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24udHlwZXMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUmVxdWlyZWRWYWxpZGF0aW9uUnVsZU9wdGlvbnNcbiAgZXh0ZW5kcyBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB7fVxuXG4vLyBBdWdtZW50IHRoZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcFxuZGVjbGFyZSBtb2R1bGUgJy4uL3ZhbGlkYXRpb24udHlwZXMnIHtcbiAgaW50ZXJmYWNlIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwIHtcbiAgICByZXF1aXJlZDogQVhSZXF1aXJlZFZhbGlkYXRpb25SdWxlT3B0aW9ucztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhSZXF1aXJlZFZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgQVhWYWxpZGF0aW9uUnVsZSB7XG4gIHByaXZhdGUgdHJhc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdyZXF1aXJlZCc7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZShcbiAgICB2YWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IEFYUmVxdWlyZWRWYWxpZGF0aW9uUnVsZU9wdGlvbnNcbiAgKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0PiB7XG4gICAgY29uc3QgcnVsZXMgPSBbXG4gICAgICB7IHRlc3Q6ICh2YWwpID0+IGlzTnVsbCh2YWwpIHx8IGlzVW5kZWZpbmVkKHZhbCkgfSxcbiAgICAgIHsgdGVzdDogKHZhbCkgPT4gaXNTdHJpbmcodmFsKSAmJiBpc0VtcHR5KHZhbC50cmltKCkpIH0sXG4gICAgICB7IHRlc3Q6ICh2YWwpID0+IGlzTnVtYmVyKHZhbCkgJiYgaXNOYU4odmFsKSB9LFxuICAgICAgeyB0ZXN0OiAodmFsKSA9PiBpc0FycmF5KHZhbCkgJiYgaXNFbXB0eSh2YWwpIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGZhaWxlZFJ1bGUgPSBmaW5kKHJ1bGVzLCAocnVsZSkgPT4gcnVsZS50ZXN0KHZhbHVlKSk7XG4gICAgY29uc3QgaXNWYWxpZCA9ICFmYWlsZWRSdWxlO1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRNZXNzYWdlID0gYXdhaXQgdGhpcy50cmFzbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICd2YWxpZGF0aW9uLm1lc3NhZ2VzLnJlcXVpcmVkJyxcbiAgICAgIHsgcGFyYW1zOiB7IHRpdGxlOiBvcHRpb25zPy5bJ3RpdGxlJ10gfSB9XG4gICAgKTtcbiAgICBjb25zdCBtZXNzYWdlID0gZmFpbGVkUnVsZSA/IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gdHJhbnNsYXRlZE1lc3NhZ2UgOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bGU6IHRoaXMubmFtZSxcbiAgICAgIHJlc3VsdDogaXNWYWxpZCxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const AX_VALIDATION_CONFIG = new InjectionToken('AX_VALIDATION_CONFIG', {
3
+ providedIn: 'root',
4
+ factory: () => {
5
+ return AXValidationDefaultConfig;
6
+ },
7
+ });
8
+ export const AXValidationDefaultConfig = {
9
+ rules: {
10
+ email: {
11
+ rule: 'regex',
12
+ options: {
13
+ pattern: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
14
+ message: 'validation.messages.email',
15
+ },
16
+ },
17
+ phone: {
18
+ rule: 'regex',
19
+ options: {
20
+ pattern: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$/,
21
+ message: 'validation.messages.phone',
22
+ },
23
+ },
24
+ },
25
+ };
26
+ export function validationConfig(config = {}) {
27
+ const result = {
28
+ ...AXValidationDefaultConfig,
29
+ ...config,
30
+ };
31
+ return result;
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3ZhbGlkYXRpb24uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQi9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUNwRCxzQkFBc0IsRUFDdEI7SUFDRSxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osT0FBTyx5QkFBeUIsQ0FBQztJQUNuQyxDQUFDO0NBQ0YsQ0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQXVCO0lBQzNELEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFDTCx1SkFBdUo7Z0JBQ3pKLE9BQU8sRUFBRSwyQkFBMkI7YUFDckM7U0FDRjtRQUNELEtBQUssRUFBRTtZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSw4Q0FBOEM7Z0JBQ3ZELE9BQU8sRUFBRSwyQkFBMkI7YUFDckM7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQUlGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsU0FBb0MsRUFBRTtJQUV0QyxNQUFNLE1BQU0sR0FBRztRQUNiLEdBQUcseUJBQXlCO1FBQzVCLEdBQUcsTUFBTTtLQUNWLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCxcbn0gZnJvbSAnLi92YWxpZGF0aW9uLnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhWYWxpZGF0aW9uQ29uZmlnUnVsZXMgPSB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICBydWxlOiBrZXlvZiBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcDtcbiAgICBvcHRpb25zOiBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucztcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhWYWxpZGF0aW9uQ29uZmlnIHtcbiAgcnVsZXM6IEFYVmFsaWRhdGlvbkNvbmZpZ1J1bGVzO1xufVxuXG5leHBvcnQgY29uc3QgQVhfVkFMSURBVElPTl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhWYWxpZGF0aW9uQ29uZmlnPihcbiAgJ0FYX1ZBTElEQVRJT05fQ09ORklHJyxcbiAge1xuICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgICByZXR1cm4gQVhWYWxpZGF0aW9uRGVmYXVsdENvbmZpZztcbiAgICB9LFxuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgQVhWYWxpZGF0aW9uRGVmYXVsdENvbmZpZzogQVhWYWxpZGF0aW9uQ29uZmlnID0ge1xuICBydWxlczoge1xuICAgIGVtYWlsOiB7XG4gICAgICBydWxlOiAncmVnZXgnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBwYXR0ZXJuOlxuICAgICAgICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgICAgICAgbWVzc2FnZTogJ3ZhbGlkYXRpb24ubWVzc2FnZXMuZW1haWwnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHBob25lOiB7XG4gICAgICBydWxlOiAncmVnZXgnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBwYXR0ZXJuOiAvXlsrXSpbKF17MCwxfVswLTldezEsNH1bKV17MCwxfVstXFxzXFwuLzAtOV0qJC8sXG4gICAgICAgIG1lc3NhZ2U6ICd2YWxpZGF0aW9uLm1lc3NhZ2VzLnBob25lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCB0eXBlIEFYUGFydGlhbFZhbGlkYXRpb25Db25maWcgPSBQYXJ0aWFsPEFYVmFsaWRhdGlvbkNvbmZpZz47XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0aW9uQ29uZmlnKFxuICBjb25maWc6IEFYUGFydGlhbFZhbGlkYXRpb25Db25maWcgPSB7fVxuKTogQVhWYWxpZGF0aW9uQ29uZmlnIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLkFYVmFsaWRhdGlvbkRlZmF1bHRDb25maWcsXG4gICAgLi4uY29uZmlnLFxuICB9O1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
@@ -0,0 +1,84 @@
1
+ import { Inject, NgModule, } from '@angular/core';
2
+ import { AXValidationRegistryService } from './validation.service';
3
+ import { AXRegexValidationRule } from './rules/regex-rule';
4
+ import { AXRequiredValidationRule } from './rules/required-rule';
5
+ import { AXCallbackValidationRule } from './rules/callback-rule';
6
+ import { AXMinLengthValidationRule } from './rules/minlength-rule';
7
+ import { AXMaxLengthValidationRule } from './rules/maxlength-rule';
8
+ import { AXLengthValidationRule } from './rules/length-rule';
9
+ import { AXEqualValidationRule } from './rules/equal-rule';
10
+ import { AXLessThanValidationRule } from './rules/less-than-rule';
11
+ import { AXGreaterThanValidationRule } from './rules/greater-than';
12
+ import { AXBetweenValidationRule } from './rules/between-rule';
13
+ import * as i0 from "@angular/core";
14
+ const BUILT_IN_RULES = [
15
+ AXRequiredValidationRule,
16
+ AXRegexValidationRule,
17
+ AXRequiredValidationRule,
18
+ AXCallbackValidationRule,
19
+ //
20
+ AXMinLengthValidationRule,
21
+ AXMaxLengthValidationRule,
22
+ AXLengthValidationRule,
23
+ //
24
+ AXEqualValidationRule,
25
+ AXLessThanValidationRule,
26
+ AXGreaterThanValidationRule,
27
+ AXBetweenValidationRule,
28
+ ];
29
+ export class AXValidationModule {
30
+ static forRoot(configs) {
31
+ return {
32
+ ngModule: AXValidationModule,
33
+ providers: [
34
+ ...(configs?.rules || []),
35
+ {
36
+ provide: 'AXValidationModuleFactory',
37
+ useFactory: (pluginRegistry) => () => {
38
+ pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
39
+ },
40
+ deps: [AXValidationRegistryService],
41
+ multi: true,
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ static forChild(configs) {
47
+ return {
48
+ ngModule: AXValidationModule,
49
+ providers: [
50
+ ...(configs?.rules || []),
51
+ {
52
+ provide: 'AXValidationModuleFactory',
53
+ useFactory: (pluginRegistry) => () => {
54
+ pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
55
+ },
56
+ deps: [AXValidationRegistryService],
57
+ multi: true,
58
+ },
59
+ ],
60
+ };
61
+ }
62
+ /**
63
+ * @ignore
64
+ */
65
+ constructor(instances) {
66
+ instances.forEach((f) => {
67
+ f();
68
+ });
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule, deps: [{ token: 'AXValidationModuleFactory' }], target: i0.ɵɵFactoryTarget.NgModule }); }
71
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule }); }
72
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule, providers: [...BUILT_IN_RULES] }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule, decorators: [{
75
+ type: NgModule,
76
+ args: [{
77
+ imports: [],
78
+ providers: [...BUILT_IN_RULES],
79
+ }]
80
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
81
+ type: Inject,
82
+ args: ['AXValidationModuleFactory']
83
+ }] }] });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3ZhbGlkYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxNQUFNLEVBR04sUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUUvRCxNQUFNLGNBQWMsR0FBRztJQUNyQix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsRUFBRTtJQUNGLHlCQUF5QjtJQUN6Qix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLEVBQUU7SUFDRixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQix1QkFBdUI7Q0FDeEIsQ0FBQztBQVVGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FDWixPQUFtQztRQUVuQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN6QjtvQkFDRSxPQUFPLEVBQUUsMkJBQTJCO29CQUNwQyxVQUFVLEVBQUUsQ0FBQyxjQUEyQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2hFLGNBQWMsQ0FBQyxRQUFRLENBQ3JCLEdBQUcsQ0FBQyxHQUFHLGNBQWMsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNsRCxDQUFDO29CQUNKLENBQUM7b0JBQ0QsSUFBSSxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQ25DLEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQ2IsT0FBbUM7UUFFbkMsT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsU0FBUyxFQUFFO2dCQUNULEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDekI7b0JBQ0UsT0FBTyxFQUFFLDJCQUEyQjtvQkFDcEMsVUFBVSxFQUFFLENBQUMsY0FBMkMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO3dCQUNoRSxjQUFjLENBQUMsUUFBUSxDQUNyQixHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDbEQsQ0FBQztvQkFDSixDQUFDO29CQUNELElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUNuQyxLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQWlELFNBQWdCO1FBQy9ELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN0QixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FsRFUsa0JBQWtCLGtCQThDVCwyQkFBMkI7K0dBOUNwQyxrQkFBa0I7K0dBQWxCLGtCQUFrQixhQUZsQixDQUFDLEdBQUcsY0FBYyxDQUFDOzsyRkFFbkIsa0JBQWtCO2tCQUo5QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxFQUFFO29CQUNYLFNBQVMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO2lCQUMvQjs7MEJBK0NjLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVBQX0lOSVRJQUxJWkVSLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxuICBOZ01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUmVnZXhWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvcmVnZXgtcnVsZSc7XG5pbXBvcnQgeyBBWFJlcXVpcmVkVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL3JlcXVpcmVkLXJ1bGUnO1xuaW1wb3J0IHsgQVhDYWxsYmFja1ZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi9ydWxlcy9jYWxsYmFjay1ydWxlJztcbmltcG9ydCB7IEFYTWluTGVuZ3RoVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL21pbmxlbmd0aC1ydWxlJztcbmltcG9ydCB7IEFYTWF4TGVuZ3RoVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL21heGxlbmd0aC1ydWxlJztcbmltcG9ydCB7IEFYTGVuZ3RoVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL2xlbmd0aC1ydWxlJztcbmltcG9ydCB7IEFYRXF1YWxWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvZXF1YWwtcnVsZSc7XG5pbXBvcnQgeyBBWExlc3NUaGFuVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL2xlc3MtdGhhbi1ydWxlJztcbmltcG9ydCB7IEFYR3JlYXRlclRoYW5WYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvZ3JlYXRlci10aGFuJztcbmltcG9ydCB7IEFYQmV0d2VlblZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi9ydWxlcy9iZXR3ZWVuLXJ1bGUnO1xuXG5jb25zdCBCVUlMVF9JTl9SVUxFUyA9IFtcbiAgQVhSZXF1aXJlZFZhbGlkYXRpb25SdWxlLFxuICBBWFJlZ2V4VmFsaWRhdGlvblJ1bGUsXG4gIEFYUmVxdWlyZWRWYWxpZGF0aW9uUnVsZSxcbiAgQVhDYWxsYmFja1ZhbGlkYXRpb25SdWxlLFxuICAvL1xuICBBWE1pbkxlbmd0aFZhbGlkYXRpb25SdWxlLFxuICBBWE1heExlbmd0aFZhbGlkYXRpb25SdWxlLFxuICBBWExlbmd0aFZhbGlkYXRpb25SdWxlLFxuICAvL1xuICBBWEVxdWFsVmFsaWRhdGlvblJ1bGUsXG4gIEFYTGVzc1RoYW5WYWxpZGF0aW9uUnVsZSxcbiAgQVhHcmVhdGVyVGhhblZhbGlkYXRpb25SdWxlLFxuICBBWEJldHdlZW5WYWxpZGF0aW9uUnVsZSxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhWYWxpZGF0aW9uTW9kdWxlQ29uZmlncyB7XG4gIHJ1bGVzOiAobmV3ICgpID0+IEFYVmFsaWRhdGlvblJ1bGUpW107XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtdLFxuICBwcm92aWRlcnM6IFsuLi5CVUlMVF9JTl9SVUxFU10sXG59KVxuZXhwb3J0IGNsYXNzIEFYVmFsaWRhdGlvbk1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KFxuICAgIGNvbmZpZ3M/OiBBWFZhbGlkYXRpb25Nb2R1bGVDb25maWdzXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhWYWxpZGF0aW9uTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBWFZhbGlkYXRpb25Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLi4uKGNvbmZpZ3M/LnJ1bGVzIHx8IFtdKSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6ICdBWFZhbGlkYXRpb25Nb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocGx1Z2luUmVnaXN0cnk6IEFYVmFsaWRhdGlvblJlZ2lzdHJ5U2VydmljZSkgPT4gKCkgPT4ge1xuICAgICAgICAgICAgcGx1Z2luUmVnaXN0cnkucmVnaXN0ZXIoXG4gICAgICAgICAgICAgIC4uLlsuLi5CVUlMVF9JTl9SVUxFUywgLi4uKGNvbmZpZ3M/LnJ1bGVzIHx8IFtdKV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXBzOiBbQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlXSxcbiAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JDaGlsZChcbiAgICBjb25maWdzPzogQVhWYWxpZGF0aW9uTW9kdWxlQ29uZmlnc1xuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFYVmFsaWRhdGlvbk1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQVhWYWxpZGF0aW9uTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC4uLihjb25maWdzPy5ydWxlcyB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhWYWxpZGF0aW9uTW9kdWxlRmFjdG9yeScsXG4gICAgICAgICAgdXNlRmFjdG9yeTogKHBsdWdpblJlZ2lzdHJ5OiBBWFZhbGlkYXRpb25SZWdpc3RyeVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgICAgIHBsdWdpblJlZ2lzdHJ5LnJlZ2lzdGVyKFxuICAgICAgICAgICAgICAuLi5bLi4uQlVJTFRfSU5fUlVMRVMsIC4uLihjb25maWdzPy5ydWxlcyB8fCBbXSldXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVwczogW0FYVmFsaWRhdGlvblJlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQEluamVjdCgnQVhWYWxpZGF0aW9uTW9kdWxlRmFjdG9yeScpIGluc3RhbmNlczogYW55W10pIHtcbiAgICBpbnN0YW5jZXMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgZigpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,98 @@
1
+ import { Injectable, Injector, inject } from '@angular/core';
2
+ import { AX_VALIDATION_CONFIG, } from './validation.config';
3
+ import { AXTranslationService } from '@acorex/core/translation';
4
+ import { merge } from 'lodash-es';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@acorex/core/translation";
7
+ export class AXValidationRegistryService {
8
+ get customRules() {
9
+ return this.configs.rules;
10
+ }
11
+ constructor(injector) {
12
+ this.plugins = [];
13
+ this.configs = inject(AX_VALIDATION_CONFIG);
14
+ this.injector = injector;
15
+ }
16
+ register(...plugins) {
17
+ plugins.forEach((t) => {
18
+ const childInjector = Injector.create({
19
+ providers: [{ provide: t, useClass: t, deps: [] }],
20
+ parent: this.injector,
21
+ });
22
+ const v = childInjector.get(t);
23
+ if (v && !this.plugins.some((p) => p.name == v.name)) {
24
+ this.plugins.push(v);
25
+ }
26
+ });
27
+ }
28
+ get(ruleName) {
29
+ return this.plugins.find((c) => c.name == ruleName);
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationRegistryService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
32
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationRegistryService, providedIn: 'root' }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationRegistryService, decorators: [{
35
+ type: Injectable,
36
+ args: [{
37
+ providedIn: 'root',
38
+ }]
39
+ }], ctorParameters: () => [{ type: i0.Injector }] });
40
+ export class AXValidationService {
41
+ constructor(pluginRegistry, translationService) {
42
+ this.pluginRegistry = pluginRegistry;
43
+ this.translationService = translationService;
44
+ }
45
+ async validate(ruleName, value, options) {
46
+ const customRule = this.pluginRegistry.customRules[ruleName];
47
+ const validator = this.pluginRegistry.get(ruleName);
48
+ if (!validator && !customRule) {
49
+ return {
50
+ rule: ruleName,
51
+ result: false,
52
+ message: await this.translationService.translateAsync('validation.messages.invalid-rull-name', { params: { name: ruleName } }),
53
+ value,
54
+ };
55
+ }
56
+ if (options?.message) {
57
+ options.message = await this.translationService.translateAsync(options.message);
58
+ }
59
+ //
60
+ if (validator)
61
+ return validator.validate(value, options);
62
+ else {
63
+ return this.validate(customRule.rule, value, merge(options, customRule.options));
64
+ }
65
+ }
66
+ ruleFor(value) {
67
+ return new AXValidationRuleChain(this, value);
68
+ }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationService, deps: [{ token: AXValidationRegistryService }, { token: i1.AXTranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationService, providedIn: 'root' }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationService, decorators: [{
73
+ type: Injectable,
74
+ args: [{ providedIn: 'root' }]
75
+ }], ctorParameters: () => [{ type: AXValidationRegistryService }, { type: i1.AXTranslationService }] });
76
+ class AXValidationRuleChain {
77
+ constructor(validationService, initialValue) {
78
+ this.validationService = validationService;
79
+ this.initialValue = initialValue;
80
+ this.rules = [];
81
+ this.validationSummary = { result: true, rules: [] };
82
+ }
83
+ addRule(name, options) {
84
+ this.rules.push({ name, options });
85
+ return this;
86
+ }
87
+ async validate() {
88
+ for (const rule of this.rules) {
89
+ const result = await this.validationService.validate(rule.name, this.initialValue, rule.options);
90
+ this.validationSummary.rules.push(result);
91
+ if (!result.result) {
92
+ this.validationSummary.result = false;
93
+ }
94
+ }
95
+ return this.validationSummary;
96
+ }
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3ZhbGlkYXRpb24vc3JjL2xpYi92YWxpZGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTdELE9BQU8sRUFFTCxvQkFBb0IsR0FDckIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFLbEMsTUFBTSxPQUFPLDJCQUEyQjtJQUt0QyxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBSUQsWUFBWSxRQUFrQjtRQVZ0QixZQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUVqQyxZQUFPLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFTN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHLE9BQXVDO1FBQ2pELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNwQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2xELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxHQUFHLENBQUMsUUFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDOzhHQS9CVSwyQkFBMkI7a0hBQTNCLDJCQUEyQixjQUYxQixNQUFNOzsyRkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQW9DRCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ1UsY0FBMkMsRUFDM0Msa0JBQXdDO1FBRHhDLG1CQUFjLEdBQWQsY0FBYyxDQUE2QjtRQUMzQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO0lBQy9DLENBQUM7SUFFSixLQUFLLENBQUMsUUFBUSxDQUNaLFFBQWdCLEVBQ2hCLEtBQWMsRUFDZCxPQUFpQztRQUVqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUIsT0FBTztnQkFDTCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsS0FBSztnQkFDYixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUNuRCx1Q0FBdUMsRUFDdkMsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDL0I7Z0JBQ0QsS0FBSzthQUNOLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQzVELE9BQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7UUFDSixDQUFDO1FBQ0QsRUFBRTtRQUNGLElBQUksU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDcEQsQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FDbEIsVUFBVSxDQUFDLElBQUksRUFDZixLQUFLLEVBQ0wsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQ25DLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFjO1FBQ3BCLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs4R0E1Q1UsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFnRGxDLE1BQU0scUJBQXFCO0lBSXpCLFlBQ1UsaUJBQXNDLEVBQ3RDLFlBQXFCO1FBRHJCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBcUI7UUFDdEMsaUJBQVksR0FBWixZQUFZLENBQVM7UUFMdkIsVUFBSyxHQUEwRCxFQUFFLENBQUM7UUFDbEUsc0JBQWlCLEdBQXdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFLMUUsQ0FBQztJQUVKLE9BQU8sQ0FDTCxJQUFPLEVBQ1AsT0FBdUM7UUFFdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FDbEQsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvblJ1bGUsXG4gIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zLFxuICBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCxcbiAgQVhWYWxpZGF0aW9uUnVsZVJlc3VsdCxcbiAgQVhWYWxpZGF0aW9uU3VtbWFyeSxcbn0gZnJvbSAnLi92YWxpZGF0aW9uLnR5cGVzJztcbmltcG9ydCB7XG4gIEFYVmFsaWRhdGlvbkNvbmZpZ1J1bGVzLFxuICBBWF9WQUxJREFUSU9OX0NPTkZJRyxcbn0gZnJvbSAnLi92YWxpZGF0aW9uLmNvbmZpZyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFZhbGlkYXRpb25SZWdpc3RyeVNlcnZpY2Uge1xuICBwcml2YXRlIHBsdWdpbnM6IEFYVmFsaWRhdGlvblJ1bGVbXSA9IFtdO1xuXG4gIHByaXZhdGUgY29uZmlncyA9IGluamVjdChBWF9WQUxJREFUSU9OX0NPTkZJRyk7XG5cbiAgcHVibGljIGdldCBjdXN0b21SdWxlcygpOiBBWFZhbGlkYXRpb25Db25maWdSdWxlcyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlncy5ydWxlcztcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgfVxuXG4gIHJlZ2lzdGVyKC4uLnBsdWdpbnM6IChuZXcgKCkgPT4gQVhWYWxpZGF0aW9uUnVsZSlbXSkge1xuICAgIHBsdWdpbnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogdCwgdXNlQ2xhc3M6IHQsIGRlcHM6IFtdIH1dLFxuICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHYgPSBjaGlsZEluamVjdG9yLmdldCh0KTtcblxuICAgICAgaWYgKHYgJiYgIXRoaXMucGx1Z2lucy5zb21lKChwKSA9PiBwLm5hbWUgPT0gdi5uYW1lKSkge1xuICAgICAgICB0aGlzLnBsdWdpbnMucHVzaCh2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldChydWxlTmFtZTogc3RyaW5nKTogQVhWYWxpZGF0aW9uUnVsZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2lucy5maW5kKChjKSA9PiBjLm5hbWUgPT0gcnVsZU5hbWUpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhWYWxpZGF0aW9uU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGx1Z2luUmVnaXN0cnk6IEFYVmFsaWRhdGlvblJlZ2lzdHJ5U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogQVhUcmFuc2xhdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIHZhbGlkYXRlKFxuICAgIHJ1bGVOYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgb3B0aW9ucz86IEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zXG4gICk6IFByb21pc2U8QVhWYWxpZGF0aW9uUnVsZVJlc3VsdD4ge1xuICAgIGNvbnN0IGN1c3RvbVJ1bGUgPSB0aGlzLnBsdWdpblJlZ2lzdHJ5LmN1c3RvbVJ1bGVzW3J1bGVOYW1lXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLnBsdWdpblJlZ2lzdHJ5LmdldChydWxlTmFtZSk7XG5cbiAgICBpZiAoIXZhbGlkYXRvciAmJiAhY3VzdG9tUnVsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcnVsZTogcnVsZU5hbWUsXG4gICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICd2YWxpZGF0aW9uLm1lc3NhZ2VzLmludmFsaWQtcnVsbC1uYW1lJyxcbiAgICAgICAgICB7IHBhcmFtczogeyBuYW1lOiBydWxlTmFtZSB9IH1cbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5tZXNzYWdlKSB7XG4gICAgICBvcHRpb25zLm1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgb3B0aW9ucy5tZXNzYWdlXG4gICAgICApO1xuICAgIH1cbiAgICAvL1xuICAgIGlmICh2YWxpZGF0b3IpIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGUodmFsdWUsIG9wdGlvbnMpO1xuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoXG4gICAgICAgIGN1c3RvbVJ1bGUucnVsZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG1lcmdlKG9wdGlvbnMsIGN1c3RvbVJ1bGUub3B0aW9ucylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcnVsZUZvcih2YWx1ZTogdW5rbm93bik6IEFYVmFsaWRhdGlvblJ1bGVDaGFpbiB7XG4gICAgcmV0dXJuIG5ldyBBWFZhbGlkYXRpb25SdWxlQ2hhaW4odGhpcywgdmFsdWUpO1xuICB9XG59XG5cbmNsYXNzIEFYVmFsaWRhdGlvblJ1bGVDaGFpbiB7XG4gIHByaXZhdGUgcnVsZXM6IHsgbmFtZTogc3RyaW5nOyBvcHRpb25zPzogQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMgfVtdID0gW107XG4gIHByaXZhdGUgdmFsaWRhdGlvblN1bW1hcnk6IEFYVmFsaWRhdGlvblN1bW1hcnkgPSB7IHJlc3VsdDogdHJ1ZSwgcnVsZXM6IFtdIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogQVhWYWxpZGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGluaXRpYWxWYWx1ZTogdW5rbm93blxuICApIHt9XG5cbiAgYWRkUnVsZTxLIGV4dGVuZHMga2V5b2YgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnNNYXA+KFxuICAgIG5hbWU6IEssXG4gICAgb3B0aW9ucz86IEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwW0tdXG4gICk6IEFYVmFsaWRhdGlvblJ1bGVDaGFpbiB7XG4gICAgdGhpcy5ydWxlcy5wdXNoKHsgbmFtZSwgb3B0aW9ucyB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8QVhWYWxpZGF0aW9uU3VtbWFyeT4ge1xuICAgIGZvciAoY29uc3QgcnVsZSBvZiB0aGlzLnJ1bGVzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlKFxuICAgICAgICBydWxlLm5hbWUsXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlLFxuICAgICAgICBydWxlLm9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25TdW1tYXJ5LnJ1bGVzLnB1c2gocmVzdWx0KTtcbiAgICAgIGlmICghcmVzdWx0LnJlc3VsdCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25TdW1tYXJ5LnJlc3VsdCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU3VtbWFyeTtcbiAgfVxufVxuIl19