@researchdatabox/sails-ng-common 0.2.1 → 5.0.0-RC2

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 (237) hide show
  1. package/dist/src/config/base-field-component.model.d.ts +26 -0
  2. package/dist/src/config/base-field-component.model.js +29 -0
  3. package/dist/src/config/base-field-component.outline.d.ts +108 -0
  4. package/dist/src/config/base-field-component.outline.js +3 -0
  5. package/dist/src/config/component/accordion.model.d.ts +103 -0
  6. package/dist/src/config/component/accordion.model.js +127 -0
  7. package/dist/src/config/component/accordion.outline.d.ts +162 -0
  8. package/dist/src/config/component/accordion.outline.js +13 -0
  9. package/dist/src/config/component/action-row-layout.model.d.ts +28 -0
  10. package/dist/src/config/component/action-row-layout.model.js +35 -0
  11. package/dist/src/config/component/action-row-layout.outline.d.ts +36 -0
  12. package/dist/src/config/component/action-row-layout.outline.js +6 -0
  13. package/dist/src/config/component/cancel-button.model.d.ts +48 -0
  14. package/dist/src/config/component/cancel-button.model.js +58 -0
  15. package/dist/src/config/component/cancel-button.outline.d.ts +85 -0
  16. package/dist/src/config/component/cancel-button.outline.js +6 -0
  17. package/dist/src/config/component/checkbox-input.model.d.ts +67 -0
  18. package/dist/src/config/component/checkbox-input.model.js +79 -0
  19. package/dist/src/config/component/checkbox-input.outline.d.ts +93 -0
  20. package/dist/src/config/component/checkbox-input.outline.js +8 -0
  21. package/dist/src/config/component/checkbox-tree.model.d.ts +68 -0
  22. package/dist/src/config/component/checkbox-tree.model.js +80 -0
  23. package/dist/src/config/component/checkbox-tree.outline.d.ts +105 -0
  24. package/dist/src/config/component/checkbox-tree.outline.js +8 -0
  25. package/dist/src/config/component/content.model.d.ts +46 -0
  26. package/dist/src/config/component/content.model.js +56 -0
  27. package/dist/src/config/component/content.outline.d.ts +74 -0
  28. package/dist/src/config/component/content.outline.js +6 -0
  29. package/dist/src/config/component/data-location.model.d.ts +83 -0
  30. package/dist/src/config/component/data-location.model.js +95 -0
  31. package/dist/src/config/component/data-location.outline.d.ts +124 -0
  32. package/dist/src/config/component/data-location.outline.js +6 -0
  33. package/dist/src/config/component/date-input.model.d.ts +67 -0
  34. package/dist/src/config/component/date-input.model.js +80 -0
  35. package/dist/src/config/component/date-input.outline.d.ts +88 -0
  36. package/dist/src/config/component/date-input.outline.js +8 -0
  37. package/dist/src/config/component/default-layout.model.d.ts +22 -0
  38. package/dist/src/config/component/default-layout.model.js +30 -0
  39. package/dist/src/config/component/default-layout.outline.d.ts +29 -0
  40. package/dist/src/config/component/default-layout.outline.js +5 -0
  41. package/dist/src/config/component/delete-button.model.d.ts +46 -0
  42. package/dist/src/config/component/delete-button.model.js +48 -0
  43. package/dist/src/config/component/delete-button.outline.d.ts +89 -0
  44. package/dist/src/config/component/delete-button.outline.js +5 -0
  45. package/dist/src/config/component/dropdown-input.model.d.ts +65 -0
  46. package/dist/src/config/component/dropdown-input.model.js +78 -0
  47. package/dist/src/config/component/dropdown-input.outline.d.ts +92 -0
  48. package/dist/src/config/component/dropdown-input.outline.js +8 -0
  49. package/dist/src/config/component/file-upload.model.d.ts +67 -0
  50. package/dist/src/config/component/file-upload.model.js +81 -0
  51. package/dist/src/config/component/file-upload.outline.d.ts +99 -0
  52. package/dist/src/config/component/file-upload.outline.js +8 -0
  53. package/dist/src/config/component/group.model.d.ts +61 -0
  54. package/dist/src/config/component/group.model.js +75 -0
  55. package/dist/src/config/component/group.outline.d.ts +83 -0
  56. package/dist/src/config/component/group.outline.js +8 -0
  57. package/dist/src/config/component/inline-layout.model.d.ts +22 -0
  58. package/dist/src/config/component/inline-layout.model.js +29 -0
  59. package/dist/src/config/component/inline-layout.outline.d.ts +29 -0
  60. package/dist/src/config/component/inline-layout.outline.js +5 -0
  61. package/dist/src/config/component/integration-status.model.d.ts +49 -0
  62. package/dist/src/config/component/integration-status.model.js +65 -0
  63. package/dist/src/config/component/integration-status.outline.d.ts +61 -0
  64. package/dist/src/config/component/integration-status.outline.js +5 -0
  65. package/dist/src/config/component/map.model.d.ts +69 -0
  66. package/dist/src/config/component/map.model.js +86 -0
  67. package/dist/src/config/component/map.outline.d.ts +110 -0
  68. package/dist/src/config/component/map.outline.js +8 -0
  69. package/dist/src/config/component/pdf-list.model.d.ts +68 -0
  70. package/dist/src/config/component/pdf-list.model.js +71 -0
  71. package/dist/src/config/component/pdf-list.outline.d.ts +97 -0
  72. package/dist/src/config/component/pdf-list.outline.js +6 -0
  73. package/dist/src/config/component/publish-data-location-refresh.model.d.ts +39 -0
  74. package/dist/src/config/component/publish-data-location-refresh.model.js +52 -0
  75. package/dist/src/config/component/publish-data-location-refresh.outline.d.ts +58 -0
  76. package/dist/src/config/component/publish-data-location-refresh.outline.js +5 -0
  77. package/dist/src/config/component/publish-data-location-selector.model.d.ts +78 -0
  78. package/dist/src/config/component/publish-data-location-selector.model.js +104 -0
  79. package/dist/src/config/component/publish-data-location-selector.outline.d.ts +110 -0
  80. package/dist/src/config/component/publish-data-location-selector.outline.js +6 -0
  81. package/dist/src/config/component/question-tree.helper.d.ts +58 -0
  82. package/dist/src/config/component/question-tree.helper.js +291 -0
  83. package/dist/src/config/component/question-tree.model.d.ts +64 -0
  84. package/dist/src/config/component/question-tree.model.js +80 -0
  85. package/dist/src/config/component/question-tree.outline.d.ts +314 -0
  86. package/dist/src/config/component/question-tree.outline.js +9 -0
  87. package/dist/src/config/component/radio-input.model.d.ts +65 -0
  88. package/dist/src/config/component/radio-input.model.js +77 -0
  89. package/dist/src/config/component/radio-input.outline.d.ts +91 -0
  90. package/dist/src/config/component/radio-input.outline.js +8 -0
  91. package/dist/src/config/component/record-metadata-retriever.model.d.ts +41 -0
  92. package/dist/src/config/component/record-metadata-retriever.model.js +57 -0
  93. package/dist/src/config/component/record-metadata-retriever.outline.d.ts +53 -0
  94. package/dist/src/config/component/record-metadata-retriever.outline.js +5 -0
  95. package/dist/src/config/component/record-selector.model.d.ts +61 -0
  96. package/dist/src/config/component/record-selector.model.js +61 -0
  97. package/dist/src/config/component/record-selector.outline.d.ts +91 -0
  98. package/dist/src/config/component/record-selector.outline.js +6 -0
  99. package/dist/src/config/component/repeatable.model.d.ts +91 -0
  100. package/dist/src/config/component/repeatable.model.js +112 -0
  101. package/dist/src/config/component/repeatable.outline.d.ts +115 -0
  102. package/dist/src/config/component/repeatable.outline.js +10 -0
  103. package/dist/src/config/component/reusable.model.d.ts +42 -0
  104. package/dist/src/config/component/reusable.model.js +57 -0
  105. package/dist/src/config/component/reusable.outline.d.ts +55 -0
  106. package/dist/src/config/component/reusable.outline.js +6 -0
  107. package/dist/src/config/component/rich-text-editor.model.d.ts +65 -0
  108. package/dist/src/config/component/rich-text-editor.model.js +79 -0
  109. package/dist/src/config/component/rich-text-editor.outline.d.ts +92 -0
  110. package/dist/src/config/component/rich-text-editor.outline.js +8 -0
  111. package/dist/src/config/component/save-button.model.d.ts +49 -0
  112. package/dist/src/config/component/save-button.model.js +59 -0
  113. package/dist/src/config/component/save-button.outline.d.ts +90 -0
  114. package/dist/src/config/component/save-button.outline.js +6 -0
  115. package/dist/src/config/component/save-status.model.d.ts +42 -0
  116. package/dist/src/config/component/save-status.model.js +60 -0
  117. package/dist/src/config/component/save-status.outline.d.ts +58 -0
  118. package/dist/src/config/component/save-status.outline.js +6 -0
  119. package/dist/src/config/component/simple-input.model.d.ts +62 -0
  120. package/dist/src/config/component/simple-input.model.js +75 -0
  121. package/dist/src/config/component/simple-input.outline.d.ts +86 -0
  122. package/dist/src/config/component/simple-input.outline.js +9 -0
  123. package/dist/src/config/component/suggested-validation-summary.model.d.ts +45 -0
  124. package/dist/src/config/component/suggested-validation-summary.model.js +61 -0
  125. package/dist/src/config/component/suggested-validation-summary.outline.d.ts +57 -0
  126. package/dist/src/config/component/suggested-validation-summary.outline.js +5 -0
  127. package/dist/src/config/component/tab-content.model.d.ts +63 -0
  128. package/dist/src/config/component/tab-content.model.js +77 -0
  129. package/dist/src/config/component/tab-content.outline.d.ts +98 -0
  130. package/dist/src/config/component/tab-content.outline.js +8 -0
  131. package/dist/src/config/component/tab-nav-button.model.d.ts +45 -0
  132. package/dist/src/config/component/tab-nav-button.model.js +55 -0
  133. package/dist/src/config/component/tab-nav-button.outline.d.ts +70 -0
  134. package/dist/src/config/component/tab-nav-button.outline.js +6 -0
  135. package/dist/src/config/component/tab.model.d.ts +71 -0
  136. package/dist/src/config/component/tab.model.js +84 -0
  137. package/dist/src/config/component/tab.outline.d.ts +112 -0
  138. package/dist/src/config/component/tab.outline.js +9 -0
  139. package/dist/src/config/component/text-area.model.d.ts +63 -0
  140. package/dist/src/config/component/text-area.model.js +76 -0
  141. package/dist/src/config/component/text-area.outline.d.ts +87 -0
  142. package/dist/src/config/component/text-area.outline.js +8 -0
  143. package/dist/src/config/component/typeahead-input.model.d.ts +83 -0
  144. package/dist/src/config/component/typeahead-input.model.js +97 -0
  145. package/dist/src/config/component/typeahead-input.outline.d.ts +199 -0
  146. package/dist/src/config/component/typeahead-input.outline.js +10 -0
  147. package/dist/src/config/component/validation-summary.model.d.ts +42 -0
  148. package/dist/src/config/component/validation-summary.model.js +60 -0
  149. package/dist/src/config/component/validation-summary.outline.d.ts +63 -0
  150. package/dist/src/config/component/validation-summary.outline.js +6 -0
  151. package/dist/src/config/dictionary.model.d.ts +648 -0
  152. package/dist/src/config/dictionary.model.js +181 -0
  153. package/dist/src/config/dictionary.outline.d.ts +96 -0
  154. package/dist/src/config/dictionary.outline.js +3 -0
  155. package/dist/src/config/field-component.model.d.ts +7 -0
  156. package/dist/src/config/field-component.model.js +11 -0
  157. package/dist/src/config/field-component.outline.d.ts +20 -0
  158. package/dist/src/config/field-component.outline.js +3 -0
  159. package/dist/src/config/field-layout.model.d.ts +19 -0
  160. package/dist/src/config/field-layout.model.js +23 -0
  161. package/dist/src/config/field-layout.outline.d.ts +42 -0
  162. package/dist/src/config/field-layout.outline.js +3 -0
  163. package/dist/src/config/field-model.model.d.ts +21 -0
  164. package/dist/src/config/field-model.model.js +24 -0
  165. package/dist/src/config/field-model.outline.d.ts +63 -0
  166. package/dist/src/config/field-model.outline.js +3 -0
  167. package/dist/src/config/field.model.d.ts +12 -0
  168. package/dist/src/config/field.model.js +12 -0
  169. package/dist/src/config/field.outline.d.ts +19 -0
  170. package/dist/src/config/field.outline.js +3 -0
  171. package/dist/src/config/form-behaviour.outline.d.ts +128 -0
  172. package/dist/src/config/form-behaviour.outline.js +40 -0
  173. package/dist/src/config/form-component.model.d.ts +38 -0
  174. package/dist/src/config/form-component.model.js +36 -0
  175. package/dist/src/config/form-component.outline.d.ts +305 -0
  176. package/dist/src/config/form-component.outline.js +27 -0
  177. package/dist/src/config/form-config.model.d.ts +33 -0
  178. package/dist/src/config/form-config.model.js +36 -0
  179. package/dist/src/config/form-config.outline.d.ts +111 -0
  180. package/dist/src/config/form-config.outline.js +3 -0
  181. package/dist/src/config/form-override.model.d.ts +146 -0
  182. package/dist/src/config/form-override.model.js +1523 -0
  183. package/dist/src/config/form-override.outline.d.ts +15 -0
  184. package/dist/src/config/form-override.outline.js +3 -0
  185. package/dist/src/config/form-prehydrate.outline.d.ts +17 -0
  186. package/dist/src/config/form-prehydrate.outline.js +5 -0
  187. package/dist/src/config/form-types.model.d.ts +6 -0
  188. package/dist/src/config/form-types.model.js +23 -0
  189. package/dist/src/config/form-types.outline.d.ts +48 -0
  190. package/dist/src/config/form-types.outline.js +137 -0
  191. package/dist/src/config/helpers.d.ts +31 -0
  192. package/dist/src/config/helpers.js +122 -0
  193. package/dist/src/config/names/naming-helpers.d.ts +112 -0
  194. package/dist/src/config/names/naming-helpers.js +188 -0
  195. package/dist/src/config/names/query-helpers.d.ts +43 -0
  196. package/dist/src/config/names/query-helpers.js +59 -0
  197. package/dist/src/config/shared.outline.d.ts +54 -0
  198. package/dist/src/config/shared.outline.js +41 -0
  199. package/dist/src/config/visitor/base.model.d.ts +143 -0
  200. package/dist/src/config/visitor/base.model.js +336 -0
  201. package/dist/src/config/visitor/base.outline.d.ts +146 -0
  202. package/dist/src/config/visitor/base.outline.js +3 -0
  203. package/dist/src/config/visitor/common.model.d.ts +119 -0
  204. package/dist/src/config/visitor/common.model.js +422 -0
  205. package/dist/src/date-format-helpers.d.ts +1 -0
  206. package/dist/src/date-format-helpers.js +21 -0
  207. package/dist/src/handlebars-helpers.d.ts +258 -0
  208. package/dist/src/handlebars-helpers.js +715 -0
  209. package/dist/src/html-helpers.d.ts +15 -0
  210. package/dist/src/html-helpers.js +42 -0
  211. package/dist/src/index.d.ts +118 -3
  212. package/dist/src/index.js +127 -2
  213. package/dist/src/jsonata-helpers.d.ts +40 -0
  214. package/dist/src/jsonata-helpers.js +118 -0
  215. package/dist/src/logger.interface.d.ts +14 -0
  216. package/dist/src/logger.interface.js +3 -0
  217. package/dist/src/record.model.d.ts +23 -0
  218. package/dist/src/record.model.js +19 -1
  219. package/dist/src/report.model.d.ts +46 -0
  220. package/dist/src/status.model.d.ts +22 -0
  221. package/dist/src/status.model.js +28 -0
  222. package/dist/src/template.outline.d.ts +82 -0
  223. package/dist/src/template.outline.js +14 -0
  224. package/dist/src/translation-helpers.d.ts +26 -0
  225. package/dist/src/translation-helpers.js +71 -0
  226. package/dist/src/validation/form.model.d.ts +306 -24
  227. package/dist/src/validation/form.model.js +29 -1
  228. package/dist/src/validation/helpers.d.ts +15 -7
  229. package/dist/src/validation/helpers.js +49 -13
  230. package/dist/src/validation/validators-support.d.ts +39 -2
  231. package/dist/src/validation/validators-support.js +162 -12
  232. package/dist/src/validation/validators.d.ts +28 -0
  233. package/dist/src/validation/validators.js +531 -0
  234. package/package.json +51 -34
  235. package/LICENSE +0 -674
  236. package/dist/src/validation/index.d.ts +0 -3
  237. package/dist/src/validation/index.js +0 -20
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.formValidatorLengthOrSize = formValidatorLengthOrSize;
7
4
  exports.formValidatorGetDefinitionItem = formValidatorGetDefinitionItem;
