@acorex/core 16.0.2 → 17.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,488 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, inject, InjectionToken, Injector, NgModule, Inject } from '@angular/core';
3
+ import { isString, isEmpty, isNull, isUndefined, isNumber, isArray, find, isEqual, merge } from 'lodash-es';
4
+ import * as i1 from '@acorex/core/translation';
5
+ import { AXTranslationService } from '@acorex/core/translation';
6
+
7
+ class AXCallbackValidationRule {
8
+ get name() {
9
+ return 'callback';
10
+ }
11
+ async validate(value, options) {
12
+ const validationResult = options?.validate(value, options) || {
13
+ result: false,
14
+ message: 'Invalid callback function',
15
+ };
16
+ const createResult = (result) => ({
17
+ rule: this.name,
18
+ result: result.result,
19
+ message: result.message ?? options?.message ?? '',
20
+ value: value,
21
+ });
22
+ if (validationResult instanceof Promise) {
23
+ return validationResult.then(createResult);
24
+ }
25
+ return createResult(validationResult);
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXCallbackValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
28
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXCallbackValidationRule }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXCallbackValidationRule, decorators: [{
31
+ type: Injectable
32
+ }] });
33
+
34
+ class AXRegexValidationRule {
35
+ constructor() {
36
+ this.traslationService = inject(AXTranslationService);
37
+ }
38
+ get name() {
39
+ return 'regex';
40
+ }
41
+ async validate(value, options) {
42
+ // Convert string pattern to RegExp if necessary
43
+ const regexPattern = typeof options.pattern === 'string'
44
+ ? new RegExp(options.pattern)
45
+ : options.pattern;
46
+ if (!value || (isString(value) && isEmpty(value.trim()))) {
47
+ return {
48
+ rule: this.name,
49
+ result: true,
50
+ message: null,
51
+ value: value,
52
+ };
53
+ }
54
+ else if (!isString(value)) {
55
+ return {
56
+ rule: this.name,
57
+ result: false,
58
+ message: `${value} is not string value.`,
59
+ value: value,
60
+ };
61
+ }
62
+ const isValid = regexPattern.test(value);
63
+ const translatedMessage = await this.traslationService.translateAsync(options?.message ??
64
+ `The value does not match the pattern ${regexPattern}.`, { params: { title: options?.['title'] } });
65
+ return {
66
+ rule: this.name,
67
+ result: isValid,
68
+ message: isValid ? null : translatedMessage,
69
+ value: value,
70
+ };
71
+ }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRegexValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
73
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRegexValidationRule }); }
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRegexValidationRule, decorators: [{
76
+ type: Injectable
77
+ }] });
78
+
79
+ class AXRequiredValidationRule {
80
+ constructor() {
81
+ this.traslationService = inject(AXTranslationService);
82
+ }
83
+ get name() {
84
+ return 'required';
85
+ }
86
+ async validate(value, options) {
87
+ const rules = [
88
+ { test: (val) => isNull(val) || isUndefined(val) },
89
+ { test: (val) => isString(val) && isEmpty(val.trim()) },
90
+ { test: (val) => isNumber(val) && isNaN(val) },
91
+ { test: (val) => isArray(val) && isEmpty(val) },
92
+ ];
93
+ const failedRule = find(rules, (rule) => rule.test(value));
94
+ const isValid = !failedRule;
95
+ const translatedMessage = await this.traslationService.translateAsync('validation.messages.required', { params: { title: options?.['title'] } });
96
+ const message = failedRule ? options?.message ?? translatedMessage : null;
97
+ return {
98
+ rule: this.name,
99
+ result: isValid,
100
+ message: message,
101
+ value,
102
+ };
103
+ }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRequiredValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
105
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRequiredValidationRule }); }
106
+ }
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRequiredValidationRule, decorators: [{
108
+ type: Injectable
109
+ }] });
110
+
111
+ // ax-max-length-validation-rule.ts
112
+ class AXLengthValidationRule {
113
+ get name() {
114
+ return 'length';
115
+ }
116
+ async validate(value, options) {
117
+ const isValid = value?.length >= options.min && value?.length <= options.max;
118
+ return {
119
+ rule: this.name,
120
+ result: isValid,
121
+ message: isValid
122
+ ? null
123
+ : options?.message ??
124
+ `The value must be between ${options.min} and ${options.max} chars`,
125
+ value: value,
126
+ };
127
+ }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLengthValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
129
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLengthValidationRule }); }
130
+ }
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLengthValidationRule, decorators: [{
132
+ type: Injectable
133
+ }] });
134
+
135
+ // ax-max-length-validation-rule.ts
136
+ class AXMaxLengthValidationRule {
137
+ get name() {
138
+ return 'maxLength';
139
+ }
140
+ async validate(value, options) {
141
+ const isValid = isEmpty(value) ? true : value?.length <= options.value;
142
+ return {
143
+ rule: this.name,
144
+ result: isValid,
145
+ message: isValid
146
+ ? ''
147
+ : options?.message ??
148
+ `The value must not exceed ${options.value} characters.`,
149
+ value: value,
150
+ };
151
+ }
152
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMaxLengthValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
153
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMaxLengthValidationRule }); }
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMaxLengthValidationRule, decorators: [{
156
+ type: Injectable
157
+ }] });
158
+
159
+ class AXMinLengthValidationRule {
160
+ get name() {
161
+ return 'minLength';
162
+ }
163
+ async validate(value, options) {
164
+ const isValid = isEmpty(value) ? true : value?.length >= options.value;
165
+ return {
166
+ rule: this.name,
167
+ result: isValid,
168
+ message: isValid
169
+ ? ''
170
+ : options?.message ??
171
+ `The value must be at least ${options.value} characters long.`,
172
+ value: value,
173
+ };
174
+ }
175
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMinLengthValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
176
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMinLengthValidationRule }); }
177
+ }
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXMinLengthValidationRule, decorators: [{
179
+ type: Injectable
180
+ }] });
181
+
182
+ class AXBetweenValidationRule {
183
+ get name() {
184
+ return 'between';
185
+ }
186
+ async validate(value, options) {
187
+ let isValid;
188
+ if (options.inclusive) {
189
+ isValid = value >= options.lowerValue && value <= options.upperValue;
190
+ }
191
+ else {
192
+ isValid = value > options.lowerValue && value < options.upperValue;
193
+ }
194
+ const rangeType = options.inclusive ? 'inclusive' : 'exclusive';
195
+ const baseMessage = `The value must be within the ${rangeType} range of ${options.lowerValue} to ${options.upperValue}.`;
196
+ return {
197
+ rule: this.name,
198
+ result: isValid || isEmpty(value),
199
+ message: isValid ? '' : options?.message ?? baseMessage,
200
+ value: value,
201
+ };
202
+ }
203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBetweenValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
204
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBetweenValidationRule }); }
205
+ }
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBetweenValidationRule, decorators: [{
207
+ type: Injectable
208
+ }] });
209
+
210
+ // ax-equal-validation-rule.ts
211
+ class AXEqualValidationRule {
212
+ get name() {
213
+ return 'equal';
214
+ }
215
+ async validate(value, options) {
216
+ const isValueEqual = isEqual(value, options.value);
217
+ const isValid = options.not ? !isValueEqual : isValueEqual;
218
+ const defaultMessage = `The value must ${options.not ? 'not ' : ''}be equal to ${options.value}.`;
219
+ return {
220
+ rule: this.name,
221
+ result: isValid,
222
+ message: isValid ? '' : options?.message ?? defaultMessage,
223
+ value: value,
224
+ };
225
+ }
226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXEqualValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
227
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXEqualValidationRule }); }
228
+ }
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXEqualValidationRule, decorators: [{
230
+ type: Injectable
231
+ }] });
232
+
233
+ // ax-greater-than-validation-rule.ts
234
+ class AXGreaterThanValidationRule {
235
+ get name() {
236
+ return 'greaterThan';
237
+ }
238
+ async validate(value, options) {
239
+ const isValid = isNull(value) || isUndefined(value)
240
+ ? true
241
+ : options.inclusive
242
+ ? value >= options.value
243
+ : value > options.value;
244
+ const baseMessage = `The value must be ${options.inclusive ? 'greater than or equal to' : 'greater than'} ${options.value}.`;
245
+ return {
246
+ rule: this.name,
247
+ result: isValid,
248
+ message: isValid ? '' : options?.message ?? baseMessage,
249
+ value: value,
250
+ };
251
+ }
252
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXGreaterThanValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
253
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXGreaterThanValidationRule }); }
254
+ }
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXGreaterThanValidationRule, decorators: [{
256
+ type: Injectable
257
+ }] });
258
+
259
+ // ax-less-than-validation-rule.ts
260
+ class AXLessThanValidationRule {
261
+ get name() {
262
+ return 'lessThan';
263
+ }
264
+ async validate(value, options) {
265
+ const isValid = isNull(value) || isUndefined(value)
266
+ ? true
267
+ : options.inclusive
268
+ ? value <= options.value
269
+ : value < options.value;
270
+ const baseMessage = `The value must be ${options.inclusive ? 'less than or equal to' : 'less than'} ${options.value}.`;
271
+ return {
272
+ rule: this.name,
273
+ result: isValid,
274
+ message: isValid ? '' : options?.message ?? baseMessage,
275
+ value: value,
276
+ };
277
+ }
278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLessThanValidationRule, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
279
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLessThanValidationRule }); }
280
+ }
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXLessThanValidationRule, decorators: [{
282
+ type: Injectable
283
+ }] });
284
+
285
+ const AX_VALIDATION_CONFIG = new InjectionToken('AX_VALIDATION_CONFIG', {
286
+ providedIn: 'root',
287
+ factory: () => {
288
+ return AXValidationDefaultConfig;
289
+ },
290
+ });
291
+ const AXValidationDefaultConfig = {
292
+ rules: {
293
+ email: {
294
+ rule: 'regex',
295
+ options: {
296
+ 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,}))$/,
297
+ message: 'validation.messages.email',
298
+ },
299
+ },
300
+ phone: {
301
+ rule: 'regex',
302
+ options: {
303
+ pattern: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$/,
304
+ message: 'validation.messages.phone',
305
+ },
306
+ },
307
+ },
308
+ };
309
+ function validationConfig(config = {}) {
310
+ const result = {
311
+ ...AXValidationDefaultConfig,
312
+ ...config,
313
+ };
314
+ return result;
315
+ }
316
+
317
+ class AXValidationRegistryService {
318
+ get customRules() {
319
+ return this.configs.rules;
320
+ }
321
+ constructor(injector) {
322
+ this.plugins = [];
323
+ this.configs = inject(AX_VALIDATION_CONFIG);
324
+ this.injector = injector;
325
+ }
326
+ register(...plugins) {
327
+ plugins.forEach((t) => {
328
+ const childInjector = Injector.create({
329
+ providers: [{ provide: t, useClass: t, deps: [] }],
330
+ parent: this.injector,
331
+ });
332
+ const v = childInjector.get(t);
333
+ if (v && !this.plugins.some((p) => p.name == v.name)) {
334
+ this.plugins.push(v);
335
+ }
336
+ });
337
+ }
338
+ get(ruleName) {
339
+ return this.plugins.find((c) => c.name == ruleName);
340
+ }
341
+ 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 }); }
342
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationRegistryService, providedIn: 'root' }); }
343
+ }
344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationRegistryService, decorators: [{
345
+ type: Injectable,
346
+ args: [{
347
+ providedIn: 'root',
348
+ }]
349
+ }], ctorParameters: () => [{ type: i0.Injector }] });
350
+ class AXValidationService {
351
+ constructor(pluginRegistry, translationService) {
352
+ this.pluginRegistry = pluginRegistry;
353
+ this.translationService = translationService;
354
+ }
355
+ async validate(ruleName, value, options) {
356
+ const customRule = this.pluginRegistry.customRules[ruleName];
357
+ const validator = this.pluginRegistry.get(ruleName);
358
+ if (!validator && !customRule) {
359
+ return {
360
+ rule: ruleName,
361
+ result: false,
362
+ message: await this.translationService.translateAsync('validation.messages.invalid-rull-name', { params: { name: ruleName } }),
363
+ value,
364
+ };
365
+ }
366
+ if (options?.message) {
367
+ options.message = await this.translationService.translateAsync(options.message);
368
+ }
369
+ //
370
+ if (validator)
371
+ return validator.validate(value, options);
372
+ else {
373
+ return this.validate(customRule.rule, value, merge(options, customRule.options));
374
+ }
375
+ }
376
+ ruleFor(value) {
377
+ return new AXValidationRuleChain(this, value);
378
+ }
379
+ 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 }); }
380
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationService, providedIn: 'root' }); }
381
+ }
382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationService, decorators: [{
383
+ type: Injectable,
384
+ args: [{ providedIn: 'root' }]
385
+ }], ctorParameters: () => [{ type: AXValidationRegistryService }, { type: i1.AXTranslationService }] });
386
+ class AXValidationRuleChain {
387
+ constructor(validationService, initialValue) {
388
+ this.validationService = validationService;
389
+ this.initialValue = initialValue;
390
+ this.rules = [];
391
+ this.validationSummary = { result: true, rules: [] };
392
+ }
393
+ addRule(name, options) {
394
+ this.rules.push({ name, options });
395
+ return this;
396
+ }
397
+ async validate() {
398
+ for (const rule of this.rules) {
399
+ const result = await this.validationService.validate(rule.name, this.initialValue, rule.options);
400
+ this.validationSummary.rules.push(result);
401
+ if (!result.result) {
402
+ this.validationSummary.result = false;
403
+ }
404
+ }
405
+ return this.validationSummary;
406
+ }
407
+ }
408
+
409
+ const BUILT_IN_RULES = [
410
+ AXRequiredValidationRule,
411
+ AXRegexValidationRule,
412
+ AXRequiredValidationRule,
413
+ AXCallbackValidationRule,
414
+ //
415
+ AXMinLengthValidationRule,
416
+ AXMaxLengthValidationRule,
417
+ AXLengthValidationRule,
418
+ //
419
+ AXEqualValidationRule,
420
+ AXLessThanValidationRule,
421
+ AXGreaterThanValidationRule,
422
+ AXBetweenValidationRule,
423
+ ];
424
+ class AXValidationModule {
425
+ static forRoot(configs) {
426
+ return {
427
+ ngModule: AXValidationModule,
428
+ providers: [
429
+ ...(configs?.rules || []),
430
+ {
431
+ provide: 'AXValidationModuleFactory',
432
+ useFactory: (pluginRegistry) => () => {
433
+ pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
434
+ },
435
+ deps: [AXValidationRegistryService],
436
+ multi: true,
437
+ },
438
+ ],
439
+ };
440
+ }
441
+ static forChild(configs) {
442
+ return {
443
+ ngModule: AXValidationModule,
444
+ providers: [
445
+ ...(configs?.rules || []),
446
+ {
447
+ provide: 'AXValidationModuleFactory',
448
+ useFactory: (pluginRegistry) => () => {
449
+ pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
450
+ },
451
+ deps: [AXValidationRegistryService],
452
+ multi: true,
453
+ },
454
+ ],
455
+ };
456
+ }
457
+ /**
458
+ * @ignore
459
+ */
460
+ constructor(instances) {
461
+ instances.forEach((f) => {
462
+ f();
463
+ });
464
+ }
465
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule, deps: [{ token: 'AXValidationModuleFactory' }], target: i0.ɵɵFactoryTarget.NgModule }); }
466
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule }); }
467
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule, providers: [...BUILT_IN_RULES] }); }
468
+ }
469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXValidationModule, decorators: [{
470
+ type: NgModule,
471
+ args: [{
472
+ imports: [],
473
+ providers: [...BUILT_IN_RULES],
474
+ }]
475
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
476
+ type: Inject,
477
+ args: ['AXValidationModuleFactory']
478
+ }] }] });
479
+
480
+ class AXValidationRule {
481
+ }
482
+
483
+ /**
484
+ * Generated bundle index. Do not edit.
485
+ */
486
+
487
+ export { AXBetweenValidationRule, AXCallbackValidationRule, AXEqualValidationRule, AXGreaterThanValidationRule, AXLengthValidationRule, AXLessThanValidationRule, AXMaxLengthValidationRule, AXMinLengthValidationRule, AXRegexValidationRule, AXRequiredValidationRule, AXValidationDefaultConfig, AXValidationModule, AXValidationRegistryService, AXValidationRule, AXValidationService, AX_VALIDATION_CONFIG, validationConfig };
488
+ //# sourceMappingURL=acorex-core-validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-core-validation.mjs","sources":["../../../../libs/core/validation/src/lib/rules/callback-rule.ts","../../../../libs/core/validation/src/lib/rules/regex-rule.ts","../../../../libs/core/validation/src/lib/rules/required-rule.ts","../../../../libs/core/validation/src/lib/rules/length-rule.ts","../../../../libs/core/validation/src/lib/rules/maxlength-rule.ts","../../../../libs/core/validation/src/lib/rules/minlength-rule.ts","../../../../libs/core/validation/src/lib/rules/between-rule.ts","../../../../libs/core/validation/src/lib/rules/equal-rule.ts","../../../../libs/core/validation/src/lib/rules/greater-than.ts","../../../../libs/core/validation/src/lib/rules/less-than-rule.ts","../../../../libs/core/validation/src/lib/validation.config.ts","../../../../libs/core/validation/src/lib/validation.service.ts","../../../../libs/core/validation/src/lib/validation.module.ts","../../../../libs/core/validation/src/lib/validation.types.ts","../../../../libs/core/validation/src/acorex-core-validation.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\n\nexport type AXCallbackValidation<T> = (\n value: T,\n options?: AXCallbackValidationRuleOptions<T>\n) =>\n | Promise<{ result: boolean; message?: string }>\n | { result: boolean; message?: string };\n\nexport interface AXCallbackValidationRuleOptions<T>\n extends AXValidationRuleOptions {\n validate: AXCallbackValidation<T>;\n}\n\n// Augment the AXValidationRuleOptionsMap\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n callback: AXCallbackValidationRuleOptions<unknown>;\n }\n}\n\n@Injectable()\nexport class AXCallbackValidationRule<T> implements AXValidationRule {\n get name(): string {\n return 'callback';\n }\n\n async validate(\n value: T,\n options: AXCallbackValidationRuleOptions<T>\n ): Promise<AXValidationRuleResult> {\n const validationResult = options?.validate(value, options) || {\n result: false,\n message: 'Invalid callback function',\n };\n const createResult = (result: { result: boolean; message?: string }) => ({\n rule: this.name,\n result: result.result,\n message: result.message ?? options?.message ?? '',\n value: value,\n });\n\n if (validationResult instanceof Promise) {\n return validationResult.then(createResult);\n }\n\n return createResult(validationResult);\n }\n}\n","import { isEmpty, isString } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable, inject } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nexport interface AXRegexValidationRuleOptions extends AXValidationRuleOptions {\n pattern: string | RegExp;\n}\n\n// Augment the AXValidationRuleOptionsMap\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n regex: AXRegexValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXRegexValidationRule implements AXValidationRule {\n private traslationService = inject(AXTranslationService);\n\n get name(): string {\n return 'regex';\n }\n\n async validate(\n value: string,\n options: AXRegexValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n // Convert string pattern to RegExp if necessary\n const regexPattern =\n typeof options.pattern === 'string'\n ? new RegExp(options.pattern)\n : options.pattern;\n\n if (!value || (isString(value) && isEmpty(value.trim()))) {\n return {\n rule: this.name,\n result: true,\n message: null,\n value: value,\n };\n } else if (!isString(value)) {\n return {\n rule: this.name,\n result: false,\n message: `${value} is not string value.`,\n value: value,\n };\n }\n\n const isValid = regexPattern.test(value);\n const translatedMessage = await this.traslationService.translateAsync(\n options?.message ??\n `The value does not match the pattern ${regexPattern}.`,\n { params: { title: options?.['title'] } }\n );\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? null : translatedMessage,\n value: value,\n };\n }\n}\n","import {\n find,\n isArray,\n isEmpty,\n isNull,\n isNumber,\n isString,\n isUndefined,\n} from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable, inject } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { firstValueFrom, lastValueFrom } from 'rxjs';\n\nexport interface AXRequiredValidationRuleOptions\n extends AXValidationRuleOptions {}\n\n// Augment the AXValidationRuleOptionsMap\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n required: AXRequiredValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXRequiredValidationRule implements AXValidationRule {\n private traslationService = inject(AXTranslationService);\n\n get name(): string {\n return 'required';\n }\n\n async validate(\n value?: unknown,\n options?: AXRequiredValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const rules = [\n { test: (val) => isNull(val) || isUndefined(val) },\n { test: (val) => isString(val) && isEmpty(val.trim()) },\n { test: (val) => isNumber(val) && isNaN(val) },\n { test: (val) => isArray(val) && isEmpty(val) },\n ];\n\n const failedRule = find(rules, (rule) => rule.test(value));\n const isValid = !failedRule;\n const translatedMessage = await this.traslationService.translateAsync(\n 'validation.messages.required',\n { params: { title: options?.['title'] } }\n );\n const message = failedRule ? options?.message ?? translatedMessage : null;\n\n return {\n rule: this.name,\n result: isValid,\n message: message,\n value,\n };\n }\n}\n","// ax-max-length-validation-rule.ts\nimport { Injectable } from '@angular/core';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\n\nexport interface AXLengthValidationRuleOptions extends AXValidationRuleOptions {\n min: number;\n max: number;\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n length: AXLengthValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXLengthValidationRule implements AXValidationRule {\n get name(): string {\n return 'length';\n }\n\n async validate(\n value: string,\n options: AXLengthValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const isValid =\n value?.length >= options.min && value?.length <= options.max;\n return {\n rule: this.name,\n result: isValid,\n message: isValid\n ? null\n : options?.message ??\n `The value must be between ${options.min} and ${options.max} chars`,\n value: value,\n };\n }\n}\n","// ax-max-length-validation-rule.ts\nimport { isEmpty } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable } from '@angular/core';\n\nexport interface AXMaxLengthValidationRuleOptions\n extends AXValidationRuleOptions {\n value: number;\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n maxLength: AXMaxLengthValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXMaxLengthValidationRule implements AXValidationRule {\n get name(): string {\n return 'maxLength';\n }\n\n async validate(\n value: string,\n options: AXMaxLengthValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const isValid = isEmpty(value) ? true : value?.length <= options.value;\n return {\n rule: this.name,\n result: isValid,\n message: isValid\n ? ''\n : options?.message ??\n `The value must not exceed ${options.value} characters.`,\n value: value,\n };\n }\n}\n","import { isEmpty } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable } from '@angular/core';\n\nexport interface AXMinLengthValidationRuleOptions\n extends AXValidationRuleOptions {\n value: number;\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n minLength: AXMinLengthValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXMinLengthValidationRule implements AXValidationRule {\n get name(): string {\n return 'minLength';\n }\n\n async validate(\n value: string,\n options: AXMinLengthValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const isValid = isEmpty(value) ? true : value?.length >= options.value;\n return {\n rule: this.name,\n result: isValid,\n message: isValid\n ? ''\n : options?.message ??\n `The value must be at least ${options.value} characters long.`,\n value: value,\n };\n }\n}\n","import { isEmpty } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable } from '@angular/core';\n\nexport interface AXBetweenValidationRuleOptions<T = number | Date>\n extends AXValidationRuleOptions {\n lowerValue: T;\n upperValue: T;\n inclusive?: boolean; // Optional flag for inclusiveness\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n between: AXBetweenValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXBetweenValidationRule<T = number | Date>\n implements AXValidationRule\n{\n get name(): string {\n return 'between';\n }\n\n async validate(\n value: T,\n options: AXBetweenValidationRuleOptions<T>\n ): Promise<AXValidationRuleResult> {\n let isValid;\n if (options.inclusive) {\n isValid = value >= options.lowerValue && value <= options.upperValue;\n } else {\n isValid = value > options.lowerValue && value < options.upperValue;\n }\n\n const rangeType = options.inclusive ? 'inclusive' : 'exclusive';\n const baseMessage = `The value must be within the ${rangeType} range of ${options.lowerValue} to ${options.upperValue}.`;\n\n return {\n rule: this.name,\n result: isValid || isEmpty(value),\n message: isValid ? '' : options?.message ?? baseMessage,\n value: value,\n };\n }\n}\n","// ax-equal-validation-rule.ts\nimport { isEqual } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable } from '@angular/core';\n\nexport interface AXEqualValidationRuleOptions extends AXValidationRuleOptions {\n value: any;\n not?: boolean; // Optional flag to invert the validation logic\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n equal: AXEqualValidationRuleOptions;\n }\n}\n@Injectable()\nexport class AXEqualValidationRule implements AXValidationRule {\n get name(): string {\n return 'equal';\n }\n\n async validate(\n value: any,\n options: AXEqualValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const isValueEqual = isEqual(value, options.value);\n const isValid = options.not ? !isValueEqual : isValueEqual;\n\n const defaultMessage = `The value must ${\n options.not ? 'not ' : ''\n }be equal to ${options.value}.`;\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? defaultMessage,\n value: value,\n };\n }\n}\n","// ax-greater-than-validation-rule.ts\nimport { isNull, isUndefined } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable } from '@angular/core';\n\nexport interface AXGreaterThanValidationRuleOptions\n extends AXValidationRuleOptions {\n value: number;\n inclusive?: boolean; // Optional flag for inclusiveness\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n greaterThan: AXGreaterThanValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXGreaterThanValidationRule implements AXValidationRule {\n get name(): string {\n return 'greaterThan';\n }\n\n async validate(\n value: number,\n options: AXGreaterThanValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const isValid =\n isNull(value) || isUndefined(value)\n ? true\n : options.inclusive\n ? value >= options.value\n : value > options.value;\n const baseMessage = `The value must be ${\n options.inclusive ? 'greater than or equal to' : 'greater than'\n } ${options.value}.`;\n\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? baseMessage,\n value: value,\n };\n }\n}\n","// ax-less-than-validation-rule.ts\nimport { isNull, isUndefined } from 'lodash-es';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleResult,\n} from '../validation.types';\nimport { Injectable } from '@angular/core';\n\nexport interface AXLessThanValidationRuleOptions\n extends AXValidationRuleOptions {\n value: number;\n inclusive?: boolean; // Optional flag for inclusiveness\n}\n\ndeclare module '../validation.types' {\n interface AXValidationRuleOptionsMap {\n lessThan: AXLessThanValidationRuleOptions;\n }\n}\n\n@Injectable()\nexport class AXLessThanValidationRule implements AXValidationRule {\n get name(): string {\n return 'lessThan';\n }\n\n async validate(\n value: number,\n options: AXLessThanValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const isValid =\n isNull(value) || isUndefined(value)\n ? true\n : options.inclusive\n ? value <= options.value\n : value < options.value;\n const baseMessage = `The value must be ${\n options.inclusive ? 'less than or equal to' : 'less than'\n } ${options.value}.`;\n\n return {\n rule: this.name,\n result: isValid,\n message: isValid ? '' : options?.message ?? baseMessage,\n value: value,\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n AXValidationRuleOptions,\n AXValidationRuleOptionsMap,\n} from './validation.types';\n\nexport type AXValidationConfigRules = {\n [key: string]: {\n rule: keyof AXValidationRuleOptionsMap;\n options: AXValidationRuleOptions;\n };\n};\n\nexport interface AXValidationConfig {\n rules: AXValidationConfigRules;\n}\n\nexport const AX_VALIDATION_CONFIG = new InjectionToken<AXValidationConfig>(\n 'AX_VALIDATION_CONFIG',\n {\n providedIn: 'root',\n factory: () => {\n return AXValidationDefaultConfig;\n },\n }\n);\n\nexport const AXValidationDefaultConfig: AXValidationConfig = {\n rules: {\n email: {\n rule: 'regex',\n options: {\n pattern:\n /^(([^<>()[\\]\\\\.,;:\\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,}))$/,\n message: 'validation.messages.email',\n },\n },\n phone: {\n rule: 'regex',\n options: {\n pattern: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*$/,\n message: 'validation.messages.phone',\n },\n },\n },\n};\n\nexport type AXPartialValidationConfig = Partial<AXValidationConfig>;\n\nexport function validationConfig(\n config: AXPartialValidationConfig = {}\n): AXValidationConfig {\n const result = {\n ...AXValidationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { Injectable, Injector, inject } from '@angular/core';\nimport {\n AXValidationRule,\n AXValidationRuleOptions,\n AXValidationRuleOptionsMap,\n AXValidationRuleResult,\n AXValidationSummary,\n} from './validation.types';\nimport {\n AXValidationConfigRules,\n AX_VALIDATION_CONFIG,\n} from './validation.config';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { merge } from 'lodash-es';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXValidationRegistryService {\n private plugins: AXValidationRule[] = [];\n\n private configs = inject(AX_VALIDATION_CONFIG);\n\n public get customRules(): AXValidationConfigRules {\n return this.configs.rules;\n }\n\n private injector: Injector;\n\n constructor(injector: Injector) {\n this.injector = injector;\n }\n\n register(...plugins: (new () => AXValidationRule)[]) {\n plugins.forEach((t) => {\n const childInjector = Injector.create({\n providers: [{ provide: t, useClass: t, deps: [] }],\n parent: this.injector,\n });\n const v = childInjector.get(t);\n\n if (v && !this.plugins.some((p) => p.name == v.name)) {\n this.plugins.push(v);\n }\n });\n }\n\n get(ruleName: string): AXValidationRule | undefined {\n return this.plugins.find((c) => c.name == ruleName);\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXValidationService {\n constructor(\n private pluginRegistry: AXValidationRegistryService,\n private translationService: AXTranslationService\n ) {}\n\n async validate(\n ruleName: string,\n value: unknown,\n options?: AXValidationRuleOptions\n ): Promise<AXValidationRuleResult> {\n const customRule = this.pluginRegistry.customRules[ruleName];\n const validator = this.pluginRegistry.get(ruleName);\n\n if (!validator && !customRule) {\n return {\n rule: ruleName,\n result: false,\n message: await this.translationService.translateAsync(\n 'validation.messages.invalid-rull-name',\n { params: { name: ruleName } }\n ),\n value,\n };\n }\n\n if (options?.message) {\n options.message = await this.translationService.translateAsync(\n options.message\n );\n }\n //\n if (validator) return validator.validate(value, options);\n else {\n return this.validate(\n customRule.rule,\n value,\n merge(options, customRule.options)\n );\n }\n }\n\n ruleFor(value: unknown): AXValidationRuleChain {\n return new AXValidationRuleChain(this, value);\n }\n}\n\nclass AXValidationRuleChain {\n private rules: { name: string; options?: AXValidationRuleOptions }[] = [];\n private validationSummary: AXValidationSummary = { result: true, rules: [] };\n\n constructor(\n private validationService: AXValidationService,\n private initialValue: unknown\n ) {}\n\n addRule<K extends keyof AXValidationRuleOptionsMap>(\n name: K,\n options?: AXValidationRuleOptionsMap[K]\n ): AXValidationRuleChain {\n this.rules.push({ name, options });\n return this;\n }\n\n async validate(): Promise<AXValidationSummary> {\n for (const rule of this.rules) {\n const result = await this.validationService.validate(\n rule.name,\n this.initialValue,\n rule.options\n );\n this.validationSummary.rules.push(result);\n if (!result.result) {\n this.validationSummary.result = false;\n }\n }\n return this.validationSummary;\n }\n}\n","import {\n APP_INITIALIZER,\n Inject,\n Injector,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport { AXValidationRegistryService } from './validation.service';\nimport { AXValidationRule } from './validation.types';\nimport { AXRegexValidationRule } from './rules/regex-rule';\nimport { AXRequiredValidationRule } from './rules/required-rule';\nimport { AXCallbackValidationRule } from './rules/callback-rule';\nimport { AXMinLengthValidationRule } from './rules/minlength-rule';\nimport { AXMaxLengthValidationRule } from './rules/maxlength-rule';\nimport { AXLengthValidationRule } from './rules/length-rule';\nimport { AXEqualValidationRule } from './rules/equal-rule';\nimport { AXLessThanValidationRule } from './rules/less-than-rule';\nimport { AXGreaterThanValidationRule } from './rules/greater-than';\nimport { AXBetweenValidationRule } from './rules/between-rule';\n\nconst BUILT_IN_RULES = [\n AXRequiredValidationRule,\n AXRegexValidationRule,\n AXRequiredValidationRule,\n AXCallbackValidationRule,\n //\n AXMinLengthValidationRule,\n AXMaxLengthValidationRule,\n AXLengthValidationRule,\n //\n AXEqualValidationRule,\n AXLessThanValidationRule,\n AXGreaterThanValidationRule,\n AXBetweenValidationRule,\n];\n\nexport interface AXValidationModuleConfigs {\n rules: (new () => AXValidationRule)[];\n}\n\n@NgModule({\n imports: [],\n providers: [...BUILT_IN_RULES],\n})\nexport class AXValidationModule {\n static forRoot(\n configs?: AXValidationModuleConfigs\n ): ModuleWithProviders<AXValidationModule> {\n return {\n ngModule: AXValidationModule,\n providers: [\n ...(configs?.rules || []),\n {\n provide: 'AXValidationModuleFactory',\n useFactory: (pluginRegistry: AXValidationRegistryService) => () => {\n pluginRegistry.register(\n ...[...BUILT_IN_RULES, ...(configs?.rules || [])]\n );\n },\n deps: [AXValidationRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(\n configs?: AXValidationModuleConfigs\n ): ModuleWithProviders<AXValidationModule> {\n return {\n ngModule: AXValidationModule,\n providers: [\n ...(configs?.rules || []),\n {\n provide: 'AXValidationModuleFactory',\n useFactory: (pluginRegistry: AXValidationRegistryService) => () => {\n pluginRegistry.register(\n ...[...BUILT_IN_RULES, ...(configs?.rules || [])]\n );\n },\n deps: [AXValidationRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(@Inject('AXValidationModuleFactory') instances: any[]) {\n instances.forEach((f) => {\n f();\n });\n }\n}\n","export interface AXValidationRuleOptions {\n message?: string;\n [key: string]: unknown;\n}\n\nexport interface AXValidationRuleOptionsMap {\n // initially empty, but will be extended by other modules\n}\n\nexport abstract class AXValidationRule {\n abstract get name(): string;\n abstract validate(\n value: unknown,\n options?: AXValidationRuleOptions\n ): Promise<AXValidationRuleResult>;\n}\n\nexport interface AXValidationRuleResult {\n rule: string;\n value?: unknown;\n message?: string | null;\n result: boolean;\n [key: string]: unknown;\n}\n\nexport interface AXValidationSummary {\n result: boolean;\n rules: AXValidationRuleResult[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}