@openmrs/ngx-formentry 5.0.1-pre.349 → 5.0.1-pre.358

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 (241) hide show
  1. package/components/afe-ng-select.component.d.ts +1 -1
  2. package/components/appointments-overview/appointments-overview.component.d.ts +1 -1
  3. package/components/check-box/checkbox.component.d.ts +1 -1
  4. package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +1 -1
  5. package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +1 -1
  6. package/components/date-time-picker/date-picker/date-picker.component.d.ts +1 -1
  7. package/components/date-time-picker/date-time-picker.component.d.ts +1 -1
  8. package/components/date-time-picker/time-picker/time-picker.component.d.ts +1 -1
  9. package/components/file-upload/file-upload.component.d.ts +1 -1
  10. package/components/input/input.directive.d.ts +1 -1
  11. package/components/input/label.component.d.ts +1 -1
  12. package/components/input/text-area.directive.d.ts +1 -1
  13. package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +1 -1
  14. package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +1 -1
  15. package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +1 -1
  16. package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +1 -1
  17. package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +1 -1
  18. package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +1 -1
  19. package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +1 -1
  20. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +1 -1
  21. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +1 -1
  22. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +1 -1
  23. package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +1 -1
  24. package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +1 -1
  25. package/components/ngx-remote-select/ngx-remote-select.component.d.ts +1 -1
  26. package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +1 -1
  27. package/components/ngx-tabset/components/tab.component.d.ts +1 -1
  28. package/components/ngx-tabset/directives/hover-class.directive.d.ts +1 -1
  29. package/components/number-input/number-input.component.d.ts +1 -1
  30. package/components/radio-button/radio.component.d.ts +1 -1
  31. package/components/select/select.component.d.ts +1 -1
  32. package/components/workspace-launcher/workspace-launcher.component.d.ts +1 -1
  33. package/{esm2020 → esm2022}/components/afe-ng-select.component.mjs +12 -12
  34. package/{esm2020 → esm2022}/components/appointments-overview/appointments-overview.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/components/check-box/checkbox.component.mjs +10 -10
  36. package/{esm2020 → esm2022}/components/check-box/checkbox.module.mjs +5 -5
  37. package/{esm2020 → esm2022}/components/custom-component-wrapper/custom-component-wrapper..module.mjs +5 -5
  38. package/{esm2020 → esm2022}/components/custom-component-wrapper/custom-component-wrapper.component.mjs +4 -4
  39. package/{esm2020 → esm2022}/components/custom-control-wrapper/custom-control-wrapper..module.mjs +5 -5
  40. package/esm2022/components/custom-control-wrapper/custom-control-wrapper.component.mjs +68 -0
  41. package/{esm2020 → esm2022}/components/date-time-picker/date-picker/date-picker.component.mjs +4 -4
  42. package/esm2022/components/date-time-picker/date-time-picker.component.mjs +115 -0
  43. package/{esm2020 → esm2022}/components/date-time-picker/date-time-picker.module.mjs +13 -13
  44. package/{esm2020 → esm2022}/components/date-time-picker/picker-modal/modal.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/components/date-time-picker/pipes/moment.pipe.mjs +4 -4
  46. package/{esm2020 → esm2022}/components/date-time-picker/time-picker/time-picker.component.mjs +4 -4
  47. package/{esm2020 → esm2022}/components/file-upload/file-upload.component.mjs +10 -10
  48. package/{esm2020 → esm2022}/components/file-upload/file-upload.module.mjs +13 -13
  49. package/{esm2020 → esm2022}/components/file-upload/secure.pipe.mjs +4 -4
  50. package/{esm2020 → esm2022}/components/input/input.directive.mjs +4 -4
  51. package/{esm2020 → esm2022}/components/input/input.module.mjs +5 -5
  52. package/esm2022/components/input/label.component.mjs +263 -0
  53. package/{esm2020 → esm2022}/components/input/text-area.directive.mjs +4 -4
  54. package/esm2022/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +76 -0
  55. package/{esm2020 → esm2022}/components/ngx-datetime-picker/ngx-datetime-picker.module.mjs +13 -13
  56. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.mjs +4 -4
  57. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.mjs +11 -11
  58. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-body.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/calendar.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.mjs +4 -4
  64. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.mjs +7 -7
  65. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.mjs +4 -4
  66. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.mjs +4 -4
  67. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.mjs +4 -4
  68. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.mjs +4 -4
  69. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time.class.mjs +4 -4
  70. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time.module.mjs +33 -33
  71. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.mjs +4 -4
  72. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/timer-box.component.mjs +4 -4
  73. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/timer.component.mjs +4 -4
  74. package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs +243 -0
  75. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog.module.mjs +5 -5
  76. package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog.service.mjs +4 -4
  77. package/esm2022/components/ngx-remote-select/ngx-remote-select.component.mjs +132 -0
  78. package/{esm2020 → esm2022}/components/ngx-remote-select/ngx-remote-select.module.mjs +5 -5
  79. package/{esm2020 → esm2022}/components/ngx-tabset/components/ngx-tab-set.component.mjs +4 -4
  80. package/{esm2020 → esm2022}/components/ngx-tabset/components/tab.component.mjs +4 -4
  81. package/{esm2020 → esm2022}/components/ngx-tabset/directives/hover-class.directive.mjs +4 -4
  82. package/{esm2020 → esm2022}/components/ngx-tabset/modules/ngx-tabset.module.mjs +5 -5
  83. package/esm2022/components/number-input/number-input.component.mjs +248 -0
  84. package/{esm2020 → esm2022}/components/number-input/number-input.module.mjs +5 -5
  85. package/{esm2020 → esm2022}/components/number-input/number.directive.mjs +4 -4
  86. package/esm2022/components/radio-button/radio.component.mjs +96 -0
  87. package/{esm2020 → esm2022}/components/radio-button/radio.module.mjs +5 -5
  88. package/{esm2020 → esm2022}/components/select/optgroup.directive.mjs +4 -4
  89. package/{esm2020 → esm2022}/components/select/option.directive.mjs +4 -4
  90. package/esm2022/components/select/select.component.mjs +182 -0
  91. package/{esm2020 → esm2022}/components/select/select.module.mjs +5 -5
  92. package/{esm2020 → esm2022}/components/workspace-launcher/workspace-launcher.component.mjs +4 -4
  93. package/{esm2020 → esm2022}/components/workspace-launcher/workspace-launcher.module.mjs +5 -5
  94. package/{esm2020 → esm2022}/form-entry/data-sources/data-sources.mjs +4 -4
  95. package/{esm2020 → esm2022}/form-entry/directives/collapse.directive.mjs +4 -4
  96. package/{esm2020 → esm2022}/form-entry/directives/historical-value.directive.mjs +4 -4
  97. package/{esm2020 → esm2022}/form-entry/error-renderer/error-renderer.component.mjs +4 -4
  98. package/{esm2020 → esm2022}/form-entry/expression-runner/expression-runner.mjs +4 -4
  99. package/{esm2020 → esm2022}/form-entry/form-entry.module.mjs +75 -75
  100. package/{esm2020 → esm2022}/form-entry/form-factory/control-relations.factory.mjs +4 -4
  101. package/{esm2020 → esm2022}/form-entry/form-factory/form-control.service.mjs +4 -4
  102. package/{esm2020 → esm2022}/form-entry/form-factory/form.factory.mjs +4 -4
  103. package/{esm2020 → esm2022}/form-entry/form-factory/hiders-disablers.factory.mjs +4 -4
  104. package/{esm2020 → esm2022}/form-entry/form-factory/question.factory.mjs +4 -4
  105. package/{esm2020 → esm2022}/form-entry/form-factory/show-messages.factory.mjs +4 -4
  106. package/{esm2020 → esm2022}/form-entry/form-factory/validation.factory.mjs +4 -4
  107. package/esm2022/form-entry/form-renderer/form-renderer.component.mjs +273 -0
  108. package/{esm2020 → esm2022}/form-entry/helpers/historical-expression-helper-service.mjs +4 -4
  109. package/{esm2020 → esm2022}/form-entry/helpers/historical-field-helper-service.mjs +4 -4
  110. package/{esm2020 → esm2022}/form-entry/helpers/js-expression-helper.mjs +4 -4
  111. package/{esm2020 → esm2022}/form-entry/pipes/time-ago.pipe.mjs +4 -4
  112. package/{esm2020 → esm2022}/form-entry/services/debug-mode.service.mjs +4 -4
  113. package/esm2022/form-entry/services/form-errors.service.mjs +21 -0
  114. package/{esm2020 → esm2022}/form-entry/services/form-schema-compiler.service.mjs +4 -4
  115. package/{esm2020 → esm2022}/form-entry/services/historical-encounter-data.service.mjs +4 -4
  116. package/esm2022/form-entry/validators/validations.mjs +5 -0
  117. package/esm2022/form-entry/value-adapters/diagnosis.adapter.mjs +241 -0
  118. package/{esm2020 → esm2022}/form-entry/value-adapters/encounter.adapter.mjs +4 -4
  119. package/{esm2020 → esm2022}/form-entry/value-adapters/obs-adapter-helper.mjs +4 -4
  120. package/{esm2020 → esm2022}/form-entry/value-adapters/obs.adapter.mjs +4 -4
  121. package/{esm2020 → esm2022}/form-entry/value-adapters/order.adapter.mjs +4 -4
  122. package/{esm2020 → esm2022}/form-entry/value-adapters/patient-identifier.adapter.mjs +4 -4
  123. package/{esm2020 → esm2022}/form-entry/value-adapters/person-attribute.adapter.mjs +4 -4
  124. package/{esm2020 → esm2022}/shared.module.mjs +5 -5
  125. package/{fesm2020 → fesm2022}/openmrs-ngx-formentry.mjs +531 -531
  126. package/fesm2022/openmrs-ngx-formentry.mjs.map +1 -0
  127. package/form-entry/directives/collapse.directive.d.ts +1 -1
  128. package/form-entry/directives/historical-value.directive.d.ts +1 -1
  129. package/form-entry/error-renderer/error-renderer.component.d.ts +1 -1
  130. package/form-entry/form-renderer/form-renderer.component.d.ts +1 -1
  131. package/package.json +14 -20
  132. package/esm2020/components/custom-control-wrapper/custom-control-wrapper.component.mjs +0 -68
  133. package/esm2020/components/date-time-picker/date-time-picker.component.mjs +0 -115
  134. package/esm2020/components/input/label.component.mjs +0 -263
  135. package/esm2020/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +0 -76
  136. package/esm2020/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs +0 -243
  137. package/esm2020/components/ngx-remote-select/ngx-remote-select.component.mjs +0 -132
  138. package/esm2020/components/number-input/number-input.component.mjs +0 -248
  139. package/esm2020/components/radio-button/radio.component.mjs +0 -96
  140. package/esm2020/components/select/select.component.mjs +0 -182
  141. package/esm2020/form-entry/form-renderer/form-renderer.component.mjs +0 -273
  142. package/esm2020/form-entry/services/form-errors.service.mjs +0 -21
  143. package/esm2020/form-entry/validators/validations.mjs +0 -5
  144. package/esm2020/form-entry/value-adapters/diagnosis.adapter.mjs +0 -241
  145. package/fesm2015/openmrs-ngx-formentry.mjs +0 -14935
  146. package/fesm2015/openmrs-ngx-formentry.mjs.map +0 -1
  147. package/fesm2020/openmrs-ngx-formentry.mjs.map +0 -1
  148. /package/{esm2020 → esm2022}/abstract-controls-extension/afe-control-type.mjs +0 -0
  149. /package/{esm2020 → esm2022}/abstract-controls-extension/afe-form-array.mjs +0 -0
  150. /package/{esm2020 → esm2022}/abstract-controls-extension/afe-form-control.mjs +0 -0
  151. /package/{esm2020 → esm2022}/abstract-controls-extension/afe-form-group.mjs +0 -0
  152. /package/{esm2020 → esm2022}/abstract-controls-extension/control-extensions.mjs +0 -0
  153. /package/{esm2020 → esm2022}/abstract-controls-extension/index.mjs +0 -0
  154. /package/{esm2020 → esm2022}/abstract-controls-extension/value-change.listener.mjs +0 -0
  155. /package/{esm2020 → esm2022}/change-tracking/control-relation.mjs +0 -0
  156. /package/{esm2020 → esm2022}/change-tracking/control-relations.mjs +0 -0
  157. /package/{esm2020 → esm2022}/components/date-time-picker/index.mjs +0 -0
  158. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.mjs +0 -0
  159. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.mjs +0 -0
  160. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.mjs +0 -0
  161. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.mjs +0 -0
  162. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog-config.class.mjs +0 -0
  163. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.mjs +0 -0
  164. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/utils/index.mjs +0 -0
  165. /package/{esm2020 → esm2022}/components/ngx-pick-datetime/lib/utils/object.utils.mjs +0 -0
  166. /package/{esm2020 → esm2022}/form-entry/control-alerts/alert-helpers.mjs +0 -0
  167. /package/{esm2020 → esm2022}/form-entry/control-alerts/can-generate-alert.mjs +0 -0
  168. /package/{esm2020 → esm2022}/form-entry/control-calculators/can-calculate.mjs +0 -0
  169. /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/can-disable.mjs +0 -0
  170. /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/can-hide.mjs +0 -0
  171. /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/disabler-helper.mjs +0 -0
  172. /package/{esm2020 → esm2022}/form-entry/control-hiders-disablers/hider-helpers.mjs +0 -0
  173. /package/{esm2020 → esm2022}/form-entry/data-sources/dummy-data-source.mjs +0 -0
  174. /package/{esm2020 → esm2022}/form-entry/directives/collapse-animations.mjs +0 -0
  175. /package/{esm2020 → esm2022}/form-entry/form-factory/form-node.mjs +0 -0
  176. /package/{esm2020 → esm2022}/form-entry/form-factory/form.mjs +0 -0
  177. /package/{esm2020 → esm2022}/form-entry/form-factory/index.mjs +0 -0
  178. /package/{esm2020 → esm2022}/form-entry/helpers/risk-dataset-table.mjs +0 -0
  179. /package/{esm2020 → esm2022}/form-entry/question-models/checkbox.model.mjs +0 -0
  180. /package/{esm2020 → esm2022}/form-entry/question-models/conditional-validation.model.mjs +0 -0
  181. /package/{esm2020 → esm2022}/form-entry/question-models/custom-control-question.model.mjs +0 -0
  182. /package/{esm2020 → esm2022}/form-entry/question-models/date-question.mjs +0 -0
  183. /package/{esm2020 → esm2022}/form-entry/question-models/date-validation.model.mjs +0 -0
  184. /package/{esm2020 → esm2022}/form-entry/question-models/diagnosis-question.mjs +0 -0
  185. /package/{esm2020 → esm2022}/form-entry/question-models/file-upload-question.mjs +0 -0
  186. /package/{esm2020 → esm2022}/form-entry/question-models/group-question.mjs +0 -0
  187. /package/{esm2020 → esm2022}/form-entry/question-models/index.mjs +0 -0
  188. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/base-options.mjs +0 -0
  189. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/checkbox-options.mjs +0 -0
  190. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/data-source.mjs +0 -0
  191. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/date-question-options.mjs +0 -0
  192. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/diagnosis-question-options.mjs +0 -0
  193. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/file-upload-question-options.mjs +0 -0
  194. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/group-question-options.mjs +0 -0
  195. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/multi-select-options.mjs +0 -0
  196. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/nested-questions.mjs +0 -0
  197. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/radio-button-options.mjs +0 -0
  198. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/repeating-question-options.mjs +0 -0
  199. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/select-option.mjs +0 -0
  200. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/select-question-options.mjs +0 -0
  201. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/test-order-question-options.mjs +0 -0
  202. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/text-area-question-options.mjs +0 -0
  203. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/text-question-options.mjs +0 -0
  204. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/ui-select-question-options.mjs +0 -0
  205. /package/{esm2020 → esm2022}/form-entry/question-models/interfaces/workspace-launcher-options.mjs +0 -0
  206. /package/{esm2020 → esm2022}/form-entry/question-models/js-expression-validation.model.mjs +0 -0
  207. /package/{esm2020 → esm2022}/form-entry/question-models/max-length-validation.model.mjs +0 -0
  208. /package/{esm2020 → esm2022}/form-entry/question-models/max-validation.model.mjs +0 -0
  209. /package/{esm2020 → esm2022}/form-entry/question-models/min-length-validation.model.mjs +0 -0
  210. /package/{esm2020 → esm2022}/form-entry/question-models/min-validation.model.mjs +0 -0
  211. /package/{esm2020 → esm2022}/form-entry/question-models/models.mjs +0 -0
  212. /package/{esm2020 → esm2022}/form-entry/question-models/multi-select-question.mjs +0 -0
  213. /package/{esm2020 → esm2022}/form-entry/question-models/pair.model.mjs +0 -0
  214. /package/{esm2020 → esm2022}/form-entry/question-models/question-base.mjs +0 -0
  215. /package/{esm2020 → esm2022}/form-entry/question-models/radio-button.model.mjs +0 -0
  216. /package/{esm2020 → esm2022}/form-entry/question-models/rendering-type.mjs +0 -0
  217. /package/{esm2020 → esm2022}/form-entry/question-models/repeating-question.mjs +0 -0
  218. /package/{esm2020 → esm2022}/form-entry/question-models/select-option.mjs +0 -0
  219. /package/{esm2020 → esm2022}/form-entry/question-models/select-question.mjs +0 -0
  220. /package/{esm2020 → esm2022}/form-entry/question-models/test-order-question.mjs +0 -0
  221. /package/{esm2020 → esm2022}/form-entry/question-models/text-area-input-question.mjs +0 -0
  222. /package/{esm2020 → esm2022}/form-entry/question-models/text-input-question.mjs +0 -0
  223. /package/{esm2020 → esm2022}/form-entry/question-models/ui-select-question.mjs +0 -0
  224. /package/{esm2020 → esm2022}/form-entry/question-models/validation.model.mjs +0 -0
  225. /package/{esm2020 → esm2022}/form-entry/question-models/workspace-launcher.model.mjs +0 -0
  226. /package/{esm2020 → esm2022}/form-entry/validators/conditional-answered.validator.mjs +0 -0
  227. /package/{esm2020 → esm2022}/form-entry/validators/conditional-required.validator.mjs +0 -0
  228. /package/{esm2020 → esm2022}/form-entry/validators/date.validator.mjs +0 -0
  229. /package/{esm2020 → esm2022}/form-entry/validators/future-date-restriction.validator.mjs +0 -0
  230. /package/{esm2020 → esm2022}/form-entry/validators/js-expression.validator.mjs +0 -0
  231. /package/{esm2020 → esm2022}/form-entry/validators/max-date.validator.mjs +0 -0
  232. /package/{esm2020 → esm2022}/form-entry/validators/max-length.validator.mjs +0 -0
  233. /package/{esm2020 → esm2022}/form-entry/validators/max.validator.mjs +0 -0
  234. /package/{esm2020 → esm2022}/form-entry/validators/min-date.validator.mjs +0 -0
  235. /package/{esm2020 → esm2022}/form-entry/validators/min-length.validator.mjs +0 -0
  236. /package/{esm2020 → esm2022}/form-entry/validators/min.validator.mjs +0 -0
  237. /package/{esm2020 → esm2022}/form-entry/validators/required.validator.mjs +0 -0
  238. /package/{esm2020 → esm2022}/form-entry/value-adapters/value.adapter.mjs +0 -0
  239. /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
  240. /package/{esm2020 → esm2022}/openmrs-ngx-formentry.mjs +0 -0
  241. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -1,241 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as _ from 'lodash';