@@ -10,9 +7,18 @@ exports.formValidatorGetDefinitionNumber = formValidatorGetDefinitionNumber;
10
7
  exports.formValidatorGetDefinitionBoolean = formValidatorGetDefinitionBoolean;
11
8
  exports.formValidatorGetDefinitionRegexp = formValidatorGetDefinitionRegexp;
12
9
  exports.formValidatorGetDefinitionArray = formValidatorGetDefinitionArray;
13
- const lodash_1 = __importDefault(require("lodash"));
10
+ exports.formValidatorGetDefinitionObject = formValidatorGetDefinitionObject;
11
+ exports.formValidatorBuildError = formValidatorBuildError;
12
+ const lodash_1 = require("lodash");
13
+ const helpers_1 = require("../config/helpers");
14
+ /**
15
+ * Extract the length property in case it's an array or a string.
16
+ * Extract the size property in case it's a set.
17
+ * Return null else.
18
+ * @param value Either an array, set or undefined.
19
+ */
14
20
  function formValidatorLengthOrSize(value) {
15
- if (value == null) {
21
+ if (value === null || value === undefined) {
16
22
  return null;
17
23
  }
18
24
  else if (Array.isArray(value) || typeof value === "string") {
@@ -24,7 +30,7 @@ function formValidatorLengthOrSize(value) {
24
30
  return null;
25
31
  }
26
32
  function formValidatorGetDefinitionItem(config, key, defaultValue = undefined) {
27
- const value = lodash_1.default.get(config ?? {}, key, defaultValue);
33
+ const value = (0, lodash_1.get)(config ?? {}, key, defaultValue);
28
34
  if (value === undefined) {
29
35
  throw new Error(`Must define '${key}' in validator config.`);
30
36
  }
@@ -38,18 +44,14 @@ function formValidatorGetDefinitionNumber(config, key, defaultValue = undefined)
38
44
  const value = formValidatorGetDefinitionItem(config, key, defaultValue);
39
45
  const valueString = value?.toString() ?? "";
40
46
  const valueNumber = parseFloat(valueString);
41
- if (isNaN(valueNumber)) {
47
+ if (!Number.isFinite(valueNumber)) {
42
48
  throw new Error(`Invalid numeric value '${value}' for key '${key}' in validator config.`);
43
49
  }
44
50
  return valueNumber;
45
51
  }
46
52
  function formValidatorGetDefinitionBoolean(config, key, defaultValue = undefined) {
47
53
  const value = formValidatorGetDefinitionItem(config, key, defaultValue);
48
- if (typeof value === "boolean") {
49
- return value;
50
- }
51
- const valueString = value?.toString()?.toLowerCase() ?? "";
52
- return ["true", "t", "1", "yes", "y"].includes(valueString);
54
+ return (0, helpers_1.toBoolean)(value);
53
55
  }
54
56
  function formValidatorGetDefinitionRegexp(config, key, defaultValue = undefined) {
55
57
  const value = formValidatorGetDefinitionItem(config, key, defaultValue);
@@ -65,4 +67,38 @@ function formValidatorGetDefinitionArray(config, key, defaultValue = undefined)
65
67
  }
66
68
  throw new Error(`Invalid array value '${value}' for key '${key}' in validator config.`);
67
69
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw4REFXQztBQUVELHdFQVVDO0FBRUQsNEVBT0M7QUFFRCw0RUFZQztBQUVELDhFQVdDO0FBRUQsNEVBVUM7QUFFRCwwRUFVQztBQTVGRCxvREFBdUI7QUFTdkIsU0FBZ0IseUJBQXlCLENBQUMsS0FBeUQ7SUFFakcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN0QixDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FDNUMsTUFBOEMsRUFDOUMsR0FBVyxFQUNYLGVBQXdCLFNBQVM7SUFFakMsTUFBTSxLQUFLLEdBQUcsZ0JBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixnQ0FBZ0MsQ0FDOUMsTUFBOEMsRUFDOUMsR0FBVyxFQUNYLGVBQW1DLFNBQVM7SUFFNUMsTUFBTSxLQUFLLEdBQUcsOEJBQThCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQWdCLGdDQUFnQyxDQUM5QyxNQUE4QyxFQUM5QyxHQUFXLEVBQ1gsZUFBbUMsU0FBUztJQUU1QyxNQUFNLEtBQUssR0FBRyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsS0FBSyxjQUFjLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQWdCLGlDQUFpQyxDQUMvQyxNQUE4QyxFQUM5QyxHQUFXLEVBQ1gsZUFBb0MsU0FBUztJQUU3QyxNQUFNLEtBQUssR0FBRyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMzRCxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQzlDLE1BQThDLEVBQzlDLEdBQVcsRUFDWCxlQUFtQyxTQUFTO0lBRTVDLE1BQU0sS0FBSyxHQUFHLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEUsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUM3QyxNQUE4QyxFQUM5QyxHQUFXLEVBQ1gsZUFBc0MsU0FBUztJQUUvQyxNQUFNLEtBQUssR0FBRyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEtBQUssY0FBYyxHQUFHLHdCQUF3QixDQUFDLENBQUM7QUFDMUYsQ0FBQyJ9
70
+ function formValidatorGetDefinitionObject(config, key, defaultValue = undefined) {
71
+ const value = formValidatorGetDefinitionItem(config, key, defaultValue);
72
+ if ((0, helpers_1.guessType)(value) === "object") {
73
+ return value;
74
+ }
75
+ throw new Error(`Invalid object value '${value}' for key '${key}' in validator config.`);
76
+ }
77
+ function formValidatorBuildError(config, params) {
78
+ const optionNameKey = "class";
79
+ const optionNameValue = formValidatorGetDefinitionString(config, optionNameKey);
80
+ const optionMessageKey = "message";
81
+ const optionMessageValue = formValidatorGetDefinitionString(config, optionMessageKey);
82
+ const optionTargetFieldKey = "targetField";
83
+ const optionTargetFieldValue = formValidatorGetDefinitionObject(config, optionTargetFieldKey, {});
84
+ // The error key is the validator class, unless a unique error key was assigned because the
85
+ // same class is used more than once on a control. Keying by a unique value lets Angular's
86
+ // error merging keep every instance instead of overwriting earlier ones.
87
+ const optionErrorKeyKey = "errorKey";
88
+ const optionErrorKeyValue = formValidatorGetDefinitionString(config, optionErrorKeyKey, optionNameValue);
89
+ const result = {
90
+ [optionErrorKeyValue]: {
91
+ [optionMessageKey]: optionMessageValue,
92
+ params: { ...params },
93
+ }
94
+ };
95
+ // Preserve the real class when the key differs, so the class can be recovered for display.
96
+ if (optionErrorKeyValue !== optionNameValue) {
97
+ result[optionErrorKeyValue][optionNameKey] = optionNameValue;
98
+ }
99
+ if (Object.keys(optionTargetFieldValue).length > 0) {
100
+ result[optionErrorKeyValue][optionTargetFieldKey] = optionTargetFieldValue;
101
+ }
102
+ return result;
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSw4REFVQztBQUVELHdFQVVDO0FBRUQsNEVBT0M7QUFFRCw0RUFZQztBQUVELDhFQU9DO0FBRUQsNEVBVUM7QUFFRCwwRUFVQztBQUVELDRFQVVDO0FBRUQsMERBNkJDO0FBcElELG1DQUFtQztBQUVuQywrQ0FBdUQ7QUFHdkQ7Ozs7O0dBS0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxLQUF5RDtJQUNqRyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3RCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBZ0IsOEJBQThCLENBQzVDLE1BQW9ELEVBQ3BELEdBQVcsRUFDWCxlQUF3QixTQUFTO0lBRWpDLE1BQU0sS0FBSyxHQUFHLElBQUEsWUFBSSxFQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQzlDLE1B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
@@ -1,4 +1,41 @@
1
- import { FormValidatorBlock, FormValidatorDefinition, FormValidatorFn } from "./form.model";
1
+ import { FormValidationGroups, FormValidatorComponentErrors, FormValidatorConfig, FormValidatorDefinition, FormValidatorErrors, FormValidatorFns, FormValidatorTargetFieldConfig } from "./form.model";
2
2
  export declare class ValidatorsSupport {
3
- createFormValidatorInstances(definition: FormValidatorDefinition[] | null | undefined, config: FormValidatorBlock[] | null | undefined): FormValidatorFn[];
3
+ /**
4
+ * Create validator definition mapping from the validator definitions.
5
+ * @param definition The form validator definitions.
6
+ */
7
+ createValidatorDefinitionMapping(definition: FormValidatorDefinition[] | null | undefined): Map<string, FormValidatorDefinition>;
8
+ /**
9
+ * Create form validator instances from the validator definition mapping.
10
+ * @param defMap The validator definition mapping.
11
+ * @param config The form validator config blocks.
12
+ */
13
+ createFormValidatorInstancesFromMapping(defMap: Map<string, FormValidatorDefinition>, config: (FormValidatorConfig | FormValidatorTargetFieldConfig)[] | null | undefined): FormValidatorFns;
14
+ /**
15
+ * Get the form validator errors for a component's control.
16
+ * @param errors The control's errors.
17
+ */
18
+ getFormValidatorComponentErrors(errors: FormValidatorErrors | null): FormValidatorComponentErrors[];
19
+ checkValidationGroups(availableGroups: FormValidationGroups, enabledGroupNames: string[]): void;
20
+ /**
21
+ * Is the component model validator enabled?
22
+ * @param availableGroups All available validation groups in this form.
23
+ * @param enabledGroupNames The currently enabled validation groups.
24
+ * @param validator The validator config for a component's model.
25
+ */
26
+ isValidatorEnabled(availableGroups: FormValidationGroups, enabledGroupNames: string[], validator: FormValidatorConfig): boolean;
27
+ /**
28
+ * Assign the jsonata evaluator to each 'jsonata-expression' validator.
29
+ * This must be done before filtering the validators on the client, as the compiled templates are referenced by index.
30
+ * @param validators The validator configurations from the model config.
31
+ * @param callback The callback for each validator config with the index.
32
+ */
33
+ assignJsonataEvaluators(validators: FormValidatorConfig[], callback: (validator: FormValidatorConfig, index: number) => unknown): void;
34
+ /**
35
+ * Get the enabled validators.
36
+ * @param availableGroups All available validation groups in this form.
37
+ * @param enabledGroups The currently enabled validation groups.
38
+ * @param validators All available validators in this form.
39
+ */
40
+ enabledValidators(availableGroups: FormValidationGroups, enabledGroups: string[], validators: FormValidatorConfig[]): FormValidatorConfig[];
4
41
  }
@@ -1,33 +1,183 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ValidatorsSupport = void 0;
4
+ const form_types_model_1 = require("../config/form-types.model");
4
5
  class ValidatorsSupport {
5
- createFormValidatorInstances(definition, config) {
6
+ /**
7
+ * Create validator definition mapping from the validator definitions.
8
+ * @param definition The form validator definitions.
9
+ */
10
+ createValidatorDefinitionMapping(definition) {
6
11
  const defMap = new Map();
7
12
  for (const definitionItem of (definition ?? [])) {
8
- const name = definitionItem?.name;
13
+ if (!(0, form_types_model_1.isTypeFormValidatorDefinition)(definitionItem)) {
14
+ throw new Error(`Validator definition does not have valid 'class', 'message', and 'create' properties: ${JSON.stringify(definitionItem)}`);
15
+ }
16
+ const validatorClass = definitionItem?.class;
9
17
  const message = definitionItem?.message;
10
- if (defMap.has(name)) {
11
- const messages = [message, defMap.get(name)?.message];
12
- throw new Error(`Duplicate validator name '${name}' - the validator names must be unique. `
18
+ if (defMap.has(validatorClass)) {
19
+ const messages = [message, defMap.get(validatorClass)?.message];
20
+ throw new Error(`Duplicate validator class '${validatorClass}' - the validator classes must be unique. `
13
21
  + `To help you find the duplicates, these are the messages of the duplicates: '${messages.join(", ")}'.`);
14
22
  }
15
- defMap.set(name, definitionItem);
23
+ defMap.set(validatorClass, definitionItem);
16
24
  }
17
- const result = [];
25
+ return defMap;
26
+ }
27
+ /**
28
+ * Create form validator instances from the validator definition mapping.
29
+ * @param defMap The validator definition mapping.
30
+ * @param config The form validator config blocks.
31
+ */
32
+ createFormValidatorInstancesFromMapping(defMap, config) {
33
+ const result = { syncDefs: [], asyncDefs: [] };
34
+ // Count how many times each class is used so we know which ones are duplicated.
35
+ // Duplicated classes need a unique error key so Angular's error merging keeps every
36
+ // instance instead of overwriting earlier ones (the merge key would otherwise collide).
37
+ const classCounts = new Map();
18
38
  for (const validatorConfigItem of (config ?? [])) {
19
- const name = validatorConfigItem?.name;
20
- const def = defMap.get(name);
39
+ const validatorClass = validatorConfigItem?.class;
40
+ classCounts.set(validatorClass, (classCounts.get(validatorClass) ?? 0) + 1);
41
+ }
42
+ const classOccurrences = new Map();
43
+ for (const validatorConfigItem of (config ?? [])) {
44
+ const validatorClass = validatorConfigItem?.class;
45
+ const def = defMap.get(validatorClass);
21
46
  if (!def) {
22
- throw new Error(`No validator definition has name '${name}', `
47
+ throw new Error(`No validator definition with class '${validatorClass}', `
23
48
  + `the available validators are: '${Array.from(defMap.keys()).sort().join(", ")}'.`);
24
49
  }
25
50
  const message = validatorConfigItem?.message ?? def.message;
26
- const item = def.create({ name: name, message: message, ...(validatorConfigItem?.config ?? {}) });
51
+ const createConfig = {
52
+ ...validatorConfigItem?.config ?? {},
53
+ class: validatorClass,
54
+ message: message,
55
+ };
56
+ // Only assign a unique error key when the class is used more than once on this control.
57
+ // Single-use classes keep the class as the error key, so the error shape is unchanged.
58
+ const occurrence = (classOccurrences.get(validatorClass) ?? 0);
59
+ classOccurrences.set(validatorClass, occurrence + 1);
60
+ if ((classCounts.get(validatorClass) ?? 0) > 1) {
61
+ createConfig.errorKey = `${validatorClass}#${occurrence}`;
62
+ }
63
+ if ('targetField' in validatorConfigItem && validatorConfigItem.targetField !== undefined) {
64
+ createConfig.targetField = validatorConfigItem.targetField;
65
+ }
66
+ if ('create' in def) {
67
+ result.syncDefs.push(def.create(createConfig));
68
+ }
69
+ else if ('createAsync' in def) {
70
+ result.asyncDefs.push(def.createAsync(createConfig));
71
+ }
72
+ else {
73
+ throw new Error(`Invalid validator definition: must specify 'create' or 'createAsync' function. Definition is ${JSON.stringify(validatorConfigItem)}.`);
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ /**
79
+ * Get the form validator errors for a component's control.
80
+ * @param errors The control's errors.
81
+ */
82
+ getFormValidatorComponentErrors(errors) {
83
+ const result = [];
84
+ for (const [key, value] of Object.entries(errors ?? {})) {
85
+ const item = {
86
+ // The error key matches the class unless the class was duplicated on a control, in
87
+ // which case the real class is carried on the value so it can be recovered here.
88
+ class: value.class ?? key,
89
+ message: value.message ?? null,
90
+ params: { ...value.params },
91
+ };
92
+ if (value.targetField !== undefined) {
93
+ item.targetField = value.targetField;
94
+ }
27
95
  result.push(item);
28
96
  }
29
97
  return result;
30
98
  }
99
+ checkValidationGroups(availableGroups, enabledGroupNames) {
100
+ const availableGroupNames = Object.keys(availableGroups);
101
+ const unknownGroups = enabledGroupNames.filter(g => !availableGroupNames.includes(g));
102
+ if (unknownGroups.length > 0) {
103
+ throw new Error(`Unknown enabled validation groups ${JSON.stringify(unknownGroups)}.`);
104
+ }
105
+ }
106
+ /**
107
+ * Is the component model validator enabled?
108
+ * @param availableGroups All available validation groups in this form.
109
+ * @param enabledGroupNames The currently enabled validation groups.
110
+ * @param validator The validator config for a component's model.
111
+ */
112
+ isValidatorEnabled(availableGroups, enabledGroupNames, validator) {
113
+ if (Object.keys(availableGroups).length === 0) {
114
+ // If there are no validation groups, all validators are enabled.
115
+ return true;
116
+ }
117
+ if (enabledGroupNames.length === 0) {
118
+ // If there are no validation groups enabled, all validators are enabled.
119
+ return true;
120
+ }
121
+ this.checkValidationGroups(availableGroups, enabledGroupNames);
122
+ // Check each validation group to see if the validator is enabled.
123
+ // A validator must pass at least one of the group checks to be enabled.
124
+ const includes = validator?.groups?.include ?? [];
125
+ this.checkValidationGroups(availableGroups, includes);
126
+ const excludes = validator?.groups?.exclude ?? [];
127
+ this.checkValidationGroups(availableGroups, excludes);
128
+ for (const [groupKey, groupConfig] of Object.entries(availableGroups)) {
129
+ const membership = groupConfig?.initialMembership ?? "none";
130
+ if (!enabledGroupNames?.includes(groupKey)) {
131
+ // Group is not enabled, so move on.
132
+ continue;
133
+ }
134
+ if (excludes.includes(groupKey)) {
135
+ // Validator excludes this group, so move on.
136
+ continue;
137
+ }
138
+ if (membership === "all" && !excludes.includes(groupKey)) {
139
+ // Validator is enabled.
140
+ // Group is enabled, starts with all validators, and validator does not exclude it.
141
+ return true;
142
+ }
143
+ if (membership === "none" && includes.includes(groupKey)) {
144
+ // Validator is enabled.
145
+ // Group is enabled, starts with no validators, and validator includes it.
146
+ return true;
147
+ }
148
+ }
149
+ // Validator was not included in any group, so it is disabled.
150
+ return false;
151
+ }
152
+ /**
153
+ * Assign the jsonata evaluator to each 'jsonata-expression' validator.
154
+ * This must be done before filtering the validators on the client, as the compiled templates are referenced by index.
155
+ * @param validators The validator configurations from the model config.
156
+ * @param callback The callback for each validator config with the index.
157
+ */
158
+ assignJsonataEvaluators(validators, callback) {
159
+ validators.forEach((validator, index) => {
160
+ if (validator.class === "jsonata-expression") {
161
+ if (!validator.config) {
162
+ validator.config = {};
163
+ }
164
+ const expr = validator?.config?.['expression']?.toString() ?? "";
165
+ const evaluator = validator.config?.['evaluator'];
166
+ if (validator.config && expr && !evaluator) {
167
+ validator.config['evaluator'] = callback(validator, index);
168
+ }
169
+ }
170
+ });
171
+ }
172
+ /**
173
+ * Get the enabled validators.
174
+ * @param availableGroups All available validation groups in this form.
175
+ * @param enabledGroups The currently enabled validation groups.
176
+ * @param validators All available validators in this form.
177
+ */
178
+ enabledValidators(availableGroups, enabledGroups, validators) {
179
+ return (validators ?? []).filter(validator => this.isValidatorEnabled(availableGroups, enabledGroups, validator));
180
+ }
31
181
  }
32
182
  exports.ValidatorsSupport = ValidatorsSupport;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy1zdXBwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vdmFsaWRhdG9ycy1zdXBwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsaUJBQWlCO0lBT3JCLDRCQUE0QixDQUNqQyxVQUF3RCxFQUN4RCxNQUErQztRQUUvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztRQUMxRCxLQUFLLE1BQU0sY0FBYyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEdBQUcsY0FBYyxFQUFFLElBQUksQ0FBQztZQUNsQyxNQUFNLE9BQU8sR0FBRyxjQUFjLEVBQUUsT0FBTyxDQUFDO1lBQ3hDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQixNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLDBDQUEwQztzQkFDdkYsK0VBQStFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlHLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sbUJBQW1CLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksR0FBRyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7WUFDdkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsSUFBSSxLQUFLO3NCQUMxRCxrQ0FBa0MsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pGLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUM1RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXJDRCw4Q0FxQ0MifQ==
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy1zdXBwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vdmFsaWRhdG9ycy1zdXBwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLGlFQUEyRTtBQUczRSxNQUFhLGlCQUFpQjtJQUM1Qjs7O09BR0c7SUFDSSxnQ0FBZ0MsQ0FDckMsVUFBd0Q7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUFDMUQsS0FBSyxNQUFNLGNBQWMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxJQUFBLGdEQUE2QixFQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMseUZBQXlGLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdJLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxjQUFjLEVBQUUsS0FBSyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLGNBQWMsRUFBRSxPQUFPLENBQUM7WUFDeEMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLGNBQWMsNENBQTRDO3NCQUNwRywrRUFBK0UsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUcsQ0FBQztZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJ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
@@ -0,0 +1,28 @@
1
+ import { FormValidatorDefinition } from "./form.model";
2
+ /**
3
+ * A regular expression for validating an email address.
4
+ *
5
+ * Based on the angular email validation regex. MIT-style license https://angular.dev/license
6
+ */
7
+ export declare const FORM_VALIDATOR_EMAIL_REGEXP: RegExp;
8
+ /**
9
+ * A regular expression for a bare DOI (without a doi.org resolver URL).
10
+ *
11
+ * This follows the Crossref-recommended broad DOI syntax and is intentionally
12
+ * case-insensitive for DOI suffixes.
13
+ */
14
+ export declare const FORM_VALIDATOR_DOI_REGEXP: RegExp;
15
+ /**
16
+ * Definitions of form validators.
17
+ *
18
+ * These can be used on both server-side and client-side.
19
+ * The server provides them to the client.
20
+ *
21
+ * Sails hooks can use these validators functions, but cannot extend or override them.
22
+ * Use the 'jsonata-expression' validator to create custom validator functions.
23
+ *
24
+ * The validators are based on:
25
+ * - angular built-in validators: https://github.com/angular/angular/blob/5105fd6f05f01f04873ab1c87d64079fd8519ad4/packages/forms/src/validators.ts
26
+ * - formly schema: https://github.com/ngx-formly/ngx-formly/blob/a2f7901b6c0895aee63b4b5fe748fc5ec0ad5475/src/core/src/lib/models/fieldconfig.ts
27
+ */
28
+ export declare const formValidatorsSharedDefinitions: FormValidatorDefinition[];