@ampath-kenya/ngx-openmrs-formentry 2.12.11 → 2.12.13

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 (679) hide show
  1. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-control-type.d.ts +0 -0
  2. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-form-array.d.ts +0 -0
  3. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-form-control.d.ts +0 -0
  4. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/afe-form-group.d.ts +0 -0
  5. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/control-extensions.d.ts +0 -0
  6. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/index.d.ts +0 -0
  7. package/{dist/ngx-formentry/abstract-controls-extension → abstract-controls-extension}/value-change.listener.d.ts +0 -0
  8. package/{dist/ngx-formentry/ngx-openmrs-formentry.d.ts → ampath-kenya-ngx-openmrs-formentry.d.ts} +0 -0
  9. package/{dist/ngx-formentry/ngx-openmrs-formentry.metadata.json → ampath-kenya-ngx-openmrs-formentry.metadata.json} +1 -1
  10. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +10706 -0
  11. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -0
  12. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +2 -0
  13. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -0
  14. package/{dist/ngx-formentry/change-tracking → change-tracking}/control-relation.d.ts +0 -0
  15. package/{dist/ngx-formentry/change-tracking → change-tracking}/control-relations.d.ts +0 -0
  16. package/{dist/ngx-formentry/components → components}/afe-ng-select.component.d.ts +0 -0
  17. package/{dist/ngx-formentry/components → components}/appointments-overview/appointments-overview.component.d.ts +0 -0
  18. package/{dist/ngx-formentry/components → components}/check-box/checkbox.component.d.ts +0 -0
  19. package/{dist/ngx-formentry/components → components}/check-box/checkbox.module.d.ts +0 -0
  20. package/{dist/ngx-formentry/components → components}/date-time-picker/date-picker/date-picker.component.d.ts +0 -0
  21. package/{dist/ngx-formentry/components → components}/date-time-picker/date-time-picker.component.d.ts +0 -0
  22. package/{dist/ngx-formentry/components → components}/date-time-picker/date-time-picker.module.d.ts +0 -0
  23. package/{dist/ngx-formentry/components → components}/date-time-picker/picker-modal/modal.component.d.ts +0 -0
  24. package/{dist/ngx-formentry/components → components}/date-time-picker/pipes/moment.pipe.d.ts +0 -0
  25. package/{dist/ngx-formentry/components → components}/date-time-picker/time-picker/time-picker.component.d.ts +0 -0
  26. package/{dist/ngx-formentry/components → components}/file-upload/file-upload.component.d.ts +0 -0
  27. package/{dist/ngx-formentry/components → components}/file-upload/file-upload.module.d.ts +0 -0
  28. package/{dist/ngx-formentry/components → components}/file-upload/secure.pipe.d.ts +0 -0
  29. package/{dist/ngx-formentry/components → components}/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +0 -0
  30. package/{dist/ngx-formentry/components → components}/ngx-date-time-picker/ngx-date-time-picker.module.d.ts +0 -0
  31. package/{dist/ngx-formentry/components → components}/remote-select/remote-select.component.d.ts +0 -0
  32. package/{dist/ngx-formentry/components → components}/remote-select/remote-select.module.d.ts +0 -0
  33. package/{dist/ngx-formentry/components → components}/select/diacritics.d.ts +0 -0
  34. package/{dist/ngx-formentry/components → components}/select/option-list.d.ts +0 -0
  35. package/{dist/ngx-formentry/components → components}/select/option.d.ts +0 -0
  36. package/{dist/ngx-formentry/components → components}/select/select-dropdown.component.d.ts +0 -0
  37. package/{dist/ngx-formentry/components → components}/select/select-dropdown.component.style.d.ts +0 -0
  38. package/{dist/ngx-formentry/components → components}/select/select.component.d.ts +0 -0
  39. package/{dist/ngx-formentry/components → components}/select/select.component.style.d.ts +0 -0
  40. package/{dist/ngx-formentry/components → components}/select/select.module.d.ts +0 -0
  41. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/display-controls/file-preview.component.d.ts +0 -0
  42. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/display-controls/question-control.component.d.ts +0 -0
  43. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/display-controls/remote-answer.component.d.ts +0 -0
  44. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-container/encounter-container.component.d.ts +0 -0
  45. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-pdf-viewer.service.d.ts +0 -0
  46. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-view/encounter-viewer.component.d.ts +0 -0
  47. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-viewer.module.d.ts +0 -0
  48. package/{dist/ngx-formentry/encounter-viewer → encounter-viewer}/encounter-viewer.service.d.ts +0 -0
  49. package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
  50. package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
  51. package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
  52. package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
  53. package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
  54. package/esm2015/abstract-controls-extension/index.js +5 -0
  55. package/esm2015/abstract-controls-extension/value-change.listener.js +1 -0
  56. package/esm2015/ampath-kenya-ngx-openmrs-formentry.js +42 -0
  57. package/esm2015/change-tracking/control-relation.js +44 -0
  58. package/esm2015/change-tracking/control-relations.js +32 -0
  59. package/esm2015/components/afe-ng-select.component.js +87 -0
  60. package/esm2015/components/appointments-overview/appointments-overview.component.js +161 -0
  61. package/esm2015/components/check-box/checkbox.component.js +97 -0
  62. package/esm2015/components/check-box/checkbox.module.js +14 -0
  63. package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +270 -0
  64. package/esm2015/components/date-time-picker/date-time-picker.component.js +207 -0
  65. package/esm2015/components/date-time-picker/date-time-picker.module.js +34 -0
  66. package/esm2015/components/date-time-picker/picker-modal/modal.component.js +36 -0
  67. package/esm2015/components/date-time-picker/pipes/moment.pipe.js +13 -0
  68. package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +160 -0
  69. package/esm2015/components/file-upload/file-upload.component.js +128 -0
  70. package/esm2015/components/file-upload/file-upload.module.js +27 -0
  71. package/esm2015/components/file-upload/secure.pipe.js +102 -0
  72. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +191 -0
  73. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +41 -0
  74. package/esm2015/components/remote-select/remote-select.component.js +169 -0
  75. package/esm2015/components/remote-select/remote-select.module.js +17 -0
  76. package/esm2015/components/select/diacritics.js +855 -0
  77. package/esm2015/components/select/option-list.js +179 -0
  78. package/esm2015/components/select/option.js +29 -0
  79. package/esm2015/components/select/select-dropdown.component.js +161 -0
  80. package/esm2015/components/select/select-dropdown.component.style.js +58 -0
  81. package/esm2015/components/select/select.component.js +514 -0
  82. package/esm2015/components/select/select.component.style.js +101 -0
  83. package/esm2015/components/select/select.module.js +15 -0
  84. package/esm2015/encounter-viewer/display-controls/file-preview.component.js +109 -0
  85. package/esm2015/encounter-viewer/display-controls/question-control.component.js +92 -0
  86. package/esm2015/encounter-viewer/display-controls/remote-answer.component.js +79 -0
  87. package/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +48 -0
  88. package/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +435 -0
  89. package/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +299 -0
  90. package/esm2015/encounter-viewer/encounter-viewer.module.js +35 -0
  91. package/esm2015/encounter-viewer/encounter-viewer.service.js +160 -0
  92. package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
  93. package/esm2015/form-entry/control-alerts/can-generate-alert.js +1 -0
  94. package/esm2015/form-entry/control-calculators/can-calculate.js +1 -0
  95. package/esm2015/form-entry/control-hiders-disablers/can-disable.js +1 -0
  96. package/esm2015/form-entry/control-hiders-disablers/can-hide.js +1 -0
  97. package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +33 -0
  98. package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
  99. package/esm2015/form-entry/data-sources/data-sources.js +30 -0
  100. package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
  101. package/esm2015/form-entry/directives/historical-value-directive.js +66 -0
  102. package/esm2015/form-entry/error-renderer/error-renderer.component.js +69 -0
  103. package/esm2015/form-entry/expression-runner/expression-runner.js +152 -0
  104. package/esm2015/form-entry/form-entry.module.js +103 -0
  105. package/esm2015/form-entry/form-factory/control-relations.factory.js +236 -0
  106. package/esm2015/form-entry/form-factory/form-control.service.js +117 -0
  107. package/esm2015/form-entry/form-factory/form-node.js +78 -0
  108. package/esm2015/form-entry/form-factory/form.factory.js +132 -0
  109. package/esm2015/form-entry/form-factory/form.js +193 -0
  110. package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +66 -0
  111. package/esm2015/form-entry/form-factory/question.factory.js +834 -0
  112. package/esm2015/form-entry/form-factory/show-messages.factory.js +30 -0
  113. package/esm2015/form-entry/form-factory/validation.factory.js +145 -0
  114. package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +156 -0
  115. package/esm2015/form-entry/form-renderer/form-renderer.component.js +632 -0
  116. package/esm2015/form-entry/helpers/historical-expression-helper-service.js +38 -0
  117. package/esm2015/form-entry/helpers/historical-field-helper-service.js +32 -0
  118. package/esm2015/form-entry/helpers/js-expression-helper.js +234 -0
  119. package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
  120. package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
  121. package/esm2015/form-entry/question-models/date-question.js +12 -0
  122. package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
  123. package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
  124. package/esm2015/form-entry/question-models/group-question.js +12 -0
  125. package/esm2015/form-entry/question-models/interfaces/base-options.js +1 -0
  126. package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +1 -0
  127. package/esm2015/form-entry/question-models/interfaces/data-source.js +1 -0
  128. package/esm2015/form-entry/question-models/interfaces/date-question-options.js +1 -0
  129. package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +1 -0
  130. package/esm2015/form-entry/question-models/interfaces/group-question-options.js +1 -0
  131. package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +1 -0
  132. package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
  133. package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +1 -0
  134. package/esm2015/form-entry/question-models/interfaces/select-option.js +1 -0
  135. package/esm2015/form-entry/question-models/interfaces/select-question-options.js +1 -0
  136. package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +1 -0
  137. package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +1 -0
  138. package/esm2015/form-entry/question-models/interfaces/text-question-options.js +1 -0
  139. package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +1 -0
  140. package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
  141. package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
  142. package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
  143. package/esm2015/form-entry/question-models/models.js +12 -0
  144. package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
  145. package/esm2015/form-entry/question-models/pair.model.js +7 -0
  146. package/esm2015/form-entry/question-models/question-base.js +24 -0
  147. package/{dist/ngx-formentry/esm2015 → esm2015}/form-entry/question-models/rendering-type.js +1 -1
  148. package/esm2015/form-entry/question-models/repeating-question.js +11 -0
  149. package/esm2015/form-entry/question-models/select-option.js +7 -0
  150. package/esm2015/form-entry/question-models/select-question.js +12 -0
  151. package/esm2015/form-entry/question-models/test-order-question.js +15 -0
  152. package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
  153. package/esm2015/form-entry/question-models/text-input-question.js +10 -0
  154. package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
  155. package/esm2015/form-entry/question-models/validation.model.js +7 -0
  156. package/esm2015/form-entry/services/debug-mode.service.js +22 -0
  157. package/esm2015/form-entry/services/form-errors.service.js +18 -0
  158. package/esm2015/form-entry/services/form-schema-compiler.service.js +246 -0
  159. package/esm2015/form-entry/services/historical-encounter-data.service.js +171 -0
  160. package/esm2015/form-entry/utils/messages.js +12 -0
  161. package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
  162. package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
  163. package/esm2015/form-entry/validators/date.validator.js +18 -0
  164. package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
  165. package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
  166. package/esm2015/form-entry/validators/max-date.validator.js +23 -0
  167. package/esm2015/form-entry/validators/max.validator.js +17 -0
  168. package/esm2015/form-entry/validators/min-date.validator.js +23 -0
  169. package/esm2015/form-entry/validators/min.validator.js +17 -0
  170. package/esm2015/form-entry/validators/required.validator.js +11 -0
  171. package/esm2015/form-entry/validators/validations.js +5 -0
  172. package/esm2015/form-entry/value-adapters/encounter.adapter.js +173 -0
  173. package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +490 -0
  174. package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
  175. package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
  176. package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +87 -0
  177. package/esm2015/form-entry/value-adapters/value.adapter.js +1 -0
  178. package/esm2015/public_api.js +51 -0
  179. package/esm2015/shared.module.js +15 -0
  180. package/esm5/abstract-controls-extension/afe-control-type.js +8 -0
  181. package/esm5/abstract-controls-extension/afe-form-array.js +98 -0
  182. package/esm5/abstract-controls-extension/afe-form-control.js +96 -0
  183. package/esm5/abstract-controls-extension/afe-form-group.js +70 -0
  184. package/esm5/abstract-controls-extension/control-extensions.js +5 -0
  185. package/esm5/abstract-controls-extension/index.js +5 -0
  186. package/esm5/abstract-controls-extension/value-change.listener.js +1 -0
  187. package/esm5/ampath-kenya-ngx-openmrs-formentry.js +42 -0
  188. package/esm5/change-tracking/control-relation.js +59 -0
  189. package/esm5/change-tracking/control-relations.js +46 -0
  190. package/esm5/components/afe-ng-select.component.js +87 -0
  191. package/esm5/components/appointments-overview/appointments-overview.component.js +123 -0
  192. package/esm5/components/check-box/checkbox.component.js +88 -0
  193. package/esm5/components/check-box/checkbox.module.js +18 -0
  194. package/esm5/components/date-time-picker/date-picker/date-picker.component.js +186 -0
  195. package/esm5/components/date-time-picker/date-time-picker.component.js +111 -0
  196. package/esm5/components/date-time-picker/date-time-picker.module.js +38 -0
  197. package/esm5/components/date-time-picker/picker-modal/modal.component.js +32 -0
  198. package/esm5/components/date-time-picker/pipes/moment.pipe.js +17 -0
  199. package/esm5/components/date-time-picker/time-picker/time-picker.component.js +117 -0
  200. package/esm5/components/file-upload/file-upload.component.js +126 -0
  201. package/esm5/components/file-upload/file-upload.module.js +31 -0
  202. package/esm5/components/file-upload/secure.pipe.js +105 -0
  203. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +140 -0
  204. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +45 -0
  205. package/esm5/components/remote-select/remote-select.component.js +163 -0
  206. package/esm5/components/remote-select/remote-select.module.js +21 -0
  207. package/esm5/components/select/diacritics.js +860 -0
  208. package/esm5/components/select/option-list.js +224 -0
  209. package/esm5/components/select/option.js +31 -0
  210. package/esm5/components/select/select-dropdown.component.js +131 -0
  211. package/esm5/components/select/select-dropdown.component.style.js +2 -0
  212. package/esm5/components/select/select.component.js +456 -0
  213. package/esm5/components/select/select.component.style.js +2 -0
  214. package/esm5/components/select/select.module.js +19 -0
  215. package/{dist/ngx-formentry/esm2015 → esm5}/encounter-viewer/display-controls/file-preview.component.js +70 -70
  216. package/esm5/encounter-viewer/display-controls/question-control.component.js +104 -0
  217. package/esm5/encounter-viewer/display-controls/remote-answer.component.js +86 -0
  218. package/esm5/encounter-viewer/encounter-container/encounter-container.component.js +45 -0
  219. package/esm5/encounter-viewer/encounter-pdf-viewer.service.js +521 -0
  220. package/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +185 -0
  221. package/esm5/encounter-viewer/encounter-viewer.module.js +39 -0
  222. package/esm5/encounter-viewer/encounter-viewer.service.js +165 -0
  223. package/esm5/form-entry/control-alerts/alert-helpers.js +44 -0
  224. package/esm5/form-entry/control-alerts/can-generate-alert.js +1 -0
  225. package/esm5/form-entry/control-calculators/can-calculate.js +1 -0
  226. package/esm5/form-entry/control-hiders-disablers/can-disable.js +1 -0
  227. package/esm5/form-entry/control-hiders-disablers/can-hide.js +1 -0
  228. package/esm5/form-entry/control-hiders-disablers/disabler-helper.js +37 -0
  229. package/esm5/form-entry/control-hiders-disablers/hider-helpers.js +44 -0
  230. package/esm5/form-entry/data-sources/data-sources.js +37 -0
  231. package/esm5/form-entry/data-sources/dummy-data-source.js +106 -0
  232. package/esm5/form-entry/directives/historical-value-directive.js +72 -0
  233. package/esm5/form-entry/error-renderer/error-renderer.component.js +62 -0
  234. package/esm5/form-entry/expression-runner/expression-runner.js +158 -0
  235. package/esm5/form-entry/form-entry.module.js +107 -0
  236. package/{dist/ngx-formentry/esm2015 → esm5}/form-entry/form-factory/control-relations.factory.js +94 -87
  237. package/esm5/form-entry/form-factory/form-control.service.js +120 -0
  238. package/esm5/form-entry/form-factory/form-node.js +116 -0
  239. package/esm5/form-entry/form-factory/form.factory.js +136 -0
  240. package/esm5/form-entry/form-factory/form.js +213 -0
  241. package/esm5/form-entry/form-factory/hiders-disablers.factory.js +68 -0
  242. package/esm5/form-entry/form-factory/question.factory.js +838 -0
  243. package/esm5/form-entry/form-factory/show-messages.factory.js +32 -0
  244. package/esm5/form-entry/form-factory/validation.factory.js +189 -0
  245. package/esm5/form-entry/form-renderer/form-renderer.component.css.js +2 -0
  246. package/esm5/form-entry/form-renderer/form-renderer.component.js +211 -0
  247. package/esm5/form-entry/helpers/historical-expression-helper-service.js +41 -0
  248. package/esm5/form-entry/helpers/historical-field-helper-service.js +36 -0
  249. package/esm5/form-entry/helpers/js-expression-helper.js +242 -0
  250. package/esm5/form-entry/question-models/checkbox.model.js +16 -0
  251. package/esm5/form-entry/question-models/conditional-validation.model.js +14 -0
  252. package/esm5/form-entry/question-models/date-question.js +17 -0
  253. package/esm5/form-entry/question-models/date-validation.model.js +15 -0
  254. package/esm5/form-entry/question-models/file-upload-question.js +18 -0
  255. package/esm5/form-entry/question-models/group-question.js +17 -0
  256. package/esm5/form-entry/question-models/interfaces/base-options.js +1 -0
  257. package/esm5/form-entry/question-models/interfaces/checkbox-options.js +1 -0
  258. package/esm5/form-entry/question-models/interfaces/data-source.js +1 -0
  259. package/esm5/form-entry/question-models/interfaces/date-question-options.js +1 -0
  260. package/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +1 -0
  261. package/esm5/form-entry/question-models/interfaces/group-question-options.js +1 -0
  262. package/esm5/form-entry/question-models/interfaces/multi-select-options.js +1 -0
  263. package/esm5/form-entry/question-models/interfaces/nested-questions.js +11 -0
  264. package/esm5/form-entry/question-models/interfaces/repeating-question-options.js +1 -0
  265. package/esm5/form-entry/question-models/interfaces/select-option.js +1 -0
  266. package/esm5/form-entry/question-models/interfaces/select-question-options.js +1 -0
  267. package/esm5/form-entry/question-models/interfaces/test-order-question-options.js +1 -0
  268. package/esm5/form-entry/question-models/interfaces/text-area-question-options.js +1 -0
  269. package/esm5/form-entry/question-models/interfaces/text-question-options.js +1 -0
  270. package/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +1 -0
  271. package/esm5/form-entry/question-models/js-expression-validation.model.js +13 -0
  272. package/esm5/form-entry/question-models/max-validation.model.js +14 -0
  273. package/esm5/form-entry/question-models/min-validation.model.js +14 -0
  274. package/esm5/form-entry/question-models/models.js +12 -0
  275. package/esm5/form-entry/question-models/multi-select-question.js +16 -0
  276. package/esm5/form-entry/question-models/pair.model.js +9 -0
  277. package/esm5/form-entry/question-models/question-base.js +26 -0
  278. package/{dist/ngx-formentry/esm5 → esm5}/form-entry/question-models/rendering-type.js +1 -1
  279. package/esm5/form-entry/question-models/repeating-question.js +16 -0
  280. package/esm5/form-entry/question-models/select-option.js +9 -0
  281. package/esm5/form-entry/question-models/select-question.js +17 -0
  282. package/esm5/form-entry/question-models/test-order-question.js +20 -0
  283. package/esm5/form-entry/question-models/text-area-input-question.js +18 -0
  284. package/esm5/form-entry/question-models/text-input-question.js +15 -0
  285. package/esm5/form-entry/question-models/ui-select-question.js +16 -0
  286. package/esm5/form-entry/question-models/validation.model.js +9 -0
  287. package/esm5/form-entry/services/debug-mode.service.js +24 -0
  288. package/esm5/form-entry/services/form-errors.service.js +20 -0
  289. package/esm5/form-entry/services/form-schema-compiler.service.js +252 -0
  290. package/esm5/form-entry/services/historical-encounter-data.service.js +178 -0
  291. package/esm5/form-entry/utils/messages.js +16 -0
  292. package/esm5/form-entry/validators/conditional-answered.validator.js +49 -0
  293. package/esm5/form-entry/validators/conditional-required.validator.js +43 -0
  294. package/esm5/form-entry/validators/date.validator.js +21 -0
  295. package/esm5/form-entry/validators/future-date-restriction.validator.js +24 -0
  296. package/esm5/form-entry/validators/js-expression.validator.js +29 -0
  297. package/esm5/form-entry/validators/max-date.validator.js +27 -0
  298. package/esm5/form-entry/validators/max.validator.js +21 -0
  299. package/esm5/form-entry/validators/min-date.validator.js +27 -0
  300. package/esm5/form-entry/validators/min.validator.js +21 -0
  301. package/esm5/form-entry/validators/required.validator.js +15 -0
  302. package/esm5/form-entry/validators/validations.js +8 -0
  303. package/esm5/form-entry/value-adapters/encounter.adapter.js +176 -0
  304. package/esm5/form-entry/value-adapters/obs-adapter-helper.js +508 -0
  305. package/esm5/form-entry/value-adapters/obs.adapter.js +735 -0
  306. package/esm5/form-entry/value-adapters/order.adapter.js +226 -0
  307. package/esm5/form-entry/value-adapters/person-attribute.adapter.js +91 -0
  308. package/esm5/form-entry/value-adapters/value.adapter.js +1 -0
  309. package/esm5/public_api.js +51 -0
  310. package/esm5/shared.module.js +19 -0
  311. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +10919 -0
  312. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
  313. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +10359 -0
  314. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
  315. package/{dist/ngx-formentry/form-entry → form-entry}/control-alerts/alert-helpers.d.ts +0 -0
  316. package/{dist/ngx-formentry/form-entry → form-entry}/control-alerts/can-generate-alert.d.ts +0 -0
  317. package/{dist/ngx-formentry/form-entry → form-entry}/control-calculators/can-calculate.d.ts +0 -0
  318. package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/can-disable.d.ts +0 -0
  319. package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/can-hide.d.ts +0 -0
  320. package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/disabler-helper.d.ts +0 -0
  321. package/{dist/ngx-formentry/form-entry → form-entry}/control-hiders-disablers/hider-helpers.d.ts +0 -0
  322. package/{dist/ngx-formentry/form-entry → form-entry}/data-sources/data-sources.d.ts +0 -0
  323. package/{dist/ngx-formentry/form-entry → form-entry}/data-sources/dummy-data-source.d.ts +0 -0
  324. package/{dist/ngx-formentry/form-entry → form-entry}/directives/historical-value-directive.d.ts +0 -0
  325. package/{dist/ngx-formentry/form-entry → form-entry}/error-renderer/error-renderer.component.d.ts +0 -0
  326. package/{dist/ngx-formentry/form-entry → form-entry}/expression-runner/expression-runner.d.ts +0 -0
  327. package/{dist/ngx-formentry/form-entry → form-entry}/form-entry.module.d.ts +0 -0
  328. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/control-relations.factory.d.ts +0 -0
  329. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form-control.service.d.ts +0 -0
  330. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form-node.d.ts +0 -0
  331. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form.d.ts +0 -0
  332. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/form.factory.d.ts +0 -0
  333. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/hiders-disablers.factory.d.ts +0 -0
  334. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/question.factory.d.ts +0 -0
  335. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/show-messages.factory.d.ts +0 -0
  336. package/{dist/ngx-formentry/form-entry → form-entry}/form-factory/validation.factory.d.ts +0 -0
  337. package/{dist/ngx-formentry/form-entry → form-entry}/form-renderer/form-renderer.component.css.d.ts +0 -0
  338. package/{dist/ngx-formentry/form-entry → form-entry}/form-renderer/form-renderer.component.d.ts +0 -0
  339. package/{dist/ngx-formentry/form-entry → form-entry}/helpers/historical-expression-helper-service.d.ts +0 -0
  340. package/{dist/ngx-formentry/form-entry → form-entry}/helpers/historical-field-helper-service.d.ts +0 -0
  341. package/{dist/ngx-formentry/form-entry → form-entry}/helpers/js-expression-helper.d.ts +0 -0
  342. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/checkbox.model.d.ts +0 -0
  343. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/conditional-validation.model.d.ts +0 -0
  344. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/date-question.d.ts +0 -0
  345. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/date-validation.model.d.ts +0 -0
  346. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/file-upload-question.d.ts +0 -0
  347. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/group-question.d.ts +0 -0
  348. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/base-options.d.ts +0 -0
  349. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/checkbox-options.d.ts +0 -0
  350. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/data-source.d.ts +0 -0
  351. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/date-question-options.d.ts +0 -0
  352. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/file-upload-question-options.d.ts +0 -0
  353. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/group-question-options.d.ts +0 -0
  354. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/multi-select-options.d.ts +0 -0
  355. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/nested-questions.d.ts +0 -0
  356. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/repeating-question-options.d.ts +0 -0
  357. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/select-option.d.ts +0 -0
  358. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/select-question-options.d.ts +0 -0
  359. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/test-order-question-options.d.ts +0 -0
  360. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/text-area-question-options.d.ts +0 -0
  361. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/text-question-options.d.ts +0 -0
  362. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/interfaces/ui-select-question-options.d.ts +0 -0
  363. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/js-expression-validation.model.d.ts +0 -0
  364. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/max-validation.model.d.ts +0 -0
  365. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/min-validation.model.d.ts +0 -0
  366. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/models.d.ts +0 -0
  367. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/multi-select-question.d.ts +0 -0
  368. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/pair.model.d.ts +0 -0
  369. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/question-base.d.ts +0 -0
  370. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/rendering-type.d.ts +0 -0
  371. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/repeating-question.d.ts +0 -0
  372. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/select-option.d.ts +0 -0
  373. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/select-question.d.ts +0 -0
  374. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/test-order-question.d.ts +0 -0
  375. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/text-area-input-question.d.ts +0 -0
  376. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/text-input-question.d.ts +0 -0
  377. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/ui-select-question.d.ts +0 -0
  378. package/{dist/ngx-formentry/form-entry → form-entry}/question-models/validation.model.d.ts +0 -0
  379. package/{dist/ngx-formentry/form-entry → form-entry}/services/debug-mode.service.d.ts +0 -0
  380. package/{dist/ngx-formentry/form-entry → form-entry}/services/form-errors.service.d.ts +0 -0
  381. package/{dist/ngx-formentry/form-entry → form-entry}/services/form-schema-compiler.service.d.ts +0 -0
  382. package/{dist/ngx-formentry/form-entry → form-entry}/services/historical-encounter-data.service.d.ts +0 -0
  383. package/{dist/ngx-formentry/form-entry → form-entry}/utils/messages.d.ts +0 -0
  384. package/{dist/ngx-formentry/form-entry → form-entry}/validators/conditional-answered.validator.d.ts +0 -0
  385. package/{dist/ngx-formentry/form-entry → form-entry}/validators/conditional-required.validator.d.ts +0 -0
  386. package/{dist/ngx-formentry/form-entry → form-entry}/validators/date.validator.d.ts +0 -0
  387. package/{dist/ngx-formentry/form-entry → form-entry}/validators/future-date-restriction.validator.d.ts +0 -0
  388. package/{dist/ngx-formentry/form-entry → form-entry}/validators/js-expression.validator.d.ts +0 -0
  389. package/{dist/ngx-formentry/form-entry → form-entry}/validators/max-date.validator.d.ts +0 -0
  390. package/{dist/ngx-formentry/form-entry → form-entry}/validators/max.validator.d.ts +0 -0
  391. package/{dist/ngx-formentry/form-entry → form-entry}/validators/min-date.validator.d.ts +0 -0
  392. package/{dist/ngx-formentry/form-entry → form-entry}/validators/min.validator.d.ts +0 -0
  393. package/{dist/ngx-formentry/form-entry → form-entry}/validators/required.validator.d.ts +0 -0
  394. package/{dist/ngx-formentry/form-entry → form-entry}/validators/validations.d.ts +0 -0
  395. package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/encounter.adapter.d.ts +0 -0
  396. package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/obs-adapter-helper.d.ts +0 -0
  397. package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/obs.adapter.d.ts +0 -0
  398. package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/order.adapter.d.ts +0 -0
  399. package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/person-attribute.adapter.d.ts +0 -0
  400. package/{dist/ngx-formentry/form-entry → form-entry}/value-adapters/value.adapter.d.ts +0 -0
  401. package/package.json +21 -83
  402. package/{dist/ngx-formentry/public_api.d.ts → public_api.d.ts} +0 -0
  403. package/{dist/ngx-formentry/shared.module.d.ts → shared.module.d.ts} +0 -0
  404. package/.editorconfig +0 -13
  405. package/.prettierignore +0 -40
  406. package/.prettierrc +0 -6
  407. package/.travis.yml +0 -17
  408. package/README.md +0 -34
  409. package/angular.json +0 -143
  410. package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.js +0 -10706
  411. package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.js.map +0 -1
  412. package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.min.js +0 -2
  413. package/dist/ngx-formentry/bundles/ngx-openmrs-formentry.umd.min.js.map +0 -1
  414. package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-control-type.js +0 -8
  415. package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-form-array.js +0 -85
  416. package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-form-control.js +0 -88
  417. package/dist/ngx-formentry/esm2015/abstract-controls-extension/afe-form-group.js +0 -61
  418. package/dist/ngx-formentry/esm2015/abstract-controls-extension/control-extensions.js +0 -5
  419. package/dist/ngx-formentry/esm2015/abstract-controls-extension/index.js +0 -5
  420. package/dist/ngx-formentry/esm2015/abstract-controls-extension/value-change.listener.js +0 -1
  421. package/dist/ngx-formentry/esm2015/change-tracking/control-relation.js +0 -44
  422. package/dist/ngx-formentry/esm2015/change-tracking/control-relations.js +0 -32
  423. package/dist/ngx-formentry/esm2015/components/afe-ng-select.component.js +0 -87
  424. package/dist/ngx-formentry/esm2015/components/appointments-overview/appointments-overview.component.js +0 -161
  425. package/dist/ngx-formentry/esm2015/components/check-box/checkbox.component.js +0 -97
  426. package/dist/ngx-formentry/esm2015/components/check-box/checkbox.module.js +0 -14
  427. package/dist/ngx-formentry/esm2015/components/date-time-picker/date-picker/date-picker.component.js +0 -270
  428. package/dist/ngx-formentry/esm2015/components/date-time-picker/date-time-picker.component.js +0 -207
  429. package/dist/ngx-formentry/esm2015/components/date-time-picker/date-time-picker.module.js +0 -34
  430. package/dist/ngx-formentry/esm2015/components/date-time-picker/picker-modal/modal.component.js +0 -36
  431. package/dist/ngx-formentry/esm2015/components/date-time-picker/pipes/moment.pipe.js +0 -13
  432. package/dist/ngx-formentry/esm2015/components/date-time-picker/time-picker/time-picker.component.js +0 -160
  433. package/dist/ngx-formentry/esm2015/components/file-upload/file-upload.component.js +0 -128
  434. package/dist/ngx-formentry/esm2015/components/file-upload/file-upload.module.js +0 -27
  435. package/dist/ngx-formentry/esm2015/components/file-upload/secure.pipe.js +0 -102
  436. package/dist/ngx-formentry/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +0 -191
  437. package/dist/ngx-formentry/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +0 -41
  438. package/dist/ngx-formentry/esm2015/components/remote-select/remote-select.component.js +0 -169
  439. package/dist/ngx-formentry/esm2015/components/remote-select/remote-select.module.js +0 -17
  440. package/dist/ngx-formentry/esm2015/components/select/diacritics.js +0 -855
  441. package/dist/ngx-formentry/esm2015/components/select/option-list.js +0 -179
  442. package/dist/ngx-formentry/esm2015/components/select/option.js +0 -29
  443. package/dist/ngx-formentry/esm2015/components/select/select-dropdown.component.js +0 -161
  444. package/dist/ngx-formentry/esm2015/components/select/select-dropdown.component.style.js +0 -58
  445. package/dist/ngx-formentry/esm2015/components/select/select.component.js +0 -514
  446. package/dist/ngx-formentry/esm2015/components/select/select.component.style.js +0 -101
  447. package/dist/ngx-formentry/esm2015/components/select/select.module.js +0 -15
  448. package/dist/ngx-formentry/esm2015/encounter-viewer/display-controls/question-control.component.js +0 -92
  449. package/dist/ngx-formentry/esm2015/encounter-viewer/display-controls/remote-answer.component.js +0 -79
  450. package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +0 -48
  451. package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +0 -435
  452. package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +0 -299
  453. package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-viewer.module.js +0 -35
  454. package/dist/ngx-formentry/esm2015/encounter-viewer/encounter-viewer.service.js +0 -160
  455. package/dist/ngx-formentry/esm2015/form-entry/control-alerts/alert-helpers.js +0 -40
  456. package/dist/ngx-formentry/esm2015/form-entry/control-alerts/can-generate-alert.js +0 -1
  457. package/dist/ngx-formentry/esm2015/form-entry/control-calculators/can-calculate.js +0 -1
  458. package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/can-disable.js +0 -1
  459. package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/can-hide.js +0 -1
  460. package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +0 -33
  461. package/dist/ngx-formentry/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +0 -40
  462. package/dist/ngx-formentry/esm2015/form-entry/data-sources/data-sources.js +0 -30
  463. package/dist/ngx-formentry/esm2015/form-entry/data-sources/dummy-data-source.js +0 -104
  464. package/dist/ngx-formentry/esm2015/form-entry/directives/historical-value-directive.js +0 -66
  465. package/dist/ngx-formentry/esm2015/form-entry/error-renderer/error-renderer.component.js +0 -69
  466. package/dist/ngx-formentry/esm2015/form-entry/expression-runner/expression-runner.js +0 -152
  467. package/dist/ngx-formentry/esm2015/form-entry/form-entry.module.js +0 -103
  468. package/dist/ngx-formentry/esm2015/form-entry/form-factory/form-control.service.js +0 -117
  469. package/dist/ngx-formentry/esm2015/form-entry/form-factory/form-node.js +0 -78
  470. package/dist/ngx-formentry/esm2015/form-entry/form-factory/form.factory.js +0 -132
  471. package/dist/ngx-formentry/esm2015/form-entry/form-factory/form.js +0 -193
  472. package/dist/ngx-formentry/esm2015/form-entry/form-factory/hiders-disablers.factory.js +0 -66
  473. package/dist/ngx-formentry/esm2015/form-entry/form-factory/question.factory.js +0 -834
  474. package/dist/ngx-formentry/esm2015/form-entry/form-factory/show-messages.factory.js +0 -30
  475. package/dist/ngx-formentry/esm2015/form-entry/form-factory/validation.factory.js +0 -145
  476. package/dist/ngx-formentry/esm2015/form-entry/form-renderer/form-renderer.component.css.js +0 -156
  477. package/dist/ngx-formentry/esm2015/form-entry/form-renderer/form-renderer.component.js +0 -632
  478. package/dist/ngx-formentry/esm2015/form-entry/helpers/historical-expression-helper-service.js +0 -38
  479. package/dist/ngx-formentry/esm2015/form-entry/helpers/historical-field-helper-service.js +0 -32
  480. package/dist/ngx-formentry/esm2015/form-entry/helpers/js-expression-helper.js +0 -234
  481. package/dist/ngx-formentry/esm2015/form-entry/question-models/checkbox.model.js +0 -11
  482. package/dist/ngx-formentry/esm2015/form-entry/question-models/conditional-validation.model.js +0 -9
  483. package/dist/ngx-formentry/esm2015/form-entry/question-models/date-question.js +0 -12
  484. package/dist/ngx-formentry/esm2015/form-entry/question-models/date-validation.model.js +0 -10
  485. package/dist/ngx-formentry/esm2015/form-entry/question-models/file-upload-question.js +0 -13
  486. package/dist/ngx-formentry/esm2015/form-entry/question-models/group-question.js +0 -12
  487. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/base-options.js +0 -1
  488. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/checkbox-options.js +0 -1
  489. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/data-source.js +0 -1
  490. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/date-question-options.js +0 -1
  491. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +0 -1
  492. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/group-question-options.js +0 -1
  493. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/multi-select-options.js +0 -1
  494. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/nested-questions.js +0 -7
  495. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +0 -1
  496. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/select-option.js +0 -1
  497. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/select-question-options.js +0 -1
  498. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +0 -1
  499. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +0 -1
  500. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/text-question-options.js +0 -1
  501. package/dist/ngx-formentry/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +0 -1
  502. package/dist/ngx-formentry/esm2015/form-entry/question-models/js-expression-validation.model.js +0 -8
  503. package/dist/ngx-formentry/esm2015/form-entry/question-models/max-validation.model.js +0 -9
  504. package/dist/ngx-formentry/esm2015/form-entry/question-models/min-validation.model.js +0 -9
  505. package/dist/ngx-formentry/esm2015/form-entry/question-models/models.js +0 -12
  506. package/dist/ngx-formentry/esm2015/form-entry/question-models/multi-select-question.js +0 -11
  507. package/dist/ngx-formentry/esm2015/form-entry/question-models/pair.model.js +0 -7
  508. package/dist/ngx-formentry/esm2015/form-entry/question-models/question-base.js +0 -24
  509. package/dist/ngx-formentry/esm2015/form-entry/question-models/repeating-question.js +0 -11
  510. package/dist/ngx-formentry/esm2015/form-entry/question-models/select-option.js +0 -7
  511. package/dist/ngx-formentry/esm2015/form-entry/question-models/select-question.js +0 -12
  512. package/dist/ngx-formentry/esm2015/form-entry/question-models/test-order-question.js +0 -15
  513. package/dist/ngx-formentry/esm2015/form-entry/question-models/text-area-input-question.js +0 -13
  514. package/dist/ngx-formentry/esm2015/form-entry/question-models/text-input-question.js +0 -10
  515. package/dist/ngx-formentry/esm2015/form-entry/question-models/ui-select-question.js +0 -11
  516. package/dist/ngx-formentry/esm2015/form-entry/question-models/validation.model.js +0 -7
  517. package/dist/ngx-formentry/esm2015/form-entry/services/debug-mode.service.js +0 -22
  518. package/dist/ngx-formentry/esm2015/form-entry/services/form-errors.service.js +0 -18
  519. package/dist/ngx-formentry/esm2015/form-entry/services/form-schema-compiler.service.js +0 -246
  520. package/dist/ngx-formentry/esm2015/form-entry/services/historical-encounter-data.service.js +0 -171
  521. package/dist/ngx-formentry/esm2015/form-entry/utils/messages.js +0 -12
  522. package/dist/ngx-formentry/esm2015/form-entry/validators/conditional-answered.validator.js +0 -46
  523. package/dist/ngx-formentry/esm2015/form-entry/validators/conditional-required.validator.js +0 -40
  524. package/dist/ngx-formentry/esm2015/form-entry/validators/date.validator.js +0 -18
  525. package/dist/ngx-formentry/esm2015/form-entry/validators/future-date-restriction.validator.js +0 -21
  526. package/dist/ngx-formentry/esm2015/form-entry/validators/js-expression.validator.js +0 -26
  527. package/dist/ngx-formentry/esm2015/form-entry/validators/max-date.validator.js +0 -23
  528. package/dist/ngx-formentry/esm2015/form-entry/validators/max.validator.js +0 -17
  529. package/dist/ngx-formentry/esm2015/form-entry/validators/min-date.validator.js +0 -23
  530. package/dist/ngx-formentry/esm2015/form-entry/validators/min.validator.js +0 -17
  531. package/dist/ngx-formentry/esm2015/form-entry/validators/required.validator.js +0 -11
  532. package/dist/ngx-formentry/esm2015/form-entry/validators/validations.js +0 -5
  533. package/dist/ngx-formentry/esm2015/form-entry/value-adapters/encounter.adapter.js +0 -173
  534. package/dist/ngx-formentry/esm2015/form-entry/value-adapters/obs-adapter-helper.js +0 -490
  535. package/dist/ngx-formentry/esm2015/form-entry/value-adapters/obs.adapter.js +0 -542
  536. package/dist/ngx-formentry/esm2015/form-entry/value-adapters/order.adapter.js +0 -186
  537. package/dist/ngx-formentry/esm2015/form-entry/value-adapters/person-attribute.adapter.js +0 -87
  538. package/dist/ngx-formentry/esm2015/form-entry/value-adapters/value.adapter.js +0 -1
  539. package/dist/ngx-formentry/esm2015/ngx-openmrs-formentry.js +0 -42
  540. package/dist/ngx-formentry/esm2015/public_api.js +0 -51
  541. package/dist/ngx-formentry/esm2015/shared.module.js +0 -15
  542. package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-control-type.js +0 -8
  543. package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-form-array.js +0 -98
  544. package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-form-control.js +0 -96
  545. package/dist/ngx-formentry/esm5/abstract-controls-extension/afe-form-group.js +0 -70
  546. package/dist/ngx-formentry/esm5/abstract-controls-extension/control-extensions.js +0 -5
  547. package/dist/ngx-formentry/esm5/abstract-controls-extension/index.js +0 -5
  548. package/dist/ngx-formentry/esm5/abstract-controls-extension/value-change.listener.js +0 -1
  549. package/dist/ngx-formentry/esm5/change-tracking/control-relation.js +0 -59
  550. package/dist/ngx-formentry/esm5/change-tracking/control-relations.js +0 -46
  551. package/dist/ngx-formentry/esm5/components/afe-ng-select.component.js +0 -87
  552. package/dist/ngx-formentry/esm5/components/appointments-overview/appointments-overview.component.js +0 -123
  553. package/dist/ngx-formentry/esm5/components/check-box/checkbox.component.js +0 -88
  554. package/dist/ngx-formentry/esm5/components/check-box/checkbox.module.js +0 -18
  555. package/dist/ngx-formentry/esm5/components/date-time-picker/date-picker/date-picker.component.js +0 -186
  556. package/dist/ngx-formentry/esm5/components/date-time-picker/date-time-picker.component.js +0 -111
  557. package/dist/ngx-formentry/esm5/components/date-time-picker/date-time-picker.module.js +0 -38
  558. package/dist/ngx-formentry/esm5/components/date-time-picker/picker-modal/modal.component.js +0 -32
  559. package/dist/ngx-formentry/esm5/components/date-time-picker/pipes/moment.pipe.js +0 -17
  560. package/dist/ngx-formentry/esm5/components/date-time-picker/time-picker/time-picker.component.js +0 -117
  561. package/dist/ngx-formentry/esm5/components/file-upload/file-upload.component.js +0 -126
  562. package/dist/ngx-formentry/esm5/components/file-upload/file-upload.module.js +0 -31
  563. package/dist/ngx-formentry/esm5/components/file-upload/secure.pipe.js +0 -105
  564. package/dist/ngx-formentry/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +0 -140
  565. package/dist/ngx-formentry/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +0 -45
  566. package/dist/ngx-formentry/esm5/components/remote-select/remote-select.component.js +0 -163
  567. package/dist/ngx-formentry/esm5/components/remote-select/remote-select.module.js +0 -21
  568. package/dist/ngx-formentry/esm5/components/select/diacritics.js +0 -860
  569. package/dist/ngx-formentry/esm5/components/select/option-list.js +0 -224
  570. package/dist/ngx-formentry/esm5/components/select/option.js +0 -31
  571. package/dist/ngx-formentry/esm5/components/select/select-dropdown.component.js +0 -131
  572. package/dist/ngx-formentry/esm5/components/select/select-dropdown.component.style.js +0 -2
  573. package/dist/ngx-formentry/esm5/components/select/select.component.js +0 -456
  574. package/dist/ngx-formentry/esm5/components/select/select.component.style.js +0 -2
  575. package/dist/ngx-formentry/esm5/components/select/select.module.js +0 -19
  576. package/dist/ngx-formentry/esm5/encounter-viewer/display-controls/file-preview.component.js +0 -109
  577. package/dist/ngx-formentry/esm5/encounter-viewer/display-controls/question-control.component.js +0 -104
  578. package/dist/ngx-formentry/esm5/encounter-viewer/display-controls/remote-answer.component.js +0 -86
  579. package/dist/ngx-formentry/esm5/encounter-viewer/encounter-container/encounter-container.component.js +0 -45
  580. package/dist/ngx-formentry/esm5/encounter-viewer/encounter-pdf-viewer.service.js +0 -521
  581. package/dist/ngx-formentry/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +0 -185
  582. package/dist/ngx-formentry/esm5/encounter-viewer/encounter-viewer.module.js +0 -39
  583. package/dist/ngx-formentry/esm5/encounter-viewer/encounter-viewer.service.js +0 -165
  584. package/dist/ngx-formentry/esm5/form-entry/control-alerts/alert-helpers.js +0 -44
  585. package/dist/ngx-formentry/esm5/form-entry/control-alerts/can-generate-alert.js +0 -1
  586. package/dist/ngx-formentry/esm5/form-entry/control-calculators/can-calculate.js +0 -1
  587. package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/can-disable.js +0 -1
  588. package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/can-hide.js +0 -1
  589. package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/disabler-helper.js +0 -37
  590. package/dist/ngx-formentry/esm5/form-entry/control-hiders-disablers/hider-helpers.js +0 -44
  591. package/dist/ngx-formentry/esm5/form-entry/data-sources/data-sources.js +0 -37
  592. package/dist/ngx-formentry/esm5/form-entry/data-sources/dummy-data-source.js +0 -106
  593. package/dist/ngx-formentry/esm5/form-entry/directives/historical-value-directive.js +0 -72
  594. package/dist/ngx-formentry/esm5/form-entry/error-renderer/error-renderer.component.js +0 -62
  595. package/dist/ngx-formentry/esm5/form-entry/expression-runner/expression-runner.js +0 -158
  596. package/dist/ngx-formentry/esm5/form-entry/form-entry.module.js +0 -107
  597. package/dist/ngx-formentry/esm5/form-entry/form-factory/control-relations.factory.js +0 -243
  598. package/dist/ngx-formentry/esm5/form-entry/form-factory/form-control.service.js +0 -120
  599. package/dist/ngx-formentry/esm5/form-entry/form-factory/form-node.js +0 -116
  600. package/dist/ngx-formentry/esm5/form-entry/form-factory/form.factory.js +0 -136
  601. package/dist/ngx-formentry/esm5/form-entry/form-factory/form.js +0 -213
  602. package/dist/ngx-formentry/esm5/form-entry/form-factory/hiders-disablers.factory.js +0 -68
  603. package/dist/ngx-formentry/esm5/form-entry/form-factory/question.factory.js +0 -838
  604. package/dist/ngx-formentry/esm5/form-entry/form-factory/show-messages.factory.js +0 -32
  605. package/dist/ngx-formentry/esm5/form-entry/form-factory/validation.factory.js +0 -189
  606. package/dist/ngx-formentry/esm5/form-entry/form-renderer/form-renderer.component.css.js +0 -2
  607. package/dist/ngx-formentry/esm5/form-entry/form-renderer/form-renderer.component.js +0 -211
  608. package/dist/ngx-formentry/esm5/form-entry/helpers/historical-expression-helper-service.js +0 -41
  609. package/dist/ngx-formentry/esm5/form-entry/helpers/historical-field-helper-service.js +0 -36
  610. package/dist/ngx-formentry/esm5/form-entry/helpers/js-expression-helper.js +0 -242
  611. package/dist/ngx-formentry/esm5/form-entry/question-models/checkbox.model.js +0 -16
  612. package/dist/ngx-formentry/esm5/form-entry/question-models/conditional-validation.model.js +0 -14
  613. package/dist/ngx-formentry/esm5/form-entry/question-models/date-question.js +0 -17
  614. package/dist/ngx-formentry/esm5/form-entry/question-models/date-validation.model.js +0 -15
  615. package/dist/ngx-formentry/esm5/form-entry/question-models/file-upload-question.js +0 -18
  616. package/dist/ngx-formentry/esm5/form-entry/question-models/group-question.js +0 -17
  617. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/base-options.js +0 -1
  618. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/checkbox-options.js +0 -1
  619. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/data-source.js +0 -1
  620. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/date-question-options.js +0 -1
  621. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +0 -1
  622. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/group-question-options.js +0 -1
  623. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/multi-select-options.js +0 -1
  624. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/nested-questions.js +0 -11
  625. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/repeating-question-options.js +0 -1
  626. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/select-option.js +0 -1
  627. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/select-question-options.js +0 -1
  628. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/test-order-question-options.js +0 -1
  629. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/text-area-question-options.js +0 -1
  630. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/text-question-options.js +0 -1
  631. package/dist/ngx-formentry/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +0 -1
  632. package/dist/ngx-formentry/esm5/form-entry/question-models/js-expression-validation.model.js +0 -13
  633. package/dist/ngx-formentry/esm5/form-entry/question-models/max-validation.model.js +0 -14
  634. package/dist/ngx-formentry/esm5/form-entry/question-models/min-validation.model.js +0 -14
  635. package/dist/ngx-formentry/esm5/form-entry/question-models/models.js +0 -12
  636. package/dist/ngx-formentry/esm5/form-entry/question-models/multi-select-question.js +0 -16
  637. package/dist/ngx-formentry/esm5/form-entry/question-models/pair.model.js +0 -9
  638. package/dist/ngx-formentry/esm5/form-entry/question-models/question-base.js +0 -26
  639. package/dist/ngx-formentry/esm5/form-entry/question-models/repeating-question.js +0 -16
  640. package/dist/ngx-formentry/esm5/form-entry/question-models/select-option.js +0 -9
  641. package/dist/ngx-formentry/esm5/form-entry/question-models/select-question.js +0 -17
  642. package/dist/ngx-formentry/esm5/form-entry/question-models/test-order-question.js +0 -20
  643. package/dist/ngx-formentry/esm5/form-entry/question-models/text-area-input-question.js +0 -18
  644. package/dist/ngx-formentry/esm5/form-entry/question-models/text-input-question.js +0 -15
  645. package/dist/ngx-formentry/esm5/form-entry/question-models/ui-select-question.js +0 -16
  646. package/dist/ngx-formentry/esm5/form-entry/question-models/validation.model.js +0 -9
  647. package/dist/ngx-formentry/esm5/form-entry/services/debug-mode.service.js +0 -24
  648. package/dist/ngx-formentry/esm5/form-entry/services/form-errors.service.js +0 -20
  649. package/dist/ngx-formentry/esm5/form-entry/services/form-schema-compiler.service.js +0 -252
  650. package/dist/ngx-formentry/esm5/form-entry/services/historical-encounter-data.service.js +0 -178
  651. package/dist/ngx-formentry/esm5/form-entry/utils/messages.js +0 -16
  652. package/dist/ngx-formentry/esm5/form-entry/validators/conditional-answered.validator.js +0 -49
  653. package/dist/ngx-formentry/esm5/form-entry/validators/conditional-required.validator.js +0 -43
  654. package/dist/ngx-formentry/esm5/form-entry/validators/date.validator.js +0 -21
  655. package/dist/ngx-formentry/esm5/form-entry/validators/future-date-restriction.validator.js +0 -24
  656. package/dist/ngx-formentry/esm5/form-entry/validators/js-expression.validator.js +0 -29
  657. package/dist/ngx-formentry/esm5/form-entry/validators/max-date.validator.js +0 -27
  658. package/dist/ngx-formentry/esm5/form-entry/validators/max.validator.js +0 -21
  659. package/dist/ngx-formentry/esm5/form-entry/validators/min-date.validator.js +0 -27
  660. package/dist/ngx-formentry/esm5/form-entry/validators/min.validator.js +0 -21
  661. package/dist/ngx-formentry/esm5/form-entry/validators/required.validator.js +0 -15
  662. package/dist/ngx-formentry/esm5/form-entry/validators/validations.js +0 -8
  663. package/dist/ngx-formentry/esm5/form-entry/value-adapters/encounter.adapter.js +0 -176
  664. package/dist/ngx-formentry/esm5/form-entry/value-adapters/obs-adapter-helper.js +0 -508
  665. package/dist/ngx-formentry/esm5/form-entry/value-adapters/obs.adapter.js +0 -735
  666. package/dist/ngx-formentry/esm5/form-entry/value-adapters/order.adapter.js +0 -226
  667. package/dist/ngx-formentry/esm5/form-entry/value-adapters/person-attribute.adapter.js +0 -91
  668. package/dist/ngx-formentry/esm5/form-entry/value-adapters/value.adapter.js +0 -1
  669. package/dist/ngx-formentry/esm5/ngx-openmrs-formentry.js +0 -42
  670. package/dist/ngx-formentry/esm5/public_api.js +0 -51
  671. package/dist/ngx-formentry/esm5/shared.module.js +0 -19
  672. package/dist/ngx-formentry/fesm2015/ngx-openmrs-formentry.js +0 -10919
  673. package/dist/ngx-formentry/fesm2015/ngx-openmrs-formentry.js.map +0 -1
  674. package/dist/ngx-formentry/fesm5/ngx-openmrs-formentry.js +0 -10359
  675. package/dist/ngx-formentry/fesm5/ngx-openmrs-formentry.js.map +0 -1
  676. package/dist/ngx-formentry/package.json +0 -35
  677. package/scripts/build.sh +0 -2
  678. package/tsconfig.json +0 -20
  679. package/tslint.json +0 -96