3
- import { ArrayNode } from '../form-factory/form-node';
4
- import * as i0 from "@angular/core";
5
- export class DiagnosisValueAdapter {
6
- constructor() {
7
- this.formDiagnosisNodes = [];
8
- }
9
- generateFormPayload(form) {
10
- this.formDiagnosisNodes = [];
11
- this._findDiagnosisQuestionNodes(form.rootNode);
12
- return this._createDiagnosesPayload(this.formDiagnosisNodes, form.existingDiagnoses);
13
- }
14
- populateForm(form, diagnoses) {
15
- form.existingDiagnoses = diagnoses?.filter((d) => {
16
- return !d.voided;
17
- });
18
- this.formDiagnosisNodes = [];
19
- this._findDiagnosisQuestionNodes(form.rootNode);
20
- this._setDiagnosesValues(this.formDiagnosisNodes, form.existingDiagnoses, 1);
21
- this._setDiagnosesValues(this.formDiagnosisNodes, form.existingDiagnoses, 2);
22
- this.setDiagnosisGroupValue(this.formDiagnosisNodes, form.existingDiagnoses);
23
- }
24
- _createDiagnosesPayload(diagnosisNodes, existingDiagnoses) {
25
- const payload = [];
26
- let deletedDiagnoses = [];
27
- // Add new diagnosis to payload
28
- diagnosisNodes?.forEach((node) => {
29
- if (node instanceof ArrayNode) {
30
- node.control.value
31
- .filter((v) => v[node.question.key])
32
- .forEach((value) => {
33
- // Create Payload
34
- const payloadDiagnosis = this._createPayloadDiagnosis(value[node.question.key], node.question.extras);
35
- const isNewDiagnosis = existingDiagnoses.every((d) => d.diagnosis.coded.uuid !== value[node.question.key] ||
36
- d.certainty !== 'CONFIRMED' ||
37
- d.rank !== node.question.extras.questionOptions.rank);
38
- if (isNewDiagnosis) {
39
- payload.push(payloadDiagnosis);
40
- }
41
- });
42
- }
43
- if (node instanceof ArrayNode) {
44
- const groupNodeArray = node.children;
45
- groupNodeArray.forEach((groupNode) => {
46
- if (this.hasDiagnosisNodeChanged(groupNode)) {
47
- const diagnosisPayload = {};
48
- Object.values(groupNode.children).forEach((childNode) => {
49
- const { diagnosisType } = childNode.question.extras.questionOptions;
50
- switch (diagnosisType) {
51
- case 'rank':
52
- diagnosisPayload.rank =
53
- parseInt(childNode.control.value, 10) ?? 1;
54
- break;
55
- case 'certainty':
56
- diagnosisPayload.certainty = childNode.control.value;
57
- break;
58
- case 'diagnosis':
59
- diagnosisPayload.diagnosis = {
60
- coded: childNode.control.value
61
- };
62
- break;
63
- default:
64
- break;
65
- }
66
- });
67
- if (_.isEmpty(diagnosisPayload)) {
68
- return null;
69
- }
70
- if (groupNode.question.defaultValue?.uuid) {
71
- diagnosisPayload.uuid = groupNode.question.defaultValue.uuid;
72
- }
73
- diagnosisPayload.voided = false;
74
- payload.push(diagnosisPayload);
75
- }
76
- });
77
- }
78
- });
79
- this._updatedOldDiagnoses(payload, existingDiagnoses);
80
- deletedDiagnoses = this._getDeletedDiagnoses(diagnosisNodes, existingDiagnoses);
81
- return payload.concat(deletedDiagnoses);
82
- }
83
- _createPayloadDiagnosis(codedUuid, questionExtras) {
84
- const diagnosis = {
85
- diagnosis: {
86
- coded: codedUuid
87
- },
88
- certainty: 'CONFIRMED',
89
- rank: questionExtras.questionOptions.rank,
90
- voided: false
91
- };
92
- return diagnosis;
93
- }
94
- _getDeletedDiagnoses(diagnosisNodes, existingDiagnoses) {
95
- return existingDiagnoses
96
- .filter((existingDiagnosis) => {
97
- return !diagnosisNodes?.some((node) => {
98
- if (node instanceof ArrayNode) {
99
- return node.control.value.some((value) => {
100
- return (value[node.question.key] ===
101
- existingDiagnosis.diagnosis.coded.uuid &&
102
- existingDiagnosis.rank ===
103
- node.question.extras.questionOptions.rank &&
104
- existingDiagnosis.certainty === 'CONFIRMED');
105
- });
106
- }
107
- return false;
108
- });
109
- })
110
- .map((existingDiagnosis) => ({
111
- uuid: existingDiagnosis.uuid,
112
- voided: true
113
- }));
114
- }
115
- _updatedOldDiagnoses(payloadDiagnoses, existingDiagnoses) {
116
- payloadDiagnoses.forEach((p) => {
117
- existingDiagnoses?.forEach((e) => {
118
- let isSame = !e.voided && p.diagnosis.coded === e.diagnosis.coded.uuid;
119
- p.uuid = isSame ? e.uuid : null;
120
- });
121
- });
122
- }
123
- _setDiagnosesValues(formDiagnosisNodes, existingDiagnoses, rank) {
124
- formDiagnosisNodes
125
- ?.filter((node) => node.question.extras.questionOptions.rank == rank)
126
- .forEach((node) => {
127
- node['initialValue'] = existingDiagnoses;
128
- existingDiagnoses
129
- .filter((d) => d.rank == rank)
130
- .forEach((diagnosis, index) => {
131
- node.createChildNode();
132
- const value = {};
133
- value[node.question.key] = diagnosis.diagnosis.coded.uuid;
134
- const childNode = node.children[index];
135
- childNode.control.setValue(value);
136
- childNode['initialValue'] = value;
137
- });
138
- });
139
- }
140
- setDiagnosisGroupValue(formDiagnosisNodes, existingDiagnoses) {
141
- for (const diagnosis of existingDiagnoses) {
142
- for (const diagnosisNode of formDiagnosisNodes) {
143
- if (diagnosisNode.question.extras.type !== 'diagnosisGroup')
144
- break;
145
- const groupNode = diagnosisNode.createChildNode();
146
- groupNode.question.defaultValue = { uuid: diagnosis.uuid };
147
- for (const child of Object.values(groupNode.children)) {
148
- const diagnosisType = child.question.extras.questionOptions.diagnosisType;
149
- switch (diagnosisType) {
150
- case 'diagnosis':
151
- child.initialValue = diagnosis.diagnosis.coded?.uuid;
152
- child.control.setValue(diagnosis.diagnosis.coded?.uuid);
153
- break;
154
- case 'rank':
155
- child.initialValue = diagnosis.rank;
156
- child.control.setValue(diagnosis.rank);
157
- break;
158
- case 'certainty':
159
- child.initialValue = diagnosis.certainty;
160
- child.control.setValue(diagnosis.certainty);
161
- break;
162
- }
163
- }
164
- }
165
- }
166
- }
167
- _findDiagnosisQuestionNodes(formNode) {
168
- if (formNode.children) {
169
- if (formNode.children instanceof Object) {
170
- for (const key in formNode.children) {
171
- if (formNode.children.hasOwnProperty(key)) {
172
- switch (formNode.children[key].question.renderingType) {
173
- case 'page':
174
- this._findDiagnosisQuestionNodes(formNode.children[key]);
175
- break;
176
- case 'section':
177
- this._findDiagnosisQuestionNodes(formNode.children[key]);
178
- break;
179
- case 'group':
180
- this._findDiagnosisQuestionNodes(formNode.children[key]);
181
- break;
182
- case 'repeating':
183
- if (formNode.children) {
184
- const { children } = formNode;
185
- // Condition for diagnosisGroup nodes
186
- for (const node in formNode.children) {
187
- const questionExtras = formNode.children[node].question.extras;
188
- if (questionExtras.type === 'diagnosisGroup') {
189
- const arrayNode = formNode.children[node];
190
- this.formDiagnosisNodes.push(arrayNode);
191
- break;
192
- }
193
- }
194
- // Condition for diagnosis nodes
195
- Object.values(children).forEach((child) => {
196
- const { question, nodeIndex } = child;
197
- if (question.extras?.type === 'diagnosis' &&
198
- !this.formDiagnosisNodes.some((x) => x.nodeIndex === nodeIndex)) {
199
- this.formDiagnosisNodes.push(child);
200
- }
201
- });
202
- }
203
- break;
204
- default:
205
- break;
206
- }
207
- }
208
- }
209
- }
210
- }
211
- }
212
- _convert(diagnosis) {
213
- return {
214
- uuid: diagnosis.uuid,
215
- encounter: diagnosis.encounter,
216
- patient: diagnosis.patient,
217
- diagnosis: {
218
- coded: diagnosis.diagnosis.coded.uuid,
219
- nonCoded: diagnosis.diagnosis.nonCoded
220
- },
221
- certainty: diagnosis.certainty,
222
- rank: diagnosis.rank,
223
- voided: diagnosis.voided
224
- };
225
- }
226
- hasDiagnosisNodeChanged(nodeAsGroup) {
227
- const childrenNodes = Object.values(nodeAsGroup.children);
228
- for (let childNode of childrenNodes) {
229
- if (childNode.control.value !== nodeAsGroup.initialValue?.primaryDiagnosisId) {
230
- return true;
231
- }
232
- }
233
- return false;
234
- }
235
- }
236
- DiagnosisValueAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagnosisValueAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
237
- DiagnosisValueAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagnosisValueAdapter });
238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DiagnosisValueAdapter, decorators: [{
239
- type: Injectable
240
- }] });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc2lzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2RpYWdub3Npcy5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFHNUIsT0FBTyxFQUFFLFNBQVMsRUFBdUIsTUFBTSwyQkFBMkIsQ0FBQzs7QUFHM0UsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVFLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztLQXFTekI7SUFuU0MsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFVLEVBQUUsU0FBMkI7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixD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QUFDLEtBQUssS0FBSyxXQUFXLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUN4RTtnQkFDQSxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O21IQXJTVSxxQkFBcUI7dUhBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0nO1xuaW1wb3J0IHsgVmFsdWVBZGFwdGVyIH0gZnJvbSAnLi92YWx1ZS5hZGFwdGVyJztcbmltcG9ydCB7IEFycmF5Tm9kZSwgR3JvdXBOb2RlLCBMZWFmTm9kZSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtLW5vZGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGlhZ25vc2lzVmFsdWVBZGFwdGVyIGltcGxlbWVudHMgVmFsdWVBZGFwdGVyIHtcbiAgZm9ybURpYWdub3Npc05vZGVzID0gW107XG5cbiAgZ2VuZXJhdGVGb3JtUGF5bG9hZChmb3JtOiBGb3JtKSB7XG4gICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMgPSBbXTtcbiAgICB0aGlzLl9maW5kRGlhZ25vc2lzUXVlc3Rpb25Ob2Rlcyhmb3JtLnJvb3ROb2RlKTtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGlhZ25vc2VzUGF5bG9hZChcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3Nlc1xuICAgICk7XG4gIH1cblxuICBwb3B1bGF0ZUZvcm0oZm9ybTogRm9ybSwgZGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+KSB7XG4gICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyA9IGRpYWdub3Nlcz8uZmlsdGVyKChkKSA9PiB7XG4gICAgICByZXR1cm4gIWQudm9pZGVkO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzID0gW107XG4gICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybS5yb290Tm9kZSk7XG4gICAgdGhpcy5fc2V0RGlhZ25vc2VzVmFsdWVzKFxuICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgICBmb3JtLmV4aXN0aW5nRGlhZ25vc2VzLFxuICAgICAgMVxuICAgICk7XG4gICAgdGhpcy5fc2V0RGlhZ25vc2VzVmFsdWVzKFxuICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgICBmb3JtLmV4aXN0aW5nRGlhZ25vc2VzLFxuICAgICAgMlxuICAgICk7XG4gICAgdGhpcy5zZXREaWFnbm9zaXNHcm91cFZhbHVlKFxuICAgICAgdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgICBmb3JtLmV4aXN0aW5nRGlhZ25vc2VzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURpYWdub3Nlc1BheWxvYWQoZGlhZ25vc2lzTm9kZXMsIGV4aXN0aW5nRGlhZ25vc2VzKSB7XG4gICAgY29uc3QgcGF5bG9hZDogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4gPSBbXTtcbiAgICBsZXQgZGVsZXRlZERpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzUGF5bG9hZD4gPSBbXTtcblxuICAgIC8vIEFkZCBuZXcgZGlhZ25vc2lzIHRvIHBheWxvYWRcbiAgICBkaWFnbm9zaXNOb2Rlcz8uZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBcnJheU5vZGUpIHtcbiAgICAgICAgbm9kZS5jb250cm9sLnZhbHVlXG4gICAgICAgICAgLmZpbHRlcigodikgPT4gdltub2RlLnF1ZXN0aW9uLmtleV0pXG4gICAgICAgICAgLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgUGF5bG9hZFxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZERpYWdub3NpcyA9IHRoaXMuX2NyZWF0ZVBheWxvYWREaWFnbm9zaXMoXG4gICAgICAgICAgICAgIHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSxcbiAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5leHRyYXNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTmV3RGlhZ25vc2lzID0gZXhpc3RpbmdEaWFnbm9zZXMuZXZlcnkoXG4gICAgICAgICAgICAgIChkKSA9PlxuICAgICAgICAgICAgICAgIGQuZGlhZ25vc2lzLmNvZGVkLnV1aWQgIT09IHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSB8fFxuICAgICAgICAgICAgICAgIGQuY2VydGFpbnR5ICE9PSAnQ09ORklSTUVEJyB8fFxuICAgICAgICAgICAgICAgIGQucmFuayAhPT0gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJhbmtcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpc05ld0RpYWdub3Npcykge1xuICAgICAgICAgICAgICBwYXlsb2FkLnB1c2gocGF5bG9hZERpYWdub3Npcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQXJyYXlOb2RlKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwTm9kZUFycmF5ID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZ3JvdXBOb2RlQXJyYXkuZm9yRWFjaCgoZ3JvdXBOb2RlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzRGlhZ25vc2lzTm9kZUNoYW5nZWQoZ3JvdXBOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgZGlhZ25vc2lzUGF5bG9hZDogUGFydGlhbDxEaWFnbm9zaXNQYXlsb2FkPiA9IHt9O1xuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhncm91cE5vZGUuY2hpbGRyZW4pLmZvckVhY2goKGNoaWxkTm9kZTogTGVhZk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGRpYWdub3Npc1R5cGVcbiAgICAgICAgICAgICAgfSA9IGNoaWxkTm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zO1xuICAgICAgICAgICAgICBzd2l0Y2ggKGRpYWdub3Npc1R5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdyYW5rJzpcbiAgICAgICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQucmFuayA9XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGNoaWxkTm9kZS5jb250cm9sLnZhbHVlLCAxMCkgPz8gMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NlcnRhaW50eSc6XG4gICAgICAgICAgICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLmNlcnRhaW50eSA9IGNoaWxkTm9kZS5jb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGlhZ25vc2lzJzpcbiAgICAgICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQuZGlhZ25vc2lzID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlZDogY2hpbGROb2RlLmNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eShkaWFnbm9zaXNQYXlsb2FkKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncm91cE5vZGUucXVlc3Rpb24uZGVmYXVsdFZhbHVlPy51dWlkKSB7XG4gICAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQudXVpZCA9IGdyb3VwTm9kZS5xdWVzdGlvbi5kZWZhdWx0VmFsdWUudXVpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpYWdub3Npc1BheWxvYWQudm9pZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBwYXlsb2FkLnB1c2goZGlhZ25vc2lzUGF5bG9hZCBhcyBEaWFnbm9zaXNQYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3VwZGF0ZWRPbGREaWFnbm9zZXMocGF5bG9hZCwgZXhpc3RpbmdEaWFnbm9zZXMpO1xuICAgIGRlbGV0ZWREaWFnbm9zZXMgPSB0aGlzLl9nZXREZWxldGVkRGlhZ25vc2VzKGRpYWdub3Npc05vZGVzLCBleGlzdGluZ0RpYWdub3Nlcyk7XG4gICAgcmV0dXJuIHBheWxvYWQuY29uY2F0KGRlbGV0ZWREaWFnbm9zZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlUGF5bG9hZERpYWdub3Npcyhjb2RlZFV1aWQsIHF1ZXN0aW9uRXh0cmFzKTogRGlhZ25vc2lzUGF5bG9hZCB7XG4gICAgY29uc3QgZGlhZ25vc2lzOiBEaWFnbm9zaXNQYXlsb2FkID0ge1xuICAgICAgZGlhZ25vc2lzOiB7XG4gICAgICAgIGNvZGVkOiBjb2RlZFV1aWRcbiAgICAgIH0sXG4gICAgICBjZXJ0YWludHk6ICdDT05GSVJNRUQnLFxuICAgICAgcmFuazogcXVlc3Rpb25FeHRyYXMucXVlc3Rpb25PcHRpb25zLnJhbmssXG4gICAgICB2b2lkZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIHJldHVybiBkaWFnbm9zaXM7XG4gIH1cblxuICBwcml2YXRlIF9nZXREZWxldGVkRGlhZ25vc2VzKFxuICAgIGRpYWdub3Npc05vZGVzOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPixcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPlxuICApOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gZXhpc3RpbmdEaWFnbm9zZXNcbiAgICAgIC5maWx0ZXIoKGV4aXN0aW5nRGlhZ25vc2lzKSA9PiB7XG4gICAgICAgIHJldHVybiAhZGlhZ25vc2lzTm9kZXM/LnNvbWUoKG5vZGUpID0+IHtcbiAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEFycmF5Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29udHJvbC52YWx1ZS5zb21lKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSA9PT1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nRGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZC51dWlkICYmXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdEaWFnbm9zaXMucmFuayA9PT1cbiAgICAgICAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yYW5rICYmXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdEaWFnbm9zaXMuY2VydGFpbnR5ID09PSAnQ09ORklSTUVEJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZXhpc3RpbmdEaWFnbm9zaXMpID0+ICh7XG4gICAgICAgIHV1aWQ6IGV4aXN0aW5nRGlhZ25vc2lzLnV1aWQsXG4gICAgICAgIHZvaWRlZDogdHJ1ZVxuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlZE9sZERpYWdub3NlcyhcbiAgICBwYXlsb2FkRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPixcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPlxuICApIHtcbiAgICBwYXlsb2FkRGlhZ25vc2VzLmZvckVhY2goKHApID0+IHtcbiAgICAgIGV4aXN0aW5nRGlhZ25vc2VzPy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGxldCBpc1NhbWUgPSAhZS52b2lkZWQgJiYgcC5kaWFnbm9zaXMuY29kZWQgPT09IGUuZGlhZ25vc2lzLmNvZGVkLnV1aWQ7XG4gICAgICAgIHAudXVpZCA9IGlzU2FtZSA/IGUudXVpZCA6IG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICBmb3JtRGlhZ25vc2lzTm9kZXMsXG4gICAgZXhpc3RpbmdEaWFnbm9zZXM6IEFycmF5PERpYWdub3Npcz4sXG4gICAgcmFuazogbnVtYmVyXG4gICkge1xuICAgIGZvcm1EaWFnbm9zaXNOb2Rlc1xuICAgICAgPy5maWx0ZXIoKG5vZGUpID0+IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yYW5rID09IHJhbmspXG4gICAgICAuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBub2RlWydpbml0aWFsVmFsdWUnXSA9IGV4aXN0aW5nRGlhZ25vc2VzO1xuICAgICAgICBleGlzdGluZ0RpYWdub3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQucmFuayA9PSByYW5rKVxuICAgICAgICAgIC5mb3JFYWNoKChkaWFnbm9zaXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBub2RlLmNyZWF0ZUNoaWxkTm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgIHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSA9IGRpYWdub3Npcy5kaWFnbm9zaXMuY29kZWQudXVpZDtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5vZGUuY2hpbGRyZW5baW5kZXhdO1xuICAgICAgICAgICAgY2hpbGROb2RlLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgY2hpbGROb2RlWydpbml0aWFsVmFsdWUnXSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERpYWdub3Npc0dyb3VwVmFsdWUoXG4gICAgZm9ybURpYWdub3Npc05vZGVzLFxuICAgIGV4aXN0aW5nRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+XG4gICkge1xuICAgIGZvciAoY29uc3QgZGlhZ25vc2lzIG9mIGV4aXN0aW5nRGlhZ25vc2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGRpYWdub3Npc05vZGUgb2YgZm9ybURpYWdub3Npc05vZGVzKSB7XG4gICAgICAgIGlmIChkaWFnbm9zaXNOb2RlLnF1ZXN0aW9uLmV4dHJhcy50eXBlICE9PSAnZGlhZ25vc2lzR3JvdXAnKSBicmVhaztcbiAgICAgICAgY29uc3QgZ3JvdXBOb2RlID0gZGlhZ25vc2lzTm9kZS5jcmVhdGVDaGlsZE5vZGUoKSBhcyBHcm91cE5vZGU7XG5cbiAgICAgICAgZ3JvdXBOb2RlLnF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSA9IHsgdXVpZDogZGlhZ25vc2lzLnV1aWQgfTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKGdyb3VwTm9kZS5jaGlsZHJlbikgYXMgTGVhZk5vZGVbXSkge1xuICAgICAgICAgIGNvbnN0IGRpYWdub3Npc1R5cGUgPVxuICAgICAgICAgICAgY2hpbGQucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5kaWFnbm9zaXNUeXBlO1xuICAgICAgICAgIHN3aXRjaCAoZGlhZ25vc2lzVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnZGlhZ25vc2lzJzpcbiAgICAgICAgICAgICAgY2hpbGQuaW5pdGlhbFZhbHVlID0gZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZD8udXVpZDtcbiAgICAgICAgICAgICAgY2hpbGQuY29udHJvbC5zZXRWYWx1ZShkaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkPy51dWlkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyYW5rJzpcbiAgICAgICAgICAgICAgY2hpbGQuaW5pdGlhbFZhbHVlID0gZGlhZ25vc2lzLnJhbms7XG4gICAgICAgICAgICAgIGNoaWxkLmNvbnRyb2wuc2V0VmFsdWUoZGlhZ25vc2lzLnJhbmspO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlcnRhaW50eSc6XG4gICAgICAgICAgICAgIGNoaWxkLmluaXRpYWxWYWx1ZSA9IGRpYWdub3Npcy5jZXJ0YWludHk7XG4gICAgICAgICAgICAgIGNoaWxkLmNvbnRyb2wuc2V0VmFsdWUoZGlhZ25vc2lzLmNlcnRhaW50eSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlKSB7XG4gICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgc3dpdGNoIChmb3JtTm9kZS5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGFnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3JlcGVhdGluZyc6XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBmb3JtTm9kZTtcbiAgICAgICAgICAgICAgICAgIC8vIENvbmRpdGlvbiBmb3IgZGlhZ25vc2lzR3JvdXAgbm9kZXNcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBpbiBmb3JtTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkV4dHJhcyA9XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybU5vZGUuY2hpbGRyZW5bbm9kZV0ucXVlc3Rpb24uZXh0cmFzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25FeHRyYXMudHlwZSA9PT0gJ2RpYWdub3Npc0dyb3VwJykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5Tm9kZSA9IGZvcm1Ob2RlLmNoaWxkcmVuW25vZGVdIGFzIEFycmF5Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2Rlcy5wdXNoKGFycmF5Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvbmRpdGlvbiBmb3IgZGlhZ25vc2lzIG5vZGVzXG4gICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZDogTGVhZk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBxdWVzdGlvbiwgbm9kZUluZGV4IH0gPSBjaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmV4dHJhcz8udHlwZSA9PT0gJ2RpYWdub3NpcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICh4KSA9PiB4Lm5vZGVJbmRleCA9PT0gbm9kZUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY29udmVydChkaWFnbm9zaXM6IERpYWdub3Npcyk6IERpYWdub3Npc1BheWxvYWQge1xuICAgIHJldHVybiB7XG4gICAgICB1dWlkOiBkaWFnbm9zaXMudXVpZCxcbiAgICAgIGVuY291bnRlcjogZGlhZ25vc2lzLmVuY291bnRlcixcbiAgICAgIHBhdGllbnQ6IGRpYWdub3Npcy5wYXRpZW50LFxuICAgICAgZGlhZ25vc2lzOiB7XG4gICAgICAgIGNvZGVkOiBkaWFnbm9zaXMuZGlhZ25vc2lzLmNvZGVkLnV1aWQsXG4gICAgICAgIG5vbkNvZGVkOiBkaWFnbm9zaXMuZGlhZ25vc2lzLm5vbkNvZGVkXG4gICAgICB9LFxuICAgICAgY2VydGFpbnR5OiBkaWFnbm9zaXMuY2VydGFpbnR5LFxuICAgICAgcmFuazogZGlhZ25vc2lzLnJhbmssXG4gICAgICB2b2lkZWQ6IGRpYWdub3Npcy52b2lkZWRcbiAgICB9O1xuICB9XG5cbiAgaGFzRGlhZ25vc2lzTm9kZUNoYW5nZWQobm9kZUFzR3JvdXA6IEdyb3VwTm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaWxkcmVuTm9kZXMgPSBPYmplY3QudmFsdWVzKG5vZGVBc0dyb3VwLmNoaWxkcmVuKSBhcyBBcnJheTxcbiAgICAgIExlYWZOb2RlXG4gICAgPjtcblxuICAgIGZvciAobGV0IGNoaWxkTm9kZSBvZiBjaGlsZHJlbk5vZGVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZS5jb250cm9sLnZhbHVlICE9PSBub2RlQXNHcm91cC5pbml0aWFsVmFsdWU/LnByaW1hcnlEaWFnbm9zaXNJZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3NpcyB7XG4gIHV1aWQ/OiBzdHJpbmc7XG4gIGRpc3BsYXk/OiBzdHJpbmc7XG4gIGVuY291bnRlcj86IHN0cmluZztcbiAgcGF0aWVudD86IHN0cmluZztcbiAgZGlhZ25vc2lzOiB7XG4gICAgY29kZWQ/OiB7XG4gICAgICB1dWlkOiBzdHJpbmc7XG4gICAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIH07XG4gICAgbm9uQ29kZWQ/OiBzdHJpbmc7XG4gIH07XG4gIGNlcnRhaW50eTogJ0NPTkZJUk1FRCcgfCAnUFJPVklTSU9OQUwnO1xuICByYW5rOiBudW1iZXI7XG4gIHZvaWRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc2lzUGF5bG9hZCB7XG4gIHV1aWQ/OiBzdHJpbmc7XG4gIGVuY291bnRlcj86IHN0cmluZztcbiAgcGF0aWVudD86IHN0cmluZztcbiAgZGlhZ25vc2lzOiB7XG4gICAgY29kZWQ/OiBzdHJpbmc7XG4gICAgbm9uQ29kZWQ/OiBzdHJpbmc7XG4gIH07XG4gIGNlcnRhaW50eTogJ0NPTkZJUk1FRCcgfCAnUFJPVklTSU9OQUwnO1xuICByYW5rOiBudW1iZXI7XG4gIHZvaWRlZD86IGJvb2xlYW47XG59XG4iXX0=