@@ -2,33 +2,34 @@ import { Injectable } from '@angular/core';
2
2
  import { JsExpressionValidationModel } from '../question-models/js-expression-validation.model';
3
3
  import { ConditionalValidationModel } from '../question-models/conditional-validation.model';
4
4
  import { GroupNode, LeafNode, ArrayNode } from './form-node';
5
- export class ControlRelationsFactory {
6
- constructor() { }
7
- buildRelations(rootNode) {
8
- const controlsStore = this.mapControlIds(rootNode, {});
9
- for (const key in controlsStore) {
5
+ var ControlRelationsFactory = /** @class */ (function () {
6
+ function ControlRelationsFactory() {
7
+ }
8
+ ControlRelationsFactory.prototype.buildRelations = function (rootNode) {
9
+ var controlsStore = this.mapControlIds(rootNode, {});
10
+ for (var key in controlsStore) {
10
11
  if (controlsStore.hasOwnProperty(key)) {
11
- const nodeBase = controlsStore[key];
12
+ var nodeBase = controlsStore[key];
12
13
  this.setRelations(controlsStore, nodeBase);
13
14
  }
14
15
  }
15
- }
16
- buildArrayNodeRelations(node) {
17
- const form = node.form;
16
+ };
17
+ ControlRelationsFactory.prototype.buildArrayNodeRelations = function (node) {
18
+ var form = node.form;
18
19
  if (!form) {
19
20
  return;
20
21
  }
21
- const rootNode = form.rootNode;
22
+ var rootNode = form.rootNode;
22
23
  // build relations for controls in the same array
23
24
  this.buildRelations(node);
24
25
  // build relations for control outside the array
25
- const rootControlsStore = this.mapControlIds(rootNode, {});
26
- const arrayControlStore = this.mapControlIds(node, {});
27
- for (const key in rootControlsStore) {
26
+ var rootControlsStore = this.mapControlIds(rootNode, {});
27
+ var arrayControlStore = this.mapControlIds(node, {});
28
+ for (var key in rootControlsStore) {
28
29
  if (rootControlsStore.hasOwnProperty(key)) {
29
- const child = rootControlsStore[key];
30
+ var child = rootControlsStore[key];
30
31
  if (child instanceof LeafNode) {
31
- const questionBase = child.question;
32
+ var questionBase = child.question;
32
33
  if (questionBase.key && questionBase.key.length > 0) {
33
34
  this.setRelations(arrayControlStore, child);
34
35
  }
@@ -38,71 +39,75 @@ export class ControlRelationsFactory {
38
39
  // define relations for controls outside the group to controls in this group
39
40
  this.createRelationsToArrayControls(node);
40
41
  // fire relations
41
- for (const id in arrayControlStore) {
42
+ for (var id in arrayControlStore) {
42
43
  if (arrayControlStore.hasOwnProperty(id)) {
43
- const child = arrayControlStore[id];
44
- const control = child.control;
44
+ var child = arrayControlStore[id];
45
+ var control = child.control;
45
46
  control.updateHiddenState();
46
47
  control.updateAlert();
47
48
  }
48
49
  }
49
- }
50
- createRelationsToArrayControls(node) {
51
- const form = node.form;
52
- const rootNode = form.rootNode;
50
+ };
51
+ ControlRelationsFactory.prototype.createRelationsToArrayControls = function (node) {
52
+ var form = node.form;
53
+ var rootNode = form.rootNode;
53
54
  // build relations for control outside the array
54
- const rootControlsStore = this.mapControlIds(rootNode, {});
55
- const arrayControlStore = this.mapControlIds(node, {});
55
+ var rootControlsStore = this.mapControlIds(rootNode, {});
56
+ var arrayControlStore = this.mapControlIds(node, {});
56
57
  // loop through form controls
57
- for (const key in rootControlsStore) {
58
+ for (var key in rootControlsStore) {
58
59
  if (rootControlsStore.hasOwnProperty(key)) {
59
- const rChild = rootControlsStore[key];
60
- const parentNodePath = node.path.substring(0, node.path.lastIndexOf('.'));
60
+ var rChild = rootControlsStore[key];
61
+ var parentNodePath = node.path.substring(0, node.path.lastIndexOf('.'));
61
62
  if (rChild.path.indexOf(parentNodePath + '.') === -1) {
62
- // loop through controls in the array group
63
- for (const id in arrayControlStore) {
63
+ var _loop_1 = function (id) {
64
64
  if (arrayControlStore.hasOwnProperty(id)) {
65
- const aChild = arrayControlStore[id];
66
- const aChildId = aChild.question.key;
67
- if (this.hasRelation(aChildId, rChild.question)) {
68
- const nodes = node.form.searchNodeByPath(rootNode, parentNodePath, []);
65
+ var aChild = arrayControlStore[id];
66
+ var aChildId = aChild.question.key;
67
+ if (this_1.hasRelation(aChildId, rChild.question)) {
68
+ var nodes = node.form.searchNodeByPath(rootNode, parentNodePath, []);
69
69
  if (nodes.length > 0) {
70
- const an = nodes[0];
71
- const rootControl = rChild.control;
72
- if (rootControl.controlRelations.otherRelations.indexOf(an) ===
70
+ var an = nodes[0];
71
+ var rootControl_1 = rChild.control;
72
+ if (rootControl_1.controlRelations.otherRelations.indexOf(an) ===
73
73
  -1) {
74
- rootControl.controlRelations.otherRelations.push(an);
74
+ rootControl_1.controlRelations.otherRelations.push(an);
75
75
  }
76
- aChild.control.addValueChangeListener((value) => {
77
- if (rootControl.updateCalculatedValue) {
78
- rootControl.updateCalculatedValue();
76
+ aChild.control.addValueChangeListener(function (value) {
77
+ if (rootControl_1.updateCalculatedValue) {
78
+ rootControl_1.updateCalculatedValue();
79
79
  }
80
- rootControl.updateValueAndValidity();
81
- if (rootControl.updateHiddenState) {
82
- rootControl.updateHiddenState();
80
+ rootControl_1.updateValueAndValidity();
81
+ if (rootControl_1.updateHiddenState) {
82
+ rootControl_1.updateHiddenState();
83
83
  }
84
- if (rootControl.updateAlert) {
85
- rootControl.updateAlert();
84
+ if (rootControl_1.updateAlert) {
85
+ rootControl_1.updateAlert();
86
86
  }
87
- if (rootControl.updateDisabledState) {
88
- rootControl.updateDisabledState();
87
+ if (rootControl_1.updateDisabledState) {
88
+ rootControl_1.updateDisabledState();
89
89
  }
90
90
  });
91
91
  }
92
92
  }
93
93
  }
94
+ };
95
+ var this_1 = this;
96
+ // loop through controls in the array group
97
+ for (var id in arrayControlStore) {
98
+ _loop_1(id);
94
99
  }
95
100
  }
96
101
  }
97
102
  }
98
- }
99
- getRelationsForControl(id, node) {
100
- const relations = new Array();
101
- const nodeBaseArray = node.form.searchNodeByQuestionId(id);
103
+ };
104
+ ControlRelationsFactory.prototype.getRelationsForControl = function (id, node) {
105
+ var relations = new Array();
106
+ var nodeBaseArray = node.form.searchNodeByQuestionId(id);
102
107
  if (nodeBaseArray.length > 0) {
103
- const nodeBase = nodeBaseArray[0];
104
- const controlList = this.mapControlIds(node, {});
105
- for (const key in controlList) {
108
+ var nodeBase = nodeBaseArray[0];
109
+ var controlList = this.mapControlIds(node, {});
110
+ for (var key in controlList) {
106
111
  if (controlList.hasOwnProperty(key)) {
107
112
  if (this.hasRelation(controlList[key].question.key, nodeBase.question)) {
108
113
  relations.push(controlList[key].control);
@@ -111,23 +116,23 @@ export class ControlRelationsFactory {
111
116
  }
112
117
  }
113
118
  return relations;
114
- }
115
- mapControlIds(node, controlsStore) {
116
- const children = node.children;
117
- for (const key in children) {
119
+ };
120
+ ControlRelationsFactory.prototype.mapControlIds = function (node, controlsStore) {
121
+ var children = node.children;
122
+ for (var key in children) {
118
123
  if (children.hasOwnProperty(key)) {
119
- const child = children[key];
124
+ var child = children[key];
120
125
  if (child instanceof GroupNode) {
121
126
  this.mapControlIds(child, controlsStore);
122
127
  }
123
128
  else if (child instanceof LeafNode) {
124
- const questionBase = child.question;
129
+ var questionBase = child.question;
125
130
  if (questionBase.key && questionBase.key.length > 0) {
126
131
  controlsStore[questionBase.key] = child;
127
132
  }
128
133
  }
129
134
  else if (child instanceof ArrayNode) {
130
- const questionBase = child.question;
135
+ var questionBase = child.question;
131
136
  if (questionBase.key && questionBase.key.length > 0) {
132
137
  controlsStore[questionBase.key] = child;
133
138
  }
@@ -135,20 +140,20 @@ export class ControlRelationsFactory {
135
140
  }
136
141
  }
137
142
  return controlsStore;
138
- }
139
- setRelations(controlsStore, nodeBase) {
140
- const questionBase = nodeBase.question;
141
- const id = questionBase.key;
142
- for (const key in controlsStore) {
143
+ };
144
+ ControlRelationsFactory.prototype.setRelations = function (controlsStore, nodeBase) {
145
+ var questionBase = nodeBase.question;
146
+ var id = questionBase.key;
147
+ for (var key in controlsStore) {
143
148
  if (controlsStore.hasOwnProperty(key) && key !== id) {
144
- const node = controlsStore[key];
145
- const question = node.question;
149
+ var node = controlsStore[key];
150
+ var question = node.question;
146
151
  if (this.hasRelation(id, question, nodeBase)) {
147
152
  this.addRelationToControl(node.control, nodeBase.control);
148
153
  }
149
154
  // add conditional required and conditional answered relations
150
155
  if (typeof question.required === 'object') {
151
- const required = question.required;
156
+ var required = question.required;
152
157
  if (required.type === 'conditionalRequired') {
153
158
  if (required.referenceQuestionId === id) {
154
159
  this.addRelationToControl(node.control, nodeBase.control);
@@ -157,14 +162,14 @@ export class ControlRelationsFactory {
157
162
  }
158
163
  }
159
164
  }
160
- }
161
- hasRelation(id, questionBase, nodeBase) {
162
- let hasRelation = false;
165
+ };
166
+ ControlRelationsFactory.prototype.hasRelation = function (id, questionBase, nodeBase) {
167
+ var hasRelation = false;
163
168
  if (questionBase.validators && questionBase.validators.length > 0) {
164
- questionBase.validators.forEach((element) => {
169
+ questionBase.validators.forEach(function (element) {
165
170
  if (element instanceof JsExpressionValidationModel) {
166
- const model = element;
167
- const failsWhenExpression = model.failsWhenExpression;
171
+ var model = element;
172
+ var failsWhenExpression = model.failsWhenExpression;
168
173
  if (failsWhenExpression && failsWhenExpression.indexOf(id) !== -1) {
169
174
  hasRelation = true;
170
175
  }
@@ -179,13 +184,13 @@ export class ControlRelationsFactory {
179
184
  // add hiders and disablers relations
180
185
  if (!hasRelation) {
181
186
  if (typeof questionBase.hide === 'string') {
182
- const hide = questionBase.hide;
187
+ var hide = questionBase.hide;
183
188
  if (hide.length > 0 && hide.indexOf(id) !== -1) {
184
189
  hasRelation = true;
185
190
  }
186
191
  }
187
192
  else if (typeof questionBase.hide === 'object') {
188
- const hideObj = questionBase.hide;
193
+ var hideObj = questionBase.hide;
189
194
  if (hideObj.field === id) {
190
195
  hasRelation = true;
191
196
  }
@@ -194,7 +199,7 @@ export class ControlRelationsFactory {
194
199
  hasRelation = true;
195
200
  }
196
201
  if (typeof questionBase.disable === 'string') {
197
- const disable = questionBase.disable;
202
+ var disable = questionBase.disable;
198
203
  if (disable.length > 0 && disable.indexOf(id) !== -1) {
199
204
  hasRelation = true;
200
205
  }
@@ -208,8 +213,8 @@ export class ControlRelationsFactory {
208
213
  hasRelation = true;
209
214
  }
210
215
  return hasRelation;
211
- }
212
- addRelationToControl(control, related) {
216
+ };
217
+ ControlRelationsFactory.prototype.addRelationToControl = function (control, related) {
213
218
  // let relations = control.controlRelations.relations;
214
219
  //
215
220
  // let hasRelation = false;
@@ -227,10 +232,12 @@ export class ControlRelationsFactory {
227
232
  // if ( !hasRelation ) {
228
233
  control.controlRelations.addRelatedControls(related);
229
234
  // }
230
- }
231
- }
232
- ControlRelationsFactory.decorators = [
233
- { type: Injectable },
234
- ];
235
- ControlRelationsFactory.ctorParameters = () => [];
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC1yZWxhdGlvbnMuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1vcGVubXJzLWZvcm1lbnRyeS8iLCJzb3VyY2VzIjpbImZvcm0tZW50cnkvZm9ybS1mYWN0b3J5L2NvbnRyb2wtcmVsYXRpb25zLmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQVksU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNdkUsTUFBTTtJQUNKLGdCQUFlLENBQUM7SUFFaEIsY0FBYyxDQUFDLFFBQW1CO1FBQ2hDLE1BQU0sYUFBYSxHQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVELEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sUUFBUSxHQUFhLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBZTtRQUNyQyxNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sQ0FBQztRQUNULENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBYyxJQUFJ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QU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxFQUFFLENBQUMsQ0FDRCxDQUFDLFdBQVc7WUFDWixZQUFZLENBQUMsbUJBQW1CO1lBQ2hDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMzQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDcEQsQ0FBQyxDQUFDLENBQUM7WUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxvQkFBb0IsQ0FDbEIsT0FBc0MsRUFDdEMsT0FBc0M7UUFFdEMsdURBQXVEO1FBQ3ZELEVBQUU7UUFDRiw0QkFBNEI7UUFDNUIsRUFBRTtRQUNGLG1DQUFtQztRQUNuQyxFQUFFO1FBQ0YseUVBQXlFO1FBQ3pFLEVBQUU7UUFDRiw4R0FBOEc7UUFDOUcsRUFBRTtRQUNGLDRFQUE0RTtRQUM1RSw0QkFBNEI7UUFDNUIsUUFBUTtRQUNSLFFBQVE7UUFFUix3QkFBd0I7UUFDeEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELElBQUk7SUFDTixDQUFDOzs7WUF0VEYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gaW1wb3J0IHsgQ29udHJvbFJlbGF0aW9uIH0gZnJvbSAgJy4uLy4uL2NoYW5nZS10cmFja2luZy9jb250cm9sLXJlbGF0aW9uJztcbmltcG9ydCB7IFF1ZXN0aW9uQmFzZSB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9xdWVzdGlvbi1iYXNlJztcbmltcG9ydCB7IEpzRXhwcmVzc2lvblZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9qcy1leHByZXNzaW9uLXZhbGlkYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvY29uZGl0aW9uYWwtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlQmFzZSwgR3JvdXBOb2RlLCBMZWFmTm9kZSwgQXJyYXlOb2RlIH0gZnJvbSAnLi9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgQWZlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24vYWZlLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBBZmVGb3JtQXJyYXkgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24vYWZlLWZvcm0tYXJyYXknO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4vZm9ybSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sUmVsYXRpb25zRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBidWlsZFJlbGF0aW9ucyhyb290Tm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgY29udHJvbHNTdG9yZTogYW55ID0gdGhpcy5tYXBDb250cm9sSWRzKHJvb3ROb2RlLCB7fSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cm9sc1N0b3JlKSB7XG4gICAgICBpZiAoY29udHJvbHNTdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IG5vZGVCYXNlOiBOb2RlQmFzZSA9IGNvbnRyb2xzU3RvcmVba2V5XTtcblxuICAgICAgICB0aGlzLnNldFJlbGF0aW9ucyhjb250cm9sc1N0b3JlLCBub2RlQmFzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYnVpbGRBcnJheU5vZGVSZWxhdGlvbnMobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgZm9ybTogRm9ybSA9IG5vZGUuZm9ybTtcblxuICAgIGlmICghZm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb290Tm9kZTogR3JvdXBOb2RlID0gZm9ybS5yb290Tm9kZTtcblxuICAgIC8vIGJ1aWxkIHJlbGF0aW9ucyBmb3IgY29udHJvbHMgaW4gdGhlIHNhbWUgYXJyYXlcbiAgICB0aGlzLmJ1aWxkUmVsYXRpb25zKG5vZGUpO1xuXG4gICAgLy8gYnVpbGQgcmVsYXRpb25zIGZvciBjb250cm9sIG91dHNpZGUgdGhlIGFycmF5XG4gICAgY29uc3Qgcm9vdENvbnRyb2xzU3RvcmU6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhyb290Tm9kZSwge30pO1xuICAgIGNvbnN0IGFycmF5Q29udHJvbFN0b3JlOiBhbnkgPSB0aGlzLm1hcENvbnRyb2xJZHMobm9kZSwge30pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcm9vdENvbnRyb2xzU3RvcmUpIHtcbiAgICAgIGlmIChyb290Q29udHJvbHNTdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBOb2RlQmFzZSA9IHJvb3RDb250cm9sc1N0b3JlW2tleV07XG5cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBMZWFmTm9kZSkucXVlc3Rpb247XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb25CYXNlLmtleSAmJiBxdWVzdGlvbkJhc2Uua2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVsYXRpb25zKGFycmF5Q29udHJvbFN0b3JlLCBjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHJlbGF0aW9ucyBmb3IgY29udHJvbHMgb3V0c2lkZSB0aGUgZ3JvdXAgdG8gY29udHJvbHMgaW4gdGhpcyBncm91cFxuICAgIHRoaXMuY3JlYXRlUmVsYXRpb25zVG9BcnJheUNvbnRyb2xzKG5vZGUpO1xuXG4gICAgLy8gZmlyZSByZWxhdGlvbnNcbiAgICBmb3IgKGNvbnN0IGlkIGluIGFycmF5Q29udHJvbFN0b3JlKSB7XG4gICAgICBpZiAoYXJyYXlDb250cm9sU3RvcmUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBOb2RlQmFzZSA9IGFycmF5Q29udHJvbFN0b3JlW2lkXTtcbiAgICAgICAgY29uc3QgY29udHJvbDogQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXkgPSBjaGlsZC5jb250cm9sIGFzXG4gICAgICAgICAgfCBBZmVGb3JtQ29udHJvbFxuICAgICAgICAgIHwgQWZlRm9ybUFycmF5O1xuICAgICAgICBjb250cm9sLnVwZGF0ZUhpZGRlblN0YXRlKCk7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlQWxlcnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVSZWxhdGlvbnNUb0FycmF5Q29udHJvbHMobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgZm9ybTogRm9ybSA9IG5vZGUuZm9ybTtcblxuICAgIGNvbnN0IHJvb3ROb2RlOiBHcm91cE5vZGUgPSBmb3JtLnJvb3ROb2RlO1xuXG4gICAgLy8gYnVpbGQgcmVsYXRpb25zIGZvciBjb250cm9sIG91dHNpZGUgdGhlIGFycmF5XG4gICAgY29uc3Qgcm9vdENvbnRyb2xzU3RvcmU6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhyb290Tm9kZSwge30pO1xuICAgIGNvbnN0IGFycmF5Q29udHJvbFN0b3JlOiBhbnkgPSB0aGlzLm1hcENvbnRyb2xJZHMobm9kZSwge30pO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIGZvcm0gY29udHJvbHNcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByb290Q29udHJvbHNTdG9yZSkge1xuICAgICAgaWYgKHJvb3RDb250cm9sc1N0b3JlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgckNoaWxkOiBOb2RlQmFzZSA9IHJvb3RDb250cm9sc1N0b3JlW2tleV07XG5cbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZVBhdGggPSBub2RlLnBhdGguc3Vic3RyaW5nKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgbm9kZS5wYXRoLmxhc3RJbmRleE9mKCcuJylcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAockNoaWxkLnBhdGguaW5kZXhPZihwYXJlbnROb2RlUGF0aCArICcuJykgPT09IC0xKSB7XG4gICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGNvbnRyb2xzIGluIHRoZSBhcnJheSBncm91cFxuICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gYXJyYXlDb250cm9sU3RvcmUpIHtcbiAgICAgICAgICAgIGlmIChhcnJheUNvbnRyb2xTdG9yZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYUNoaWxkOiBOb2RlQmFzZSA9IGFycmF5Q29udHJvbFN0b3JlW2lkXTtcbiAgICAgICAgICAgICAgY29uc3QgYUNoaWxkSWQgPSBhQ2hpbGQucXVlc3Rpb24ua2V5O1xuICAgICAgICAgICAgICBpZiAodGhpcy5oYXNSZWxhdGlvbihhQ2hpbGRJZCwgckNoaWxkLnF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzOiBBcnJheTxOb2RlQmFzZT4gPSBub2RlLmZvcm0uc2VhcmNoTm9kZUJ5UGF0aChcbiAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuID0gbm9kZXNbMF0gYXMgQXJyYXlOb2RlO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdENvbnRyb2wgPSByQ2hpbGQuY29udHJvbCBhc1xuICAgICAgICAgICAgICAgICAgICB8IEFmZUZvcm1Db250cm9sXG4gICAgICAgICAgICAgICAgICAgIHwgQWZlRm9ybUFycmF5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb250cm9sLmNvbnRyb2xSZWxhdGlvbnMub3RoZXJSZWxhdGlvbnMuaW5kZXhPZihhbikgPT09XG4gICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdENvbnRyb2wuY29udHJvbFJlbGF0aW9ucy5vdGhlclJlbGF0aW9ucy5wdXNoKGFuKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgKGFDaGlsZC5jb250cm9sIGFzXG4gICAgICAgICAgICAgICAgICAgIHwgQWZlRm9ybUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgfCBBZmVGb3JtQXJyYXkpLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVDYWxjdWxhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVDYWxjdWxhdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZUhpZGRlblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgKHJvb3RDb250cm9sIGFzIGFueSkudXBkYXRlSGlkZGVuU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVBbGVydCkge1xuICAgICAgICAgICAgICAgICAgICAgIChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZUFsZXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJvb3RDb250cm9sIGFzIGFueSkudXBkYXRlRGlzYWJsZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVsYXRpb25zRm9yQ29udHJvbChcbiAgICBpZCxcbiAgICBub2RlOiBHcm91cE5vZGVcbiAgKTogQXJyYXk8QWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXk+IHtcbiAgICBjb25zdCByZWxhdGlvbnM6IEFycmF5PEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5PiA9IG5ldyBBcnJheTxcbiAgICAgIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICAgPigpO1xuXG4gICAgY29uc3Qgbm9kZUJhc2VBcnJheTogQXJyYXk8Tm9kZUJhc2U+ID0gbm9kZS5mb3JtLnNlYXJjaE5vZGVCeVF1ZXN0aW9uSWQoaWQpO1xuXG4gICAgaWYgKG5vZGVCYXNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZUJhc2U6IE5vZGVCYXNlID0gbm9kZUJhc2VBcnJheVswXTtcblxuICAgICAgY29uc3QgY29udHJvbExpc3Q6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhub2RlLCB7fSk7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2xMaXN0KSB7XG4gICAgICAgIGlmIChjb250cm9sTGlzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNSZWxhdGlvbihjb250cm9sTGlzdFtrZXldLnF1ZXN0aW9uLmtleSwgbm9kZUJhc2UucXVlc3Rpb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZWxhdGlvbnMucHVzaChjb250cm9sTGlzdFtrZXldLmNvbnRyb2wpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpb25zO1xuICB9XG5cbiAgbWFwQ29udHJvbElkcyhub2RlOiBHcm91cE5vZGUsIGNvbnRyb2xzU3RvcmU6IGFueSkge1xuICAgIGNvbnN0IGNoaWxkcmVuOiBOb2RlQmFzZSA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZHJlbikge1xuICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgY2hpbGQ6IE5vZGVCYXNlID0gY2hpbGRyZW5ba2V5XTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBHcm91cE5vZGUpIHtcbiAgICAgICAgICB0aGlzLm1hcENvbnRyb2xJZHMoY2hpbGQsIGNvbnRyb2xzU3RvcmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBMZWFmTm9kZSkucXVlc3Rpb247XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb25CYXNlLmtleSAmJiBxdWVzdGlvbkJhc2Uua2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRyb2xzU3RvcmVbcXVlc3Rpb25CYXNlLmtleV0gPSBjaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBBcnJheU5vZGUpLnF1ZXN0aW9uO1xuXG4gICAgICAgICAgaWYgKHF1ZXN0aW9uQmFzZS5rZXkgJiYgcXVlc3Rpb25CYXNlLmtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb250cm9sc1N0b3JlW3F1ZXN0aW9uQmFzZS5rZXldID0gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzU3RvcmU7XG4gIH1cblxuICBzZXRSZWxhdGlvbnMoY29udHJvbHNTdG9yZTogYW55LCBub2RlQmFzZTogTm9kZUJhc2UpIHtcbiAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IG5vZGVCYXNlLnF1ZXN0aW9uO1xuXG4gICAgY29uc3QgaWQgPSBxdWVzdGlvbkJhc2Uua2V5O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbHNTdG9yZSkge1xuICAgICAgaWYgKGNvbnRyb2xzU3RvcmUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgIT09IGlkKSB7XG4gICAgICAgIGNvbnN0IG5vZGU6IE5vZGVCYXNlID0gY29udHJvbHNTdG9yZVtrZXldO1xuICAgICAgICBjb25zdCBxdWVzdGlvbjogUXVlc3Rpb25CYXNlID0gbm9kZS5xdWVzdGlvbjtcblxuICAgICAgICBpZiAodGhpcy5oYXNSZWxhdGlvbihpZCwgcXVlc3Rpb24sIG5vZGVCYXNlKSkge1xuICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25Ub0NvbnRyb2woXG4gICAgICAgICAgICBub2RlLmNvbnRyb2wgYXMgQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXksXG4gICAgICAgICAgICBub2RlQmFzZS5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb25kaXRpb25hbCByZXF1aXJlZCBhbmQgY29uZGl0aW9uYWwgYW5zd2VyZWQgcmVsYXRpb25zXG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24ucmVxdWlyZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQ6IGFueSA9IHF1ZXN0aW9uLnJlcXVpcmVkO1xuXG4gICAgICAgICAgaWYgKHJlcXVpcmVkLnR5cGUgPT09ICdjb25kaXRpb25hbFJlcXVpcmVkJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkLnJlZmVyZW5jZVF1ZXN0aW9uSWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25Ub0NvbnRyb2woXG4gICAgICAgICAgICAgICAgbm9kZS5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5LFxuICAgICAgICAgICAgICAgIG5vZGVCYXNlLmNvbnRyb2wgYXMgQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNSZWxhdGlvbihpZDogc3RyaW5nLCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSwgbm9kZUJhc2U/OiBOb2RlQmFzZSkge1xuICAgIGxldCBoYXNSZWxhdGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzICYmIHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBKc0V4cHJlc3Npb25WYWxpZGF0aW9uTW9kZWwpIHtcbiAgICAgICAgICBjb25zdCBtb2RlbDogSnNFeHByZXNzaW9uVmFsaWRhdGlvbk1vZGVsID0gZWxlbWVudCBhcyBKc0V4cHJlc3Npb25WYWxpZGF0aW9uTW9kZWw7XG5cbiAgICAgICAgICBjb25zdCBmYWlsc1doZW5FeHByZXNzaW9uOiBzdHJpbmcgPSBtb2RlbC5mYWlsc1doZW5FeHByZXNzaW9uO1xuICAgICAgICAgIGlmIChmYWlsc1doZW5FeHByZXNzaW9uICYmIGZhaWxzV2hlbkV4cHJlc3Npb24uaW5kZXhPZihpZCkgIT09IC0xKSB7XG4gICAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBDb25kaXRpb25hbFZhbGlkYXRpb25Nb2RlbCAmJlxuICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gJ2NvbmRpdGlvbmFsQW5zd2VyZWQnICYmXG4gICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VRdWVzdGlvbklkID09PSBpZFxuICAgICAgICApIHtcbiAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFkZCBoaWRlcnMgYW5kIGRpc2FibGVycyByZWxhdGlvbnNcbiAgICBpZiAoIWhhc1JlbGF0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uQmFzZS5oaWRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBoaWRlOiBzdHJpbmcgPSBxdWVzdGlvbkJhc2UuaGlkZSBhcyBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGhpZGUubGVuZ3RoID4gMCAmJiBoaWRlLmluZGV4T2YoaWQpICE9PSAtMSkge1xuICAgICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcXVlc3Rpb25CYXNlLmhpZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGhpZGVPYmo6IGFueSA9IHF1ZXN0aW9uQmFzZS5oaWRlO1xuXG4gICAgICAgIGlmIChoaWRlT2JqLmZpZWxkID09PSBpZCkge1xuICAgICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocXVlc3Rpb25CYXNlLmFsZXJ0ICYmIHR5cGVvZiBxdWVzdGlvbkJhc2UuYWxlcnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbkJhc2UuZGlzYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgZGlzYWJsZTogc3RyaW5nID0gcXVlc3Rpb25CYXNlLmRpc2FibGUgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChkaXNhYmxlLmxlbmd0aCA+IDAgJiYgZGlzYWJsZS5pbmRleE9mKGlkKSAhPT0gLTEpIHtcbiAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQgY2FsY3VsYXRlIGV4cHJlc3Npb25zIHJlbGF0aW9uc1xuICAgIGlmIChcbiAgICAgICFoYXNSZWxhdGlvbiAmJlxuICAgICAgcXVlc3Rpb25CYXNlLmNhbGN1bGF0ZUV4cHJlc3Npb24gJiZcbiAgICAgIHF1ZXN0aW9uQmFzZS5jYWxjdWxhdGVFeHByZXNzaW9uLmxlbmd0aCA+IDAgJiZcbiAgICAgIHF1ZXN0aW9uQmFzZS5jYWxjdWxhdGVFeHByZXNzaW9uLmluZGV4T2YoaWQpICE9PSAtMVxuICAgICkge1xuICAgICAgaGFzUmVsYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZWxhdGlvbjtcbiAgfVxuXG4gIGFkZFJlbGF0aW9uVG9Db250cm9sKFxuICAgIGNvbnRyb2w6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5LFxuICAgIHJlbGF0ZWQ6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICkge1xuICAgIC8vICBsZXQgcmVsYXRpb25zID0gY29udHJvbC5jb250cm9sUmVsYXRpb25zLnJlbGF0aW9ucztcbiAgICAvL1xuICAgIC8vICBsZXQgaGFzUmVsYXRpb24gPSBmYWxzZTtcbiAgICAvL1xuICAgIC8vICAgcmVsYXRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgLy9cbiAgICAvLyAgICAgbGV0IGNvbnRyb2xSZWxhdGlvbjogQ29udHJvbFJlbGF0aW9uID0gZWxlbWVudCBhcyBDb250cm9sUmVsYXRpb247XG4gICAgLy9cbiAgICAvLyAgICAgbGV0IHJlbGF0aW9uOiBBZmVGb3JtQ29udHJvbCB8IEFmZUZvcm1BcnJheSA9IGNvbnRyb2xSZWxhdGlvbi5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5O1xuICAgIC8vXG4gICAgLy8gICAgIGlmICggY29udHJvbC51dWlkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbC51dWlkID09PSByZWxhdGlvbi51dWlkICkge1xuICAgIC8vICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG5cbiAgICAvLyBpZiAoICFoYXNSZWxhdGlvbiApIHtcbiAgICBjb250cm9sLmNvbnRyb2xSZWxhdGlvbnMuYWRkUmVsYXRlZENvbnRyb2xzKHJlbGF0ZWQpO1xuICAgIC8vIH1cbiAgfVxufVxuIl19
235
+ };
236
+ ControlRelationsFactory.decorators = [
237
+ { type: Injectable },
238
+ ];
239
+ ControlRelationsFactory.ctorParameters = function () { return []; };
240
+ return ControlRelationsFactory;
241
+ }());
242
+ export { ControlRelationsFactory };
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC1yZWxhdGlvbnMuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhbXBhdGgta2VueWEvbmd4LW9wZW5tcnMtZm9ybWVudHJ5LyIsInNvdXJjZXMiOlsiZm9ybS1lbnRyeS9mb3JtLWZhY3RvcnkvY29udHJvbC1yZWxhdGlvbnMuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBWSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUt2RTtJQUVFO0lBQWUsQ0FBQztJQUVoQixnREFBYyxHQUFkLFVBQWUsUUFBbUI7UUFDaEMsSUFBTSxhQUFhLEdBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUQsR0FBRyxDQUFDLENBQUMsSUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsSUFBTSxRQUFRLEdBQWEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCx5REFBdUIsR0FBdkIsVUFBd0IsSUFBZTtRQUNyQyxJQUFNLElBQUksR0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sQ0FBQztRQUNULENBQUM7UUFD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Q0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckQsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDckIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLEVBQUUsQ0FBQyxDQUNELENBQUMsV0FBVztZQUNaLFlBQVksQ0FBQyxtQkFBbUI7WUFDaEMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzNDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUNwRCxDQUFDLENBQUMsQ0FBQztZQUNELFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELHNEQUFvQixHQUFwQixVQUNFLE9BQXNDLEVBQ3RDLE9BQXNDO1FBRXRDLHVEQUF1RDtRQUN2RCxFQUFFO1FBQ0YsNEJBQTRCO1FBQzVCLEVBQUU7UUFDRixtQ0FBbUM7UUFDbkMsRUFBRTtRQUNGLHlFQUF5RTtRQUN6RSxFQUFFO1FBQ0YsOEdBQThHO1FBQzlHLEVBQUU7UUFDRiw0RUFBNEU7UUFDNUUsNEJBQTRCO1FBQzVCLFFBQVE7UUFDUixRQUFRO1FBRVIsd0JBQXdCO1FBQ3hCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxJQUFJO0lBQ04sQ0FBQzs7Z0JBdFRGLFVBQVU7OztJQXVUWCw4QkFBQztDQUFBLEFBdlRELElBdVRDO1NBdFRZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gaW1wb3J0IHsgQ29udHJvbFJlbGF0aW9uIH0gZnJvbSAgJy4uLy4uL2NoYW5nZS10cmFja2luZy9jb250cm9sLXJlbGF0aW9uJztcbmltcG9ydCB7IFF1ZXN0aW9uQmFzZSB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9xdWVzdGlvbi1iYXNlJztcbmltcG9ydCB7IEpzRXhwcmVzc2lvblZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9qcy1leHByZXNzaW9uLXZhbGlkYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvY29uZGl0aW9uYWwtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlQmFzZSwgR3JvdXBOb2RlLCBMZWFmTm9kZSwgQXJyYXlOb2RlIH0gZnJvbSAnLi9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgQWZlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24vYWZlLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBBZmVGb3JtQXJyYXkgfSBmcm9tICcuLi8uLi9hYnN0cmFjdC1jb250cm9scy1leHRlbnNpb24vYWZlLWZvcm0tYXJyYXknO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4vZm9ybSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sUmVsYXRpb25zRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBidWlsZFJlbGF0aW9ucyhyb290Tm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgY29udHJvbHNTdG9yZTogYW55ID0gdGhpcy5tYXBDb250cm9sSWRzKHJvb3ROb2RlLCB7fSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cm9sc1N0b3JlKSB7XG4gICAgICBpZiAoY29udHJvbHNTdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IG5vZGVCYXNlOiBOb2RlQmFzZSA9IGNvbnRyb2xzU3RvcmVba2V5XTtcblxuICAgICAgICB0aGlzLnNldFJlbGF0aW9ucyhjb250cm9sc1N0b3JlLCBub2RlQmFzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYnVpbGRBcnJheU5vZGVSZWxhdGlvbnMobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgZm9ybTogRm9ybSA9IG5vZGUuZm9ybTtcblxuICAgIGlmICghZm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb290Tm9kZTogR3JvdXBOb2RlID0gZm9ybS5yb290Tm9kZTtcblxuICAgIC8vIGJ1aWxkIHJlbGF0aW9ucyBmb3IgY29udHJvbHMgaW4gdGhlIHNhbWUgYXJyYXlcbiAgICB0aGlzLmJ1aWxkUmVsYXRpb25zKG5vZGUpO1xuXG4gICAgLy8gYnVpbGQgcmVsYXRpb25zIGZvciBjb250cm9sIG91dHNpZGUgdGhlIGFycmF5XG4gICAgY29uc3Qgcm9vdENvbnRyb2xzU3RvcmU6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhyb290Tm9kZSwge30pO1xuICAgIGNvbnN0IGFycmF5Q29udHJvbFN0b3JlOiBhbnkgPSB0aGlzLm1hcENvbnRyb2xJZHMobm9kZSwge30pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcm9vdENvbnRyb2xzU3RvcmUpIHtcbiAgICAgIGlmIChyb290Q29udHJvbHNTdG9yZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBOb2RlQmFzZSA9IHJvb3RDb250cm9sc1N0b3JlW2tleV07XG5cbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBMZWFmTm9kZSkucXVlc3Rpb247XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb25CYXNlLmtleSAmJiBxdWVzdGlvbkJhc2Uua2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVsYXRpb25zKGFycmF5Q29udHJvbFN0b3JlLCBjaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHJlbGF0aW9ucyBmb3IgY29udHJvbHMgb3V0c2lkZSB0aGUgZ3JvdXAgdG8gY29udHJvbHMgaW4gdGhpcyBncm91cFxuICAgIHRoaXMuY3JlYXRlUmVsYXRpb25zVG9BcnJheUNvbnRyb2xzKG5vZGUpO1xuXG4gICAgLy8gZmlyZSByZWxhdGlvbnNcbiAgICBmb3IgKGNvbnN0IGlkIGluIGFycmF5Q29udHJvbFN0b3JlKSB7XG4gICAgICBpZiAoYXJyYXlDb250cm9sU3RvcmUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkOiBOb2RlQmFzZSA9IGFycmF5Q29udHJvbFN0b3JlW2lkXTtcbiAgICAgICAgY29uc3QgY29udHJvbDogQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXkgPSBjaGlsZC5jb250cm9sIGFzXG4gICAgICAgICAgfCBBZmVGb3JtQ29udHJvbFxuICAgICAgICAgIHwgQWZlRm9ybUFycmF5O1xuICAgICAgICBjb250cm9sLnVwZGF0ZUhpZGRlblN0YXRlKCk7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlQWxlcnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVSZWxhdGlvbnNUb0FycmF5Q29udHJvbHMobm9kZTogR3JvdXBOb2RlKSB7XG4gICAgY29uc3QgZm9ybTogRm9ybSA9IG5vZGUuZm9ybTtcblxuICAgIGNvbnN0IHJvb3ROb2RlOiBHcm91cE5vZGUgPSBmb3JtLnJvb3ROb2RlO1xuXG4gICAgLy8gYnVpbGQgcmVsYXRpb25zIGZvciBjb250cm9sIG91dHNpZGUgdGhlIGFycmF5XG4gICAgY29uc3Qgcm9vdENvbnRyb2xzU3RvcmU6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhyb290Tm9kZSwge30pO1xuICAgIGNvbnN0IGFycmF5Q29udHJvbFN0b3JlOiBhbnkgPSB0aGlzLm1hcENvbnRyb2xJZHMobm9kZSwge30pO1xuXG4gICAgLy8gbG9vcCB0aHJvdWdoIGZvcm0gY29udHJvbHNcbiAgICBmb3IgKGNvbnN0IGtleSBpbiByb290Q29udHJvbHNTdG9yZSkge1xuICAgICAgaWYgKHJvb3RDb250cm9sc1N0b3JlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgckNoaWxkOiBOb2RlQmFzZSA9IHJvb3RDb250cm9sc1N0b3JlW2tleV07XG5cbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZVBhdGggPSBub2RlLnBhdGguc3Vic3RyaW5nKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgbm9kZS5wYXRoLmxhc3RJbmRleE9mKCcuJylcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAockNoaWxkLnBhdGguaW5kZXhPZihwYXJlbnROb2RlUGF0aCArICcuJykgPT09IC0xKSB7XG4gICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGNvbnRyb2xzIGluIHRoZSBhcnJheSBncm91cFxuICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gYXJyYXlDb250cm9sU3RvcmUpIHtcbiAgICAgICAgICAgIGlmIChhcnJheUNvbnRyb2xTdG9yZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYUNoaWxkOiBOb2RlQmFzZSA9IGFycmF5Q29udHJvbFN0b3JlW2lkXTtcbiAgICAgICAgICAgICAgY29uc3QgYUNoaWxkSWQgPSBhQ2hpbGQucXVlc3Rpb24ua2V5O1xuICAgICAgICAgICAgICBpZiAodGhpcy5oYXNSZWxhdGlvbihhQ2hpbGRJZCwgckNoaWxkLnF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzOiBBcnJheTxOb2RlQmFzZT4gPSBub2RlLmZvcm0uc2VhcmNoTm9kZUJ5UGF0aChcbiAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVBhdGgsXG4gICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuID0gbm9kZXNbMF0gYXMgQXJyYXlOb2RlO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdENvbnRyb2wgPSByQ2hpbGQuY29udHJvbCBhc1xuICAgICAgICAgICAgICAgICAgICB8IEFmZUZvcm1Db250cm9sXG4gICAgICAgICAgICAgICAgICAgIHwgQWZlRm9ybUFycmF5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb250cm9sLmNvbnRyb2xSZWxhdGlvbnMub3RoZXJSZWxhdGlvbnMuaW5kZXhPZihhbikgPT09XG4gICAgICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdENvbnRyb2wuY29udHJvbFJlbGF0aW9ucy5vdGhlclJlbGF0aW9ucy5wdXNoKGFuKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgKGFDaGlsZC5jb250cm9sIGFzXG4gICAgICAgICAgICAgICAgICAgIHwgQWZlRm9ybUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgfCBBZmVGb3JtQXJyYXkpLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVDYWxjdWxhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVDYWxjdWxhdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZUhpZGRlblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgKHJvb3RDb250cm9sIGFzIGFueSkudXBkYXRlSGlkZGVuU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgocm9vdENvbnRyb2wgYXMgYW55KS51cGRhdGVBbGVydCkge1xuICAgICAgICAgICAgICAgICAgICAgIChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZUFsZXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJvb3RDb250cm9sIGFzIGFueSkudXBkYXRlRGlzYWJsZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIChyb290Q29udHJvbCBhcyBhbnkpLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVsYXRpb25zRm9yQ29udHJvbChcbiAgICBpZCxcbiAgICBub2RlOiBHcm91cE5vZGVcbiAgKTogQXJyYXk8QWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXk+IHtcbiAgICBjb25zdCByZWxhdGlvbnM6IEFycmF5PEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5PiA9IG5ldyBBcnJheTxcbiAgICAgIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICAgPigpO1xuXG4gICAgY29uc3Qgbm9kZUJhc2VBcnJheTogQXJyYXk8Tm9kZUJhc2U+ID0gbm9kZS5mb3JtLnNlYXJjaE5vZGVCeVF1ZXN0aW9uSWQoaWQpO1xuXG4gICAgaWYgKG5vZGVCYXNlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZUJhc2U6IE5vZGVCYXNlID0gbm9kZUJhc2VBcnJheVswXTtcblxuICAgICAgY29uc3QgY29udHJvbExpc3Q6IGFueSA9IHRoaXMubWFwQ29udHJvbElkcyhub2RlLCB7fSk7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2xMaXN0KSB7XG4gICAgICAgIGlmIChjb250cm9sTGlzdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5oYXNSZWxhdGlvbihjb250cm9sTGlzdFtrZXldLnF1ZXN0aW9uLmtleSwgbm9kZUJhc2UucXVlc3Rpb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZWxhdGlvbnMucHVzaChjb250cm9sTGlzdFtrZXldLmNvbnRyb2wpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpb25zO1xuICB9XG5cbiAgbWFwQ29udHJvbElkcyhub2RlOiBHcm91cE5vZGUsIGNvbnRyb2xzU3RvcmU6IGFueSkge1xuICAgIGNvbnN0IGNoaWxkcmVuOiBOb2RlQmFzZSA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZHJlbikge1xuICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgY29uc3QgY2hpbGQ6IE5vZGVCYXNlID0gY2hpbGRyZW5ba2V5XTtcblxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBHcm91cE5vZGUpIHtcbiAgICAgICAgICB0aGlzLm1hcENvbnRyb2xJZHMoY2hpbGQsIGNvbnRyb2xzU3RvcmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZk5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBMZWFmTm9kZSkucXVlc3Rpb247XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb25CYXNlLmtleSAmJiBxdWVzdGlvbkJhc2Uua2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRyb2xzU3RvcmVbcXVlc3Rpb25CYXNlLmtleV0gPSBjaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IChjaGlsZCBhcyBBcnJheU5vZGUpLnF1ZXN0aW9uO1xuXG4gICAgICAgICAgaWYgKHF1ZXN0aW9uQmFzZS5rZXkgJiYgcXVlc3Rpb25CYXNlLmtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb250cm9sc1N0b3JlW3F1ZXN0aW9uQmFzZS5rZXldID0gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2xzU3RvcmU7XG4gIH1cblxuICBzZXRSZWxhdGlvbnMoY29udHJvbHNTdG9yZTogYW55LCBub2RlQmFzZTogTm9kZUJhc2UpIHtcbiAgICBjb25zdCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSA9IG5vZGVCYXNlLnF1ZXN0aW9uO1xuXG4gICAgY29uc3QgaWQgPSBxdWVzdGlvbkJhc2Uua2V5O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbHNTdG9yZSkge1xuICAgICAgaWYgKGNvbnRyb2xzU3RvcmUuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgIT09IGlkKSB7XG4gICAgICAgIGNvbnN0IG5vZGU6IE5vZGVCYXNlID0gY29udHJvbHNTdG9yZVtrZXldO1xuICAgICAgICBjb25zdCBxdWVzdGlvbjogUXVlc3Rpb25CYXNlID0gbm9kZS5xdWVzdGlvbjtcblxuICAgICAgICBpZiAodGhpcy5oYXNSZWxhdGlvbihpZCwgcXVlc3Rpb24sIG5vZGVCYXNlKSkge1xuICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25Ub0NvbnRyb2woXG4gICAgICAgICAgICBub2RlLmNvbnRyb2wgYXMgQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXksXG4gICAgICAgICAgICBub2RlQmFzZS5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb25kaXRpb25hbCByZXF1aXJlZCBhbmQgY29uZGl0aW9uYWwgYW5zd2VyZWQgcmVsYXRpb25zXG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24ucmVxdWlyZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQ6IGFueSA9IHF1ZXN0aW9uLnJlcXVpcmVkO1xuXG4gICAgICAgICAgaWYgKHJlcXVpcmVkLnR5cGUgPT09ICdjb25kaXRpb25hbFJlcXVpcmVkJykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkLnJlZmVyZW5jZVF1ZXN0aW9uSWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkUmVsYXRpb25Ub0NvbnRyb2woXG4gICAgICAgICAgICAgICAgbm9kZS5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5LFxuICAgICAgICAgICAgICAgIG5vZGVCYXNlLmNvbnRyb2wgYXMgQWZlRm9ybUNvbnRyb2wgfCBBZmVGb3JtQXJyYXlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNSZWxhdGlvbihpZDogc3RyaW5nLCBxdWVzdGlvbkJhc2U6IFF1ZXN0aW9uQmFzZSwgbm9kZUJhc2U/OiBOb2RlQmFzZSkge1xuICAgIGxldCBoYXNSZWxhdGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzICYmIHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHF1ZXN0aW9uQmFzZS52YWxpZGF0b3JzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBKc0V4cHJlc3Npb25WYWxpZGF0aW9uTW9kZWwpIHtcbiAgICAgICAgICBjb25zdCBtb2RlbDogSnNFeHByZXNzaW9uVmFsaWRhdGlvbk1vZGVsID0gZWxlbWVudCBhcyBKc0V4cHJlc3Npb25WYWxpZGF0aW9uTW9kZWw7XG5cbiAgICAgICAgICBjb25zdCBmYWlsc1doZW5FeHByZXNzaW9uOiBzdHJpbmcgPSBtb2RlbC5mYWlsc1doZW5FeHByZXNzaW9uO1xuICAgICAgICAgIGlmIChmYWlsc1doZW5FeHByZXNzaW9uICYmIGZhaWxzV2hlbkV4cHJlc3Npb24uaW5kZXhPZihpZCkgIT09IC0xKSB7XG4gICAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBDb25kaXRpb25hbFZhbGlkYXRpb25Nb2RlbCAmJlxuICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gJ2NvbmRpdGlvbmFsQW5zd2VyZWQnICYmXG4gICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VRdWVzdGlvbklkID09PSBpZFxuICAgICAgICApIHtcbiAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFkZCBoaWRlcnMgYW5kIGRpc2FibGVycyByZWxhdGlvbnNcbiAgICBpZiAoIWhhc1JlbGF0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uQmFzZS5oaWRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBoaWRlOiBzdHJpbmcgPSBxdWVzdGlvbkJhc2UuaGlkZSBhcyBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGhpZGUubGVuZ3RoID4gMCAmJiBoaWRlLmluZGV4T2YoaWQpICE9PSAtMSkge1xuICAgICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcXVlc3Rpb25CYXNlLmhpZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGhpZGVPYmo6IGFueSA9IHF1ZXN0aW9uQmFzZS5oaWRlO1xuXG4gICAgICAgIGlmIChoaWRlT2JqLmZpZWxkID09PSBpZCkge1xuICAgICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocXVlc3Rpb25CYXNlLmFsZXJ0ICYmIHR5cGVvZiBxdWVzdGlvbkJhc2UuYWxlcnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbkJhc2UuZGlzYWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgZGlzYWJsZTogc3RyaW5nID0gcXVlc3Rpb25CYXNlLmRpc2FibGUgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChkaXNhYmxlLmxlbmd0aCA+IDAgJiYgZGlzYWJsZS5pbmRleE9mKGlkKSAhPT0gLTEpIHtcbiAgICAgICAgICBoYXNSZWxhdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQgY2FsY3VsYXRlIGV4cHJlc3Npb25zIHJlbGF0aW9uc1xuICAgIGlmIChcbiAgICAgICFoYXNSZWxhdGlvbiAmJlxuICAgICAgcXVlc3Rpb25CYXNlLmNhbGN1bGF0ZUV4cHJlc3Npb24gJiZcbiAgICAgIHF1ZXN0aW9uQmFzZS5jYWxjdWxhdGVFeHByZXNzaW9uLmxlbmd0aCA+IDAgJiZcbiAgICAgIHF1ZXN0aW9uQmFzZS5jYWxjdWxhdGVFeHByZXNzaW9uLmluZGV4T2YoaWQpICE9PSAtMVxuICAgICkge1xuICAgICAgaGFzUmVsYXRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZWxhdGlvbjtcbiAgfVxuXG4gIGFkZFJlbGF0aW9uVG9Db250cm9sKFxuICAgIGNvbnRyb2w6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5LFxuICAgIHJlbGF0ZWQ6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5XG4gICkge1xuICAgIC8vICBsZXQgcmVsYXRpb25zID0gY29udHJvbC5jb250cm9sUmVsYXRpb25zLnJlbGF0aW9ucztcbiAgICAvL1xuICAgIC8vICBsZXQgaGFzUmVsYXRpb24gPSBmYWxzZTtcbiAgICAvL1xuICAgIC8vICAgcmVsYXRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgLy9cbiAgICAvLyAgICAgbGV0IGNvbnRyb2xSZWxhdGlvbjogQ29udHJvbFJlbGF0aW9uID0gZWxlbWVudCBhcyBDb250cm9sUmVsYXRpb247XG4gICAgLy9cbiAgICAvLyAgICAgbGV0IHJlbGF0aW9uOiBBZmVGb3JtQ29udHJvbCB8IEFmZUZvcm1BcnJheSA9IGNvbnRyb2xSZWxhdGlvbi5jb250cm9sIGFzIEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5O1xuICAgIC8vXG4gICAgLy8gICAgIGlmICggY29udHJvbC51dWlkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbC51dWlkID09PSByZWxhdGlvbi51dWlkICkge1xuICAgIC8vICAgICAgIGhhc1JlbGF0aW9uID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG5cbiAgICAvLyBpZiAoICFoYXNSZWxhdGlvbiApIHtcbiAgICBjb250cm9sLmNvbnRyb2xSZWxhdGlvbnMuYWRkUmVsYXRlZENvbnRyb2xzKHJlbGF0ZWQpO1xuICAgIC8vIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,120 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { AfeFormControl, AfeFormArray, AfeFormGroup, AfeControlType } from '../../abstract-controls-extension';
3
+ import { QuestionBase } from '../question-models/question-base';
4
+ import { ValidationFactory } from '../form-factory/validation.factory';
5
+ import { HidersDisablersFactory } from './hiders-disablers.factory';
6
+ import { AlertsFactory } from './show-messages.factory';
7
+ import { ExpressionRunner } from '../expression-runner/expression-runner';
8
+ import { JsExpressionHelper } from '../helpers/js-expression-helper';
9
+ var FormControlService = /** @class */ (function () {
10
+ function FormControlService(validationFactory, hidersDisablersFactory, alertsFactory) {
11
+ this.alertsFactory = alertsFactory;
12
+ this.controls = [];
13
+ this.validationFactory = validationFactory;
14
+ this.hidersDisablersFactory = hidersDisablersFactory;
15
+ }
16
+ FormControlService.prototype.generateControlModel = function (questionModel, parentControl, generateChildren, form) {
17
+ if (questionModel instanceof QuestionBase) {
18
+ if (questionModel.controlType === AfeControlType.AfeFormArray) {
19
+ return this.generateFormArray(questionModel, parentControl, form);
20
+ }
21
+ if (questionModel.controlType === AfeControlType.AfeFormGroup) {
22
+ return this.generateFormGroupModel(questionModel, generateChildren, parentControl, form);
23
+ }
24
+ if (questionModel.controlType === AfeControlType.AfeFormControl) {
25
+ return this.generateFormControl(questionModel, parentControl, form);
26
+ }
27
+ }
28
+ return null;
29
+ };
30
+ FormControlService.prototype.generateFormGroupModel = function (question, generateChildren, parentControl, form) {
31
+ var formGroup = new AfeFormGroup({});
32
+ this.wireHidersDisablers(question, formGroup, form);
33
+ this.wireAlerts(question, formGroup, form);
34
+ if (parentControl instanceof AfeFormGroup) {
35
+ parentControl.setControl(question.key, formGroup);
36
+ }
37
+ var asGroup = question;
38
+ if (generateChildren && asGroup && asGroup.questions.length > 0) {
39
+ this._generateFormGroupChildrenModel(asGroup.questions, formGroup, form);
40
+ }
41
+ return formGroup;
42
+ };
43
+ FormControlService.prototype._generateFormGroupChildrenModel = function (questions, parentControl, form) {
44
+ var _this = this;
45
+ if (questions.length > 0) {
46
+ questions.forEach(function (element) {
47
+ var generated = _this.generateControlModel(element, parentControl, true, form);
48
+ if (generated !== null) {
49
+ parentControl.addControl(element.key, generated);
50
+ }
51
+ });
52
+ }
53
+ };
54
+ FormControlService.prototype.generateFormArray = function (question, parentControl, form) {
55
+ var validators = this.validationFactory.getValidators(question, form);
56
+ var formArray;
57
+ if (validators && validators.length > 0) {
58
+ formArray = new AfeFormArray([], validators[0]);
59
+ }
60
+ else {
61
+ formArray = new AfeFormArray([]);
62
+ }
63
+ formArray.uuid = question.key;
64
+ this.wireHidersDisablers(question, formArray, form);
65
+ this.wireAlerts(question, formArray, form);
66
+ if (parentControl instanceof AfeFormGroup) {
67
+ parentControl.setControl(question.key, formArray);
68
+ }
69
+ return formArray;
70
+ };
71
+ FormControlService.prototype.generateFormControl = function (question, parentControl, form) {
72
+ var value = question.defaultValue || '';
73
+ var validators = this.validationFactory.getValidators(question, form);
74
+ var control = new AfeFormControl(value, validators);
75
+ control.uuid = question.key;
76
+ this.wireHidersDisablers(question, control, form);
77
+ this.wireAlerts(question, control, form);
78
+ this.wireCalculator(question, control, form ? form.dataSourcesContainer.dataSources : null);
79
+ if (parentControl instanceof AfeFormGroup) {
80
+ parentControl.setControl(question.key, control);
81
+ }
82
+ return control;
83
+ };
84
+ FormControlService.prototype.wireAlerts = function (question, control, form) {
85
+ if (question.alert && question.alert !== '') {
86
+ var alert_1 = this.alertsFactory.getJsExpressionshowAlert(question, control, form);
87
+ control.setAlertFn(alert_1);
88
+ }
89
+ };
90
+ FormControlService.prototype.wireHidersDisablers = function (question, control, form) {
91
+ if (question.hide && question.hide !== '') {
92
+ var hider = this.hidersDisablersFactory.getJsExpressionHider(question, control, form);
93
+ control.setHidingFn(hider);
94
+ }
95
+ if (question.disable && question.disable !== '') {
96
+ var disable = this.hidersDisablersFactory.getJsExpressionDisabler(question, control, form);
97
+ control.setDisablingFn(disable);
98
+ }
99
+ };
100
+ FormControlService.prototype.wireCalculator = function (question, control, dataSource) {
101
+ if (question.calculateExpression && question.calculateExpression !== '') {
102
+ var helper = new JsExpressionHelper();
103
+ var runner = new ExpressionRunner();
104
+ var runnable = runner.getRunnable(question.calculateExpression, control, helper.helperFunctions, dataSource);
105
+ // this functionality strictly assumes the calculateExpression function has been defined in the JsExpressionHelper class
106
+ control.setCalculatorFn(runnable.run);
107
+ }
108
+ };
109
+ FormControlService.decorators = [
110
+ { type: Injectable },
111
+ ];
112
+ FormControlService.ctorParameters = function () { return [
113
+ { type: ValidationFactory },
114
+ { type: HidersDisablersFactory },
115
+ { type: AlertsFactory }
116
+ ]; };
117
+ return FormControlService;
118
+ }());
119
+ export { FormControlService };
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYW1wYXRoLWtlbnlhL25neC1vcGVubXJzLWZvcm1lbnRyeS8iLCJzb3VyY2VzIjpbImZvcm0tZW50cnkvZm9ybS1mYWN0b3J5L2Zvcm0tY29udHJvbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUNMLGNBQWMsRUFDZCxZQUFZLEVBQ1osWUFBWSxFQUNaLGNBQWMsRUFDZixNQUFNLG1DQUFtQyxDQUFDO0FBSTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsT0FBTyxFQUNMLGdCQUFnQixFQUVqQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFO0lBTUUsNEJBQ0UsaUJBQW9DLEVBQ3BDLHNCQUE4QyxFQUN0QyxhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVB0QyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBU1osSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztJQUN2RCxDQUFDO0lBRUQsaURBQW9CLEdBQXBCLFVBQ0UsYUFBNEMsRUFDNUMsYUFBMkIsRUFDM0IsZ0JBQXlCLEVBQ3pCLElBQVc7UUFFWCxFQUFFLENBQUMsQ0FBQyxhQUFhLFlBQVksWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMxQyxFQUFFLENBQUMsQ0FBQyxhQUFh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dUJBQXVCLENBQ2pFLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxDQUNMLENBQUM7WUFDRixPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRU8sMkNBQWMsR0FBdEIsVUFDRSxRQUFzQixFQUN0QixPQUF1QixFQUN2QixVQUFnQjtRQUVoQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLElBQUksUUFBUSxDQUFDLG1CQUFtQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBTSxNQUFNLEdBQXVCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUM1RCxJQUFNLE1BQU0sR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hELElBQU0sUUFBUSxHQUFhLE1BQU0sQ0FBQyxXQUFXLENBQzNDLFFBQVEsQ0FBQyxtQkFBbUIsRUFDNUIsT0FBTyxFQUNQLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLFVBQVUsQ0FDWCxDQUFDO1lBQ0Ysd0hBQXdIO1lBQ3hILE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDOztnQkF6TEYsVUFBVTs7O2dCQVZGLGlCQUFpQjtnQkFDakIsc0JBQXNCO2dCQUN0QixhQUFhOztJQWtNdEIseUJBQUM7Q0FBQSxBQTFMRCxJQTBMQztTQXpMWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gIEFmZUZvcm1Db250cm9sLFxuICBBZmVGb3JtQXJyYXksXG4gIEFmZUZvcm1Hcm91cCxcbiAgQWZlQ29udHJvbFR5cGVcbn0gZnJvbSAnLi4vLi4vYWJzdHJhY3QtY29udHJvbHMtZXh0ZW5zaW9uJztcblxuaW1wb3J0IHsgTmVzdGVkUXVlc3Rpb24gfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvaW50ZXJmYWNlcy9uZXN0ZWQtcXVlc3Rpb25zJztcblxuaW1wb3J0IHsgUXVlc3Rpb25CYXNlIH0gZnJvbSAnLi4vcXVlc3Rpb24tbW9kZWxzL3F1ZXN0aW9uLWJhc2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25Hcm91cCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9ncm91cC1xdWVzdGlvbic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRmFjdG9yeSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS92YWxpZGF0aW9uLmZhY3RvcnknO1xuaW1wb3J0IHsgSGlkZXJzRGlzYWJsZXJzRmFjdG9yeSB9IGZyb20gJy4vaGlkZXJzLWRpc2FibGVycy5mYWN0b3J5JztcbmltcG9ydCB7IEFsZXJ0c0ZhY3RvcnkgfSBmcm9tICcuL3Nob3ctbWVzc2FnZXMuZmFjdG9yeSc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi9mb3JtJztcbmltcG9ydCB7XG4gIEV4cHJlc3Npb25SdW5uZXIsXG4gIFJ1bm5hYmxlXG59IGZyb20gJy4uL2V4cHJlc3Npb24tcnVubmVyL2V4cHJlc3Npb24tcnVubmVyJztcbmltcG9ydCB7IEpzRXhwcmVzc2lvbkhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvanMtZXhwcmVzc2lvbi1oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRm9ybUNvbnRyb2xTZXJ2aWNlIHtcbiAgY29udHJvbHMgPSBbXTtcbiAgdmFsaWRhdGlvbkZhY3Rvcnk6IFZhbGlkYXRpb25GYWN0b3J5O1xuICBoaWRlcnNEaXNhYmxlcnNGYWN0b3J5OiBIaWRlcnNEaXNhYmxlcnNGYWN0b3J5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbGlkYXRpb25GYWN0b3J5OiBWYWxpZGF0aW9uRmFjdG9yeSxcbiAgICBoaWRlcnNEaXNhYmxlcnNGYWN0b3J5OiBIaWRlcnNEaXNhYmxlcnNGYWN0b3J5LFxuICAgIHByaXZhdGUgYWxlcnRzRmFjdG9yeTogQWxlcnRzRmFjdG9yeVxuICApIHtcbiAgICB0aGlzLnZhbGlkYXRpb25GYWN0b3J5ID0gdmFsaWRhdGlvbkZhY3Rvcnk7XG4gICAgdGhpcy5oaWRlcnNEaXNhYmxlcnNGYWN0b3J5ID0gaGlkZXJzRGlzYWJsZXJzRmFjdG9yeTtcbiAgfVxuXG4gIGdlbmVyYXRlQ29udHJvbE1vZGVsKFxuICAgIHF1ZXN0aW9uTW9kZWw6IFF1ZXN0aW9uQmFzZSB8IE5lc3RlZFF1ZXN0aW9uLFxuICAgIHBhcmVudENvbnRyb2w6IEFmZUZvcm1Hcm91cCxcbiAgICBnZW5lcmF0ZUNoaWxkcmVuOiBib29sZWFuLFxuICAgIGZvcm0/OiBGb3JtXG4gICk6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5IHwgQWZlRm9ybUdyb3VwIHtcbiAgICBpZiAocXVlc3Rpb25Nb2RlbCBpbnN0YW5jZW9mIFF1ZXN0aW9uQmFzZSkge1xuICAgICAgaWYgKHF1ZXN0aW9uTW9kZWwuY29udHJvbFR5cGUgPT09IEFmZUNvbnRyb2xUeXBlLkFmZUZvcm1BcnJheSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZvcm1BcnJheShxdWVzdGlvbk1vZGVsLCBwYXJlbnRDb250cm9sLCBmb3JtKTtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVzdGlvbk1vZGVsLmNvbnRyb2xUeXBlID09PSBBZmVDb250cm9sVHlwZS5BZmVGb3JtR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVGb3JtR3JvdXBNb2RlbChcbiAgICAgICAgICBxdWVzdGlvbk1vZGVsLFxuICAgICAgICAgIGdlbmVyYXRlQ2hpbGRyZW4sXG4gICAgICAgICAgcGFyZW50Q29udHJvbCxcbiAgICAgICAgICBmb3JtXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChxdWVzdGlvbk1vZGVsLmNvbnRyb2xUeXBlID09PSBBZmVDb250cm9sVHlwZS5BZmVGb3JtQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sKHF1ZXN0aW9uTW9kZWwsIHBhcmVudENvbnRyb2wsIGZvcm0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdlbmVyYXRlRm9ybUdyb3VwTW9kZWwoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uQmFzZSxcbiAgICBnZW5lcmF0ZUNoaWxkcmVuOiBib29sZWFuLFxuICAgIHBhcmVudENvbnRyb2w/OiBBZmVGb3JtR3JvdXAsXG4gICAgZm9ybT86IEZvcm1cbiAgKTogQWZlRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgQWZlRm9ybUdyb3VwKHt9KTtcbiAgICB0aGlzLndpcmVIaWRlcnNEaXNhYmxlcnMocXVlc3Rpb24sIGZvcm1Hcm91cCwgZm9ybSk7XG4gICAgdGhpcy53aXJlQWxlcnRzKHF1ZXN0aW9uLCBmb3JtR3JvdXAsIGZvcm0pO1xuICAgIGlmIChwYXJlbnRDb250cm9sIGluc3RhbmNlb2YgQWZlRm9ybUdyb3VwKSB7XG4gICAgICBwYXJlbnRDb250cm9sLnNldENvbnRyb2wocXVlc3Rpb24ua2V5LCBmb3JtR3JvdXApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzR3JvdXAgPSBxdWVzdGlvbiBhcyBRdWVzdGlvbkdyb3VwO1xuXG4gICAgaWYgKGdlbmVyYXRlQ2hpbGRyZW4gJiYgYXNHcm91cCAmJiBhc0dyb3VwLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9nZW5lcmF0ZUZvcm1Hcm91cENoaWxkcmVuTW9kZWwoYXNHcm91cC5xdWVzdGlvbnMsIGZvcm1Hcm91cCwgZm9ybSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgfVxuXG4gIF9nZW5lcmF0ZUZvcm1Hcm91cENoaWxkcmVuTW9kZWwoXG4gICAgcXVlc3Rpb25zOiBRdWVzdGlvbkJhc2VbXSxcbiAgICBwYXJlbnRDb250cm9sOiBBZmVGb3JtR3JvdXAsXG4gICAgZm9ybT86IEZvcm1cbiAgKSB7XG4gICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBxdWVzdGlvbnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBnZW5lcmF0ZWQgPSB0aGlzLmdlbmVyYXRlQ29udHJvbE1vZGVsKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgcGFyZW50Q29udHJvbCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIGZvcm1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGdlbmVyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcmVudENvbnRyb2wuYWRkQ29udHJvbChlbGVtZW50LmtleSwgZ2VuZXJhdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVGb3JtQXJyYXkoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uQmFzZSxcbiAgICBwYXJlbnRDb250cm9sPzogQWZlRm9ybUdyb3VwLFxuICAgIGZvcm0/OiBGb3JtXG4gICk6IEFmZUZvcm1BcnJheSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMudmFsaWRhdGlvbkZhY3RvcnkuZ2V0VmFsaWRhdG9ycyhxdWVzdGlvbiwgZm9ybSk7XG4gICAgbGV0IGZvcm1BcnJheTogQWZlRm9ybUFycmF5O1xuICAgIGlmICh2YWxpZGF0b3JzICYmIHZhbGlkYXRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9ybUFycmF5ID0gbmV3IEFmZUZvcm1BcnJheShbXSwgdmFsaWRhdG9yc1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1BcnJheSA9IG5ldyBBZmVGb3JtQXJyYXkoW10pO1xuICAgIH1cbiAgICBmb3JtQXJyYXkudXVpZCA9IHF1ZXN0aW9uLmtleTtcbiAgICB0aGlzLndpcmVIaWRlcnNEaXNhYmxlcnMocXVlc3Rpb24sIGZvcm1BcnJheSwgZm9ybSk7XG4gICAgdGhpcy53aXJlQWxlcnRzKHF1ZXN0aW9uLCBmb3JtQXJyYXksIGZvcm0pO1xuICAgIGlmIChwYXJlbnRDb250cm9sIGluc3RhbmNlb2YgQWZlRm9ybUdyb3VwKSB7XG4gICAgICBwYXJlbnRDb250cm9sLnNldENvbnRyb2wocXVlc3Rpb24ua2V5LCBmb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtQXJyYXk7XG4gIH1cblxuICBnZW5lcmF0ZUZvcm1Db250cm9sKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UsXG4gICAgcGFyZW50Q29udHJvbD86IEFmZUZvcm1Hcm91cCxcbiAgICBmb3JtPzogRm9ybVxuICApOiBBZmVGb3JtQ29udHJvbCB7XG4gICAgY29uc3QgdmFsdWUgPSBxdWVzdGlvbi5kZWZhdWx0VmFsdWUgfHwgJyc7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMudmFsaWRhdGlvbkZhY3RvcnkuZ2V0VmFsaWRhdG9ycyhxdWVzdGlvbiwgZm9ybSk7XG5cbiAgICBjb25zdCBjb250cm9sID0gbmV3IEFmZUZvcm1Db250cm9sKHZhbHVlLCB2YWxpZGF0b3JzKTtcbiAgICBjb250cm9sLnV1aWQgPSBxdWVzdGlvbi5rZXk7XG4gICAgdGhpcy53aXJlSGlkZXJzRGlzYWJsZXJzKHF1ZXN0aW9uLCBjb250cm9sLCBmb3JtKTtcbiAgICB0aGlzLndpcmVBbGVydHMocXVlc3Rpb24sIGNvbnRyb2wsIGZvcm0pO1xuICAgIHRoaXMud2lyZUNhbGN1bGF0b3IoXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbnRyb2wsXG4gICAgICBmb3JtID8gZm9ybS5kYXRhU291cmNlc0NvbnRhaW5lci5kYXRhU291cmNlcyA6IG51bGxcbiAgICApO1xuXG4gICAgaWYgKHBhcmVudENvbnRyb2wgaW5zdGFuY2VvZiBBZmVGb3JtR3JvdXApIHtcbiAgICAgIHBhcmVudENvbnRyb2wuc2V0Q29udHJvbChxdWVzdGlvbi5rZXksIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXJlQWxlcnRzKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbkJhc2UsXG4gICAgY29udHJvbDogQWZlRm9ybUFycmF5IHwgQWZlRm9ybUdyb3VwIHwgQWZlRm9ybUNvbnRyb2wsXG4gICAgZm9ybT86IEZvcm1cbiAgKSB7XG4gICAgaWYgKHF1ZXN0aW9uLmFsZXJ0ICYmIHF1ZXN0aW9uLmFsZXJ0ICE9PSAnJykge1xuICAgICAgY29uc3QgYWxlcnQgPSB0aGlzLmFsZXJ0c0ZhY3RvcnkuZ2V0SnNFeHByZXNzaW9uc2hvd0FsZXJ0KFxuICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgZm9ybVxuICAgICAgKTtcbiAgICAgIGNvbnRyb2wuc2V0QWxlcnRGbihhbGVydCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgd2lyZUhpZGVyc0Rpc2FibGVycyhcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25CYXNlLFxuICAgIGNvbnRyb2w6IEFmZUZvcm1BcnJheSB8IEFmZUZvcm1Hcm91cCB8IEFmZUZvcm1Db250cm9sLFxuICAgIGZvcm0/OiBGb3JtXG4gICkge1xuICAgIGlmIChxdWVzdGlvbi5oaWRlICYmIHF1ZXN0aW9uLmhpZGUgIT09ICcnKSB7XG4gICAgICBjb25zdCBoaWRlciA9IHRoaXMuaGlkZXJzRGlzYWJsZXJzRmFjdG9yeS5nZXRKc0V4cHJlc3Npb25IaWRlcihcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIGZvcm1cbiAgICAgICk7XG4gICAgICBjb250cm9sLnNldEhpZGluZ0ZuKGhpZGVyKTtcbiAgICB9XG5cbiAgICBpZiAocXVlc3Rpb24uZGlzYWJsZSAmJiBxdWVzdGlvbi5kaXNhYmxlICE9PSAnJykge1xuICAgICAgY29uc3QgZGlzYWJsZSA9IHRoaXMuaGlkZXJzRGlzYWJsZXJzRmFjdG9yeS5nZXRKc0V4cHJlc3Npb25EaXNhYmxlcihcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIGZvcm1cbiAgICAgICk7XG4gICAgICBjb250cm9sLnNldERpc2FibGluZ0ZuKGRpc2FibGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2lyZUNhbGN1bGF0b3IoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uQmFzZSxcbiAgICBjb250cm9sOiBBZmVGb3JtQ29udHJvbCxcbiAgICBkYXRhU291cmNlPzogYW55XG4gICkge1xuICAgIGlmIChxdWVzdGlvbi5jYWxjdWxhdGVFeHByZXNzaW9uICYmIHF1ZXN0aW9uLmNhbGN1bGF0ZUV4cHJlc3Npb24gIT09ICcnKSB7XG4gICAgICBjb25zdCBoZWxwZXI6IEpzRXhwcmVzc2lvbkhlbHBlciA9IG5ldyBKc0V4cHJlc3Npb25IZWxwZXIoKTtcbiAgICAgIGNvbnN0IHJ1bm5lcjogRXhwcmVzc2lvblJ1bm5lciA9IG5ldyBFeHByZXNzaW9uUnVubmVyKCk7XG4gICAgICBjb25zdCBydW5uYWJsZTogUnVubmFibGUgPSBydW5uZXIuZ2V0UnVubmFibGUoXG4gICAgICAgIHF1ZXN0aW9uLmNhbGN1bGF0ZUV4cHJlc3Npb24sXG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIGhlbHBlci5oZWxwZXJGdW5jdGlvbnMsXG4gICAgICAgIGRhdGFTb3VyY2VcbiAgICAgICk7XG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uYWxpdHkgc3RyaWN0bHkgYXNzdW1lcyB0aGUgY2FsY3VsYXRlRXhwcmVzc2lvbiBmdW5jdGlvbiBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBKc0V4cHJlc3Npb25IZWxwZXIgY2xhc3NcbiAgICAgIGNvbnRyb2wuc2V0Q2FsY3VsYXRvckZuKHJ1bm5hYmxlLnJ1bik7XG4gICAgfVxuICB9XG59XG4iXX0=