@ampath-kenya/ngx-openmrs-formentry 3.0.0-alpha9 → 3.0.0-ampath.1-beta.0

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 (441) hide show
  1. package/abstract-controls-extension/afe-control-type.d.ts +1 -1
  2. package/abstract-controls-extension/afe-form-array.d.ts +2 -3
  3. package/abstract-controls-extension/afe-form-control.d.ts +1 -1
  4. package/abstract-controls-extension/afe-form-group.d.ts +1 -1
  5. package/ampath-kenya-ngx-openmrs-formentry.d.ts +48 -74
  6. package/ampath-kenya-ngx-openmrs-formentry.metadata.json +1 -1
  7. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js +5729 -9376
  8. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.js.map +1 -1
  9. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js +1 -16
  10. package/bundles/ampath-kenya-ngx-openmrs-formentry.umd.min.js.map +1 -1
  11. package/change-tracking/control-relation.d.ts +4 -4
  12. package/change-tracking/control-relations.d.ts +3 -3
  13. package/components/check-box/checkbox.component.d.ts +1 -2
  14. package/components/date-time-picker/date-time-picker.component.d.ts +1 -2
  15. package/components/date-time-picker/date-time-picker.module.d.ts +0 -3
  16. package/components/file-upload/file-upload.component.d.ts +25 -0
  17. package/components/file-upload/file-upload.module.d.ts +2 -0
  18. package/components/file-upload/secure.pipe.d.ts +5 -5
  19. package/components/ngx-date-time-picker/ngx-date-time-picker.component.d.ts +52 -0
  20. package/components/{ngx-datetime-picker/ngx-datetime-picker.module.d.ts → ngx-date-time-picker/ngx-date-time-picker.module.d.ts} +0 -3
  21. package/components/ngx-time-picker/ngx-time-picker.component.d.ts +13 -0
  22. package/components/ngx-time-picker/ngx-time-picker.module.d.ts +2 -0
  23. package/components/{ngx-remote-select/ngx-remote-select.component.d.ts → remote-select/remote-select.component.d.ts} +8 -12
  24. package/components/remote-select/remote-select.module.d.ts +2 -0
  25. package/components/select/diacritics.d.ts +844 -0
  26. package/components/select/option-list.d.ts +36 -0
  27. package/components/select/option.d.ts +17 -0
  28. package/components/select/select-dropdown.component.d.ts +40 -0
  29. package/components/select/select-dropdown.component.style.d.ts +1 -0
  30. package/components/select/select.component.d.ts +96 -108
  31. package/components/select/select.component.style.d.ts +1 -0
  32. package/encounter-viewer/display-controls/file-preview.component.d.ts +25 -0
  33. package/encounter-viewer/display-controls/question-control.component.d.ts +15 -0
  34. package/encounter-viewer/display-controls/remote-answer.component.d.ts +17 -0
  35. package/encounter-viewer/encounter-container/encounter-container.component.d.ts +15 -0
  36. package/encounter-viewer/encounter-pdf-viewer.service.d.ts +27 -0
  37. package/encounter-viewer/encounter-view/encounter-viewer.component.d.ts +30 -0
  38. package/encounter-viewer/encounter-viewer.module.d.ts +2 -0
  39. package/encounter-viewer/encounter-viewer.service.d.ts +16 -0
  40. package/esm2015/abstract-controls-extension/afe-control-type.js +2 -1
  41. package/esm2015/abstract-controls-extension/afe-form-array.js +2 -1
  42. package/esm2015/abstract-controls-extension/afe-form-control.js +2 -1
  43. package/esm2015/abstract-controls-extension/afe-form-group.js +2 -1
  44. package/esm2015/abstract-controls-extension/control-extensions.js +2 -1
  45. package/esm2015/abstract-controls-extension/index.js +2 -1
  46. package/esm2015/abstract-controls-extension/value-change.listener.js +2 -2
  47. package/esm2015/ampath-kenya-ngx-openmrs-formentry.js +40 -65
  48. package/esm2015/change-tracking/control-relation.js +2 -1
  49. package/esm2015/change-tracking/control-relations.js +2 -1
  50. package/esm2015/components/afe-ng-select.component.js +3 -2
  51. package/esm2015/components/appointments-overview/appointments-overview.component.js +78 -33
  52. package/esm2015/components/check-box/checkbox.component.js +24 -3
  53. package/esm2015/components/check-box/checkbox.module.js +3 -2
  54. package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +93 -4
  55. package/esm2015/components/date-time-picker/date-time-picker.component.js +109 -5
  56. package/esm2015/components/date-time-picker/date-time-picker.module.js +3 -2
  57. package/esm2015/components/date-time-picker/picker-modal/modal.component.js +13 -5
  58. package/esm2015/components/date-time-picker/pipes/moment.pipe.js +3 -2
  59. package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +51 -4
  60. package/esm2015/components/file-upload/file-upload.component.js +130 -0
  61. package/esm2015/components/file-upload/file-upload.module.js +28 -0
  62. package/esm2015/components/file-upload/secure.pipe.js +5 -3
  63. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.component.js +259 -0
  64. package/esm2015/components/ngx-date-time-picker/ngx-date-time-picker.module.js +43 -0
  65. package/esm2015/components/ngx-time-picker/ngx-time-picker.component.js +78 -0
  66. package/esm2015/components/ngx-time-picker/ngx-time-picker.module.js +16 -0
  67. package/esm2015/components/remote-select/remote-select.component.js +171 -0
  68. package/esm2015/components/remote-select/remote-select.module.js +18 -0
  69. package/esm2015/components/select/diacritics.js +856 -0
  70. package/esm2015/components/select/option-list.js +180 -0
  71. package/esm2015/components/select/option.js +30 -0
  72. package/esm2015/components/select/select-dropdown.component.js +162 -0
  73. package/esm2015/components/select/select-dropdown.component.style.js +59 -0
  74. package/esm2015/components/select/select.component.js +493 -216
  75. package/esm2015/components/select/select.component.style.js +102 -0
  76. package/esm2015/components/select/select.module.js +11 -24
  77. package/esm2015/encounter-viewer/display-controls/file-preview.component.js +111 -0
  78. package/esm2015/encounter-viewer/display-controls/question-control.component.js +94 -0
  79. package/esm2015/encounter-viewer/display-controls/remote-answer.component.js +81 -0
  80. package/esm2015/encounter-viewer/encounter-container/encounter-container.component.js +50 -0
  81. package/esm2015/encounter-viewer/encounter-pdf-viewer.service.js +437 -0
  82. package/esm2015/encounter-viewer/encounter-view/encounter-viewer.component.js +301 -0
  83. package/esm2015/encounter-viewer/encounter-viewer.module.js +36 -0
  84. package/esm2015/encounter-viewer/encounter-viewer.service.js +162 -0
  85. package/esm2015/form-entry/control-alerts/alert-helpers.js +2 -1
  86. package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -2
  87. package/esm2015/form-entry/control-calculators/can-calculate.js +2 -2
  88. package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -2
  89. package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -2
  90. package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +2 -1
  91. package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +2 -1
  92. package/esm2015/form-entry/data-sources/data-sources.js +5 -3
  93. package/esm2015/form-entry/data-sources/dummy-data-source.js +2 -1
  94. package/esm2015/form-entry/directives/historical-value-directive.js +4 -2
  95. package/esm2015/form-entry/error-renderer/error-renderer.component.js +20 -4
  96. package/esm2015/form-entry/expression-runner/expression-runner.js +13 -16
  97. package/esm2015/form-entry/form-entry.module.js +29 -25
  98. package/esm2015/form-entry/form-factory/control-relations.factory.js +4 -2
  99. package/esm2015/form-entry/form-factory/form-control.service.js +4 -2
  100. package/esm2015/form-entry/form-factory/form-node.js +2 -4
  101. package/esm2015/form-entry/form-factory/form.factory.js +4 -2
  102. package/esm2015/form-entry/form-factory/form.js +2 -1
  103. package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +4 -2
  104. package/esm2015/form-entry/form-factory/question.factory.js +158 -23
  105. package/esm2015/form-entry/form-factory/show-messages.factory.js +4 -2
  106. package/esm2015/form-entry/form-factory/validation.factory.js +4 -2
  107. package/esm2015/form-entry/form-renderer/form-renderer.component.css.js +8 -12
  108. package/esm2015/form-entry/form-renderer/form-renderer.component.js +458 -9
  109. package/esm2015/form-entry/helpers/historical-expression-helper-service.js +4 -2
  110. package/esm2015/form-entry/helpers/historical-field-helper-service.js +2 -5
  111. package/esm2015/form-entry/helpers/js-expression-helper.js +2 -5
  112. package/esm2015/form-entry/question-models/checkbox.model.js +2 -1
  113. package/esm2015/form-entry/question-models/conditional-validation.model.js +2 -1
  114. package/esm2015/form-entry/question-models/date-question.js +3 -1
  115. package/esm2015/form-entry/question-models/date-validation.model.js +2 -1
  116. package/esm2015/form-entry/question-models/decimal-point-validation.model.js +20 -0
  117. package/esm2015/form-entry/question-models/file-upload-question.js +2 -1
  118. package/esm2015/form-entry/question-models/group-question.js +2 -1
  119. package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -2
  120. package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -2
  121. package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -2
  122. package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -2
  123. package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -2
  124. package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -2
  125. package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -2
  126. package/esm2015/form-entry/question-models/interfaces/nested-questions.js +2 -1
  127. package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -2
  128. package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -2
  129. package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -2
  130. package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -2
  131. package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -2
  132. package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -2
  133. package/esm2015/form-entry/question-models/interfaces/time-question-options.js +2 -0
  134. package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -2
  135. package/esm2015/form-entry/question-models/js-expression-validation.model.js +2 -1
  136. package/esm2015/form-entry/question-models/max-validation.model.js +2 -1
  137. package/esm2015/form-entry/question-models/min-validation.model.js +2 -1
  138. package/esm2015/form-entry/question-models/models.js +2 -1
  139. package/esm2015/form-entry/question-models/multi-select-question.js +2 -1
  140. package/esm2015/form-entry/question-models/pair.model.js +2 -1
  141. package/esm2015/form-entry/question-models/question-base.js +2 -1
  142. package/esm2015/form-entry/question-models/rendering-type.js +2 -1
  143. package/esm2015/form-entry/question-models/repeating-question.js +2 -1
  144. package/esm2015/form-entry/question-models/select-option.js +2 -1
  145. package/esm2015/form-entry/question-models/select-question.js +2 -1
  146. package/esm2015/form-entry/question-models/test-order-question.js +2 -1
  147. package/esm2015/form-entry/question-models/text-area-input-question.js +2 -1
  148. package/esm2015/form-entry/question-models/text-input-question.js +2 -1
  149. package/esm2015/form-entry/question-models/time-question.js +11 -0
  150. package/esm2015/form-entry/question-models/ui-select-question.js +2 -1
  151. package/esm2015/form-entry/question-models/validation.model.js +2 -1
  152. package/esm2015/form-entry/services/debug-mode.service.js +4 -2
  153. package/esm2015/form-entry/services/form-errors.service.js +3 -2
  154. package/esm2015/form-entry/services/form-schema-compiler.service.js +4 -2
  155. package/esm2015/form-entry/services/historical-encounter-data.service.js +4 -2
  156. package/esm2015/form-entry/utils/messages.js +2 -1
  157. package/esm2015/form-entry/validators/conditional-answered.validator.js +2 -1
  158. package/esm2015/form-entry/validators/conditional-required.validator.js +2 -1
  159. package/esm2015/form-entry/validators/date.validator.js +2 -1
  160. package/esm2015/form-entry/validators/future-date-restriction.validator.js +2 -1
  161. package/esm2015/form-entry/validators/js-expression.validator.js +2 -1
  162. package/esm2015/form-entry/validators/max-date.validator.js +2 -1
  163. package/esm2015/form-entry/validators/max.validator.js +2 -1
  164. package/esm2015/form-entry/validators/min-date.validator.js +2 -1
  165. package/esm2015/form-entry/validators/min.validator.js +2 -1
  166. package/esm2015/form-entry/validators/required.validator.js +2 -1
  167. package/esm2015/form-entry/validators/validations.js +2 -1
  168. package/esm2015/form-entry/value-adapters/encounter.adapter.js +5 -3
  169. package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +5 -11
  170. package/esm2015/form-entry/value-adapters/obs.adapter.js +5 -6
  171. package/esm2015/form-entry/value-adapters/order.adapter.js +3 -2
  172. package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +8 -3
  173. package/esm2015/form-entry/value-adapters/value.adapter.js +2 -2
  174. package/esm2015/public_api.js +52 -2
  175. package/esm2015/shared.module.js +3 -2
  176. package/esm5/abstract-controls-extension/afe-control-type.js +9 -0
  177. package/esm5/abstract-controls-extension/afe-form-array.js +99 -0
  178. package/esm5/abstract-controls-extension/afe-form-control.js +97 -0
  179. package/esm5/abstract-controls-extension/afe-form-group.js +71 -0
  180. package/esm5/abstract-controls-extension/control-extensions.js +6 -0
  181. package/esm5/abstract-controls-extension/index.js +6 -0
  182. package/esm5/abstract-controls-extension/value-change.listener.js +2 -0
  183. package/esm5/ampath-kenya-ngx-openmrs-formentry.js +45 -0
  184. package/esm5/change-tracking/control-relation.js +60 -0
  185. package/esm5/change-tracking/control-relations.js +47 -0
  186. package/esm5/components/afe-ng-select.component.js +88 -0
  187. package/esm5/components/appointments-overview/appointments-overview.component.js +127 -0
  188. package/esm5/components/check-box/checkbox.component.js +89 -0
  189. package/esm5/components/check-box/checkbox.module.js +19 -0
  190. package/esm5/components/date-time-picker/date-picker/date-picker.component.js +188 -0
  191. package/esm5/components/date-time-picker/date-time-picker.component.js +113 -0
  192. package/esm5/components/date-time-picker/date-time-picker.module.js +39 -0
  193. package/esm5/components/date-time-picker/picker-modal/modal.component.js +34 -0
  194. package/esm5/components/date-time-picker/pipes/moment.pipe.js +18 -0
  195. package/esm5/components/date-time-picker/time-picker/time-picker.component.js +119 -0
  196. package/esm5/components/file-upload/file-upload.component.js +128 -0
  197. package/esm5/components/file-upload/file-upload.module.js +32 -0
  198. package/esm5/components/file-upload/secure.pipe.js +107 -0
  199. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.component.js +221 -0
  200. package/esm5/components/ngx-date-time-picker/ngx-date-time-picker.module.js +47 -0
  201. package/esm5/components/ngx-time-picker/ngx-time-picker.component.js +74 -0
  202. package/esm5/components/ngx-time-picker/ngx-time-picker.module.js +20 -0
  203. package/esm5/components/remote-select/remote-select.component.js +165 -0
  204. package/esm5/components/remote-select/remote-select.module.js +22 -0
  205. package/esm5/components/select/diacritics.js +861 -0
  206. package/esm5/components/select/option-list.js +225 -0
  207. package/esm5/components/select/option.js +32 -0
  208. package/esm5/components/select/select-dropdown.component.js +132 -0
  209. package/esm5/components/select/select-dropdown.component.style.js +3 -0
  210. package/esm5/components/select/select.component.js +457 -0
  211. package/esm5/components/select/select.component.style.js +3 -0
  212. package/esm5/components/select/select.module.js +20 -0
  213. package/esm5/encounter-viewer/display-controls/file-preview.component.js +111 -0
  214. package/esm5/encounter-viewer/display-controls/question-control.component.js +106 -0
  215. package/esm5/encounter-viewer/display-controls/remote-answer.component.js +88 -0
  216. package/esm5/encounter-viewer/encounter-container/encounter-container.component.js +47 -0
  217. package/esm5/encounter-viewer/encounter-pdf-viewer.service.js +523 -0
  218. package/esm5/encounter-viewer/encounter-view/encounter-viewer.component.js +187 -0
  219. package/esm5/encounter-viewer/encounter-viewer.module.js +40 -0
  220. package/esm5/encounter-viewer/encounter-viewer.service.js +167 -0
  221. package/esm5/form-entry/control-alerts/alert-helpers.js +45 -0
  222. package/esm5/form-entry/control-alerts/can-generate-alert.js +2 -0
  223. package/esm5/form-entry/control-calculators/can-calculate.js +2 -0
  224. package/esm5/form-entry/control-hiders-disablers/can-disable.js +2 -0
  225. package/esm5/form-entry/control-hiders-disablers/can-hide.js +2 -0
  226. package/esm5/form-entry/control-hiders-disablers/disabler-helper.js +38 -0
  227. package/esm5/form-entry/control-hiders-disablers/hider-helpers.js +45 -0
  228. package/esm5/form-entry/data-sources/data-sources.js +39 -0
  229. package/esm5/form-entry/data-sources/dummy-data-source.js +107 -0
  230. package/esm5/form-entry/directives/historical-value-directive.js +74 -0
  231. package/esm5/form-entry/error-renderer/error-renderer.component.js +64 -0
  232. package/esm5/form-entry/expression-runner/expression-runner.js +159 -0
  233. package/esm5/form-entry/form-entry.module.js +111 -0
  234. package/esm5/form-entry/form-factory/control-relations.factory.js +245 -0
  235. package/esm5/form-entry/form-factory/form-control.service.js +122 -0
  236. package/esm5/form-entry/form-factory/form-node.js +117 -0
  237. package/esm5/form-entry/form-factory/form.factory.js +138 -0
  238. package/esm5/form-entry/form-factory/form.js +214 -0
  239. package/esm5/form-entry/form-factory/hiders-disablers.factory.js +70 -0
  240. package/esm5/form-entry/form-factory/question.factory.js +980 -0
  241. package/esm5/form-entry/form-factory/show-messages.factory.js +34 -0
  242. package/esm5/form-entry/form-factory/validation.factory.js +191 -0
  243. package/esm5/form-entry/form-renderer/form-renderer.component.css.js +3 -0
  244. package/esm5/form-entry/form-renderer/form-renderer.component.js +219 -0
  245. package/esm5/form-entry/helpers/historical-expression-helper-service.js +43 -0
  246. package/esm5/form-entry/helpers/historical-field-helper-service.js +37 -0
  247. package/esm5/form-entry/helpers/js-expression-helper.js +243 -0
  248. package/esm5/form-entry/question-models/checkbox.model.js +17 -0
  249. package/esm5/form-entry/question-models/conditional-validation.model.js +15 -0
  250. package/esm5/form-entry/question-models/date-question.js +19 -0
  251. package/esm5/form-entry/question-models/date-validation.model.js +16 -0
  252. package/esm5/form-entry/question-models/decimal-point-validation.model.js +22 -0
  253. package/esm5/form-entry/question-models/file-upload-question.js +19 -0
  254. package/esm5/form-entry/question-models/group-question.js +18 -0
  255. package/esm5/form-entry/question-models/interfaces/base-options.js +2 -0
  256. package/esm5/form-entry/question-models/interfaces/checkbox-options.js +2 -0
  257. package/esm5/form-entry/question-models/interfaces/data-source.js +2 -0
  258. package/esm5/form-entry/question-models/interfaces/date-question-options.js +2 -0
  259. package/esm5/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
  260. package/esm5/form-entry/question-models/interfaces/group-question-options.js +2 -0
  261. package/esm5/form-entry/question-models/interfaces/multi-select-options.js +2 -0
  262. package/esm5/form-entry/question-models/interfaces/nested-questions.js +12 -0
  263. package/esm5/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
  264. package/esm5/form-entry/question-models/interfaces/select-option.js +2 -0
  265. package/esm5/form-entry/question-models/interfaces/select-question-options.js +2 -0
  266. package/esm5/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
  267. package/esm5/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
  268. package/esm5/form-entry/question-models/interfaces/text-question-options.js +2 -0
  269. package/esm5/form-entry/question-models/interfaces/time-question-options.js +2 -0
  270. package/esm5/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
  271. package/esm5/form-entry/question-models/js-expression-validation.model.js +14 -0
  272. package/esm5/form-entry/question-models/max-validation.model.js +15 -0
  273. package/esm5/form-entry/question-models/min-validation.model.js +15 -0
  274. package/esm5/form-entry/question-models/models.js +13 -0
  275. package/esm5/form-entry/question-models/multi-select-question.js +17 -0
  276. package/esm5/form-entry/question-models/pair.model.js +10 -0
  277. package/esm5/form-entry/question-models/question-base.js +27 -0
  278. package/esm5/form-entry/question-models/rendering-type.js +10 -0
  279. package/esm5/form-entry/question-models/repeating-question.js +17 -0
  280. package/esm5/form-entry/question-models/select-option.js +10 -0
  281. package/esm5/form-entry/question-models/select-question.js +18 -0
  282. package/esm5/form-entry/question-models/test-order-question.js +21 -0
  283. package/esm5/form-entry/question-models/text-area-input-question.js +19 -0
  284. package/esm5/form-entry/question-models/text-input-question.js +16 -0
  285. package/esm5/form-entry/question-models/time-question.js +16 -0
  286. package/esm5/form-entry/question-models/ui-select-question.js +17 -0
  287. package/esm5/form-entry/question-models/validation.model.js +10 -0
  288. package/esm5/form-entry/services/debug-mode.service.js +26 -0
  289. package/esm5/form-entry/services/form-errors.service.js +21 -0
  290. package/esm5/form-entry/services/form-schema-compiler.service.js +254 -0
  291. package/esm5/form-entry/services/historical-encounter-data.service.js +180 -0
  292. package/esm5/form-entry/utils/messages.js +17 -0
  293. package/esm5/form-entry/validators/conditional-answered.validator.js +50 -0
  294. package/esm5/form-entry/validators/conditional-required.validator.js +44 -0
  295. package/esm5/form-entry/validators/date.validator.js +22 -0
  296. package/esm5/form-entry/validators/future-date-restriction.validator.js +25 -0
  297. package/esm5/form-entry/validators/js-expression.validator.js +30 -0
  298. package/esm5/form-entry/validators/max-date.validator.js +28 -0
  299. package/esm5/form-entry/validators/max.validator.js +22 -0
  300. package/esm5/form-entry/validators/min-date.validator.js +28 -0
  301. package/esm5/form-entry/validators/min.validator.js +22 -0
  302. package/esm5/form-entry/validators/required.validator.js +16 -0
  303. package/esm5/form-entry/validators/validations.js +9 -0
  304. package/esm5/form-entry/value-adapters/encounter.adapter.js +178 -0
  305. package/esm5/form-entry/value-adapters/obs-adapter-helper.js +509 -0
  306. package/esm5/form-entry/value-adapters/obs.adapter.js +737 -0
  307. package/esm5/form-entry/value-adapters/order.adapter.js +227 -0
  308. package/esm5/form-entry/value-adapters/person-attribute.adapter.js +96 -0
  309. package/esm5/form-entry/value-adapters/value.adapter.js +2 -0
  310. package/esm5/public_api.js +52 -0
  311. package/esm5/shared.module.js +20 -0
  312. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js +5093 -6889
  313. package/fesm2015/ampath-kenya-ngx-openmrs-formentry.js.map +1 -1
  314. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js +10737 -0
  315. package/fesm5/ampath-kenya-ngx-openmrs-formentry.js.map +1 -0
  316. package/form-entry/data-sources/data-sources.d.ts +1 -1
  317. package/form-entry/directives/historical-value-directive.d.ts +2 -2
  318. package/form-entry/error-renderer/error-renderer.component.d.ts +1 -1
  319. package/form-entry/expression-runner/expression-runner.d.ts +6 -6
  320. package/form-entry/form-factory/form-control.service.d.ts +3 -3
  321. package/form-entry/form-factory/form-node.d.ts +9 -10
  322. package/form-entry/form-factory/form.d.ts +6 -7
  323. package/form-entry/form-factory/question.factory.d.ts +7 -1
  324. package/form-entry/form-factory/validation.factory.d.ts +10 -10
  325. package/form-entry/form-renderer/form-renderer.component.css.d.ts +1 -1
  326. package/form-entry/form-renderer/form-renderer.component.d.ts +4 -6
  327. package/form-entry/helpers/js-expression-helper.d.ts +1 -1
  328. package/form-entry/question-models/date-question.d.ts +2 -0
  329. package/form-entry/question-models/decimal-point-validation.model.d.ts +10 -0
  330. package/form-entry/question-models/interfaces/base-options.d.ts +1 -0
  331. package/form-entry/question-models/interfaces/time-question-options.d.ts +3 -0
  332. package/form-entry/question-models/question-base.d.ts +4 -0
  333. package/form-entry/question-models/rendering-type.d.ts +1 -1
  334. package/form-entry/question-models/time-question.d.ts +5 -0
  335. package/form-entry/services/form-errors.service.d.ts +2 -1
  336. package/form-entry/services/form-schema-compiler.service.d.ts +16 -16
  337. package/form-entry/services/historical-encounter-data.service.d.ts +3 -3
  338. package/form-entry/utils/messages.d.ts +9 -9
  339. package/form-entry/value-adapters/encounter.adapter.d.ts +2 -2
  340. package/form-entry/value-adapters/order.adapter.d.ts +9 -9
  341. package/form-entry/value-adapters/person-attribute.adapter.d.ts +1 -1
  342. package/package.json +18 -16
  343. package/public_api.d.ts +50 -1
  344. package/components/input/input.directive.d.ts +0 -28
  345. package/components/input/input.module.d.ts +0 -2
  346. package/components/input/label.component.d.ts +0 -87
  347. package/components/input/text-area.directive.d.ts +0 -21
  348. package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +0 -13
  349. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +0 -189
  350. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +0 -15
  351. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +0 -73
  352. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +0 -5
  353. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +0 -7
  354. package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +0 -77
  355. package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +0 -139
  356. package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +0 -109
  357. package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +0 -120
  358. package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +0 -141
  359. package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +0 -90
  360. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +0 -122
  361. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +0 -152
  362. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +0 -51
  363. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +0 -21
  364. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +0 -8
  365. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +0 -157
  366. package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +0 -86
  367. package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +0 -5
  368. package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +0 -7
  369. package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +0 -35
  370. package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +0 -129
  371. package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +0 -93
  372. package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +0 -56
  373. package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +0 -49
  374. package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +0 -5
  375. package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +0 -70
  376. package/components/ngx-pick-datetime/lib/utils/index.d.ts +0 -4
  377. package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +0 -11
  378. package/components/ngx-remote-select/ngx-remote-select.module.d.ts +0 -2
  379. package/components/ngx-tabset/components/tab-set.d.ts +0 -15
  380. package/components/ngx-tabset/components/tab.d.ts +0 -10
  381. package/components/ngx-tabset/directives/hover-class.directive.d.ts +0 -8
  382. package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +0 -11
  383. package/components/number-input/number-input.component.d.ts +0 -148
  384. package/components/number-input/number-input.module.d.ts +0 -2
  385. package/components/select/optgroup.directive.d.ts +0 -3
  386. package/components/select/option.directive.d.ts +0 -3
  387. package/esm2015/components/input/input.directive.js +0 -55
  388. package/esm2015/components/input/input.module.js +0 -29
  389. package/esm2015/components/input/label.component.js +0 -139
  390. package/esm2015/components/input/text-area.directive.js +0 -40
  391. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +0 -52
  392. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +0 -28
  393. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +0 -115
  394. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +0 -7
  395. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +0 -346
  396. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +0 -10
  397. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +0 -30
  398. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +0 -149
  399. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +0 -432
  400. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +0 -353
  401. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +0 -362
  402. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +0 -337
  403. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +0 -252
  404. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +0 -379
  405. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +0 -601
  406. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +0 -60
  407. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +0 -69
  408. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +0 -21
  409. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +0 -515
  410. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +0 -154
  411. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +0 -63
  412. package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +0 -24
  413. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +0 -83
  414. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +0 -293
  415. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +0 -56
  416. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +0 -208
  417. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +0 -113
  418. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +0 -29
  419. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +0 -228
  420. package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +0 -5
  421. package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +0 -26
  422. package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +0 -119
  423. package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +0 -18
  424. package/esm2015/components/ngx-tabset/components/tab-set.js +0 -67
  425. package/esm2015/components/ngx-tabset/components/tab.js +0 -38
  426. package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +0 -26
  427. package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +0 -40
  428. package/esm2015/components/number-input/number-input.component.js +0 -203
  429. package/esm2015/components/number-input/number-input.module.js +0 -15
  430. package/esm2015/components/select/optgroup.directive.js +0 -17
  431. package/esm2015/components/select/option.directive.js +0 -17
  432. package/esm2015/form-entry/directives/collapse-animations.js +0 -11
  433. package/esm2015/form-entry/directives/collapse.directive.js +0 -157
  434. package/esm2015/form-entry/pipes/time-ago.pipe.js +0 -107
  435. package/esm2015/lib/index.js +0 -49
  436. package/form-entry/directives/collapse-animations.d.ts +0 -4
  437. package/form-entry/directives/collapse.directive.d.ts +0 -42
  438. package/form-entry/pipes/time-ago.pipe.d.ts +0 -11
  439. package/lib/index.d.ts +0 -49
  440. package/styles/ngx-formentry.css +0 -317
  441. package/styles/picker.min.css +0 -1
@@ -0,0 +1,523 @@
1
+ import * as tslib_1 from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { ObsValueAdapter } from '../form-entry/value-adapters/obs.adapter';
4
+ import { EncounterViewerService } from './encounter-viewer.service';
5
+ import { DataSources } from '../form-entry/data-sources/data-sources';
6
+ import { combineLatest, BehaviorSubject } from 'rxjs';
7
+ import * as moment_ from 'moment';
8
+ import * as _ from 'lodash';
9
+ import * as pdfMake from 'pdfmake/build/pdfmake.js';
10
+ import 'pdfmake/build/vfs_fonts.js';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "./encounter-viewer.service";
13
+ import * as i2 from "../form-entry/value-adapters/obs.adapter";
14
+ import * as i3 from "../form-entry/data-sources/data-sources";
15
+ var moment = moment_;
16
+ var EncounterPdfViewerService = /** @class */ (function () {
17
+ function EncounterPdfViewerService(encounterViewerService, obsValueAdapter, dataSources) {
18
+ this.encounterViewerService = encounterViewerService;
19
+ this.obsValueAdapter = obsValueAdapter;
20
+ this.dataSources = dataSources;
21
+ this.subscribedAnswers = {
22
+ questions: {
23
+ stack: []
24
+ },
25
+ answers: []
26
+ };
27
+ }
28
+ EncounterPdfViewerService.prototype.getPages = function (pages, form, remoteSelectsOnly, remoteAns) {
29
+ var content = [];
30
+ var remoteQuestions = [];
31
+ try {
32
+ for (var pages_1 = tslib_1.__values(pages), pages_1_1 = pages_1.next(); !pages_1_1.done; pages_1_1 = pages_1.next()) {
33
+ var page = pages_1_1.value;
34
+ if (remoteSelectsOnly) {
35
+ remoteQuestions = remoteQuestions.concat(this.getSections(page.page, form, false, remoteAns));
36
+ }
37
+ else {
38
+ try {
39
+ for (var _a = tslib_1.__values(form.rootNode.question.questions), _b = _a.next(); !_b.done; _b = _a.next()) {
40
+ var question = _b.value;
41
+ if (page.label ===
42
+ form.rootNode.children[question.key].question.label &&
43
+ this.encounterViewerService.questionsAnswered(form.rootNode.children[question.key])) {
44
+ content.push({
45
+ style: 'tableExample',
46
+ table: {
47
+ widths: ['*'],
48
+ headerRows: 1,
49
+ keepWithHeaderRows: 1,
50
+ body: [
51
+ [{ text: page.label, style: 'tableHeader' }],
52
+ [
53
+ {
54
+ style: 'tableExample',
55
+ table: {
56
+ widths: ['*'],
57
+ body: this.getSections(page.page, form, true, remoteAns)
58
+ },
59
+ layout: 'noBorders',
60
+ margin: [5, 0, 0, 0]
61
+ }
62
+ ]
63
+ ]
64
+ },
65
+ layout: {
66
+ hLineWidth: function (i, node) {
67
+ return i === 0 || i === node.table.body.length ? 0.5 : 0.5;
68
+ },
69
+ vLineWidth: function (i, node) {
70
+ return i === 0 || i === node.table.widths.length ? 0.5 : 0.5;
71
+ },
72
+ hLineColor: function (i, node) {
73
+ return i === 0 || i === node.table.body.length
74
+ ? '#ddd'
75
+ : '#ddd';
76
+ },
77
+ vLineColor: function (i, node) {
78
+ return i === 0 || i === node.table.body.length
79
+ ? '#ddd'
80
+ : '#ddd';
81
+ }
82
+ }
83
+ });
84
+ }
85
+ }
86
+ }
87
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
88
+ finally {
89
+ try {
90
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
91
+ }
92
+ finally { if (e_1) throw e_1.error; }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
98
+ finally {
99
+ try {
100
+ if (pages_1_1 && !pages_1_1.done && (_d = pages_1.return)) _d.call(pages_1);
101
+ }
102
+ finally { if (e_2) throw e_2.error; }
103
+ }
104
+ return remoteSelectsOnly ? remoteQuestions : content;
105
+ var e_2, _d, e_1, _c;
106
+ };
107
+ EncounterPdfViewerService.prototype.getSections = function (sections, form, resolve, remoteAns) {
108
+ var _this = this;
109
+ var content = [];
110
+ var answeredSections = [];
111
+ var questions = [];
112
+ sections.map(function (s) {
113
+ if (_this.encounterViewerService.questionsAnswered(s.node)) {
114
+ answeredSections.push(s);
115
+ }
116
+ });
117
+ try {
118
+ for (var answeredSections_1 = tslib_1.__values(answeredSections), answeredSections_1_1 = answeredSections_1.next(); !answeredSections_1_1.done; answeredSections_1_1 = answeredSections_1.next()) {
119
+ var section = answeredSections_1_1.value;
120
+ questions = questions.concat(this.getRemoteSectionData(section.section));
121
+ }
122
+ }
123
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
124
+ finally {
125
+ try {
126
+ if (answeredSections_1_1 && !answeredSections_1_1.done && (_a = answeredSections_1.return)) _a.call(answeredSections_1);
127
+ }
128
+ finally { if (e_3) throw e_3.error; }
129
+ }
130
+ if (resolve && remoteAns) {
131
+ try {
132
+ for (var answeredSections_2 = tslib_1.__values(answeredSections), answeredSections_2_1 = answeredSections_2.next(); !answeredSections_2_1.done; answeredSections_2_1 = answeredSections_2.next()) {
133
+ var section = answeredSections_2_1.value;
134
+ content.push([
135
+ {
136
+ table: {
137
+ widths: ['*'],
138
+ body: [
139
+ [{ text: section.label, style: 'tableSubheader' }],
140
+ [this.getSectionData(section.section, remoteAns, form)]
141
+ ]
142
+ },
143
+ layout: 'noBorders'
144
+ }
145
+ ]);
146
+ }
147
+ }
148
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
149
+ finally {
150
+ try {
151
+ if (answeredSections_2_1 && !answeredSections_2_1.done && (_b = answeredSections_2.return)) _b.call(answeredSections_2);
152
+ }
153
+ finally { if (e_4) throw e_4.error; }
154
+ }
155
+ return content;
156
+ }
157
+ else {
158
+ return questions;
159
+ }
160
+ var e_3, _a, e_4, _b;
161
+ };
162
+ EncounterPdfViewerService.prototype.appendResolvedAnswer = function (resolvedAnswer, questions, node) {
163
+ if (resolvedAnswer) {
164
+ questions.stack.push({
165
+ text: [
166
+ "" + (node ? node.question.label : 'Question label') + (node ? (node.question.label.indexOf(':') > 1 ? '' : ':') : '') + " ",
167
+ { text: "" + resolvedAnswer, bold: true }
168
+ ],
169
+ style: 'answers'
170
+ });
171
+ }
172
+ };
173
+ // get remote selects only
174
+ EncounterPdfViewerService.prototype.getRemoteSectionData = function (section) {
175
+ var questions = [];
176
+ this.subscribedAnswers.questions.stack = [];
177
+ try {
178
+ for (var section_1 = tslib_1.__values(section), section_1_1 = section_1.next(); !section_1_1.done; section_1_1 = section_1.next()) {
179
+ var node = section_1_1.value;
180
+ if (node.question.renderingType === 'remote-select') {
181
+ this.remoteDataSource = this.dataSources.dataSources[node.question.dataSource];
182
+ if (node.control.value !== '') {
183
+ if (this.remoteDataSource) {
184
+ questions.push(this.remoteDataSource.resolveSelectedValue(node.control.value));
185
+ }
186
+ }
187
+ }
188
+ }
189
+ }
190
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
191
+ finally {
192
+ try {
193
+ if (section_1_1 && !section_1_1.done && (_a = section_1.return)) _a.call(section_1);
194
+ }
195
+ finally { if (e_5) throw e_5.error; }
196
+ }
197
+ return questions;
198
+ var e_5, _a;
199
+ };
200
+ // merge remote selects
201
+ EncounterPdfViewerService.prototype.getSectionData = function (section, remoteAns, form) {
202
+ var questions = {
203
+ stack: []
204
+ };
205
+ var resolvedAnswer = '';
206
+ var _loop_1 = function (node) {
207
+ switch (node.question.renderingType) {
208
+ case 'group':
209
+ if (node.groupMembers) {
210
+ questions.stack.push(this_1.getSectionData(node.groupMembers, remoteAns, form));
211
+ }
212
+ break;
213
+ case 'field-set':
214
+ if (node.children) {
215
+ var groupMembers = [];
216
+ var result = Object.keys(node.children).map(function (key) { return node.children[key]; });
217
+ if (result) {
218
+ groupMembers.push(result);
219
+ questions.stack.push(this_1.getSectionData(groupMembers[0], remoteAns, form));
220
+ }
221
+ }
222
+ break;
223
+ case 'repeating':
224
+ if (node.groupMembers) {
225
+ questions.stack.push(this_1.getSectionData(node.groupMembers, remoteAns, form));
226
+ }
227
+ break;
228
+ case 'remote-select':
229
+ this_1.remoteDataSource = this_1.dataSources.dataSources[node.question.dataSource];
230
+ try {
231
+ for (var remoteAns_1 = tslib_1.__values(remoteAns), remoteAns_1_1 = remoteAns_1.next(); !remoteAns_1_1.done; remoteAns_1_1 = remoteAns_1.next()) {
232
+ var ans = remoteAns_1_1.value;
233
+ if (ans.value === node.control.value) {
234
+ this_1.appendResolvedAnswer(ans.label, questions, node);
235
+ }
236
+ }
237
+ }
238
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
239
+ finally {
240
+ try {
241
+ if (remoteAns_1_1 && !remoteAns_1_1.done && (_a = remoteAns_1.return)) _a.call(remoteAns_1);
242
+ }
243
+ finally { if (e_6) throw e_6.error; }
244
+ }
245
+ break;
246
+ default:
247
+ var answer = node.control.value;
248
+ if (answer) {
249
+ resolvedAnswer = this_1.resolveValue(answer, form);
250
+ this_1.appendResolvedAnswer(resolvedAnswer, questions, node);
251
+ }
252
+ }
253
+ var e_6, _a;
254
+ };
255
+ var this_1 = this;
256
+ try {
257
+ for (var section_2 = tslib_1.__values(section), section_2_1 = section_2.next(); !section_2_1.done; section_2_1 = section_2.next()) {
258
+ var node = section_2_1.value;
259
+ _loop_1(node);
260
+ }
261
+ }
262
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
263
+ finally {
264
+ try {
265
+ if (section_2_1 && !section_2_1.done && (_a = section_2.return)) _a.call(section_2);
266
+ }
267
+ finally { if (e_7) throw e_7.error; }
268
+ }
269
+ return questions;
270
+ var e_7, _a;
271
+ };
272
+ EncounterPdfViewerService.prototype.resolveValue = function (answer, form, arrayElement) {
273
+ var _this = this;
274
+ if (answer !== '') {
275
+ if (this.isUuid(answer)) {
276
+ var val = this.encounterViewerService.resolveSelectedValueFromSchema(answer, form.schema);
277
+ if (!arrayElement) {
278
+ if (val) {
279
+ return val.toUpperCase();
280
+ }
281
+ else {
282
+ return answer;
283
+ }
284
+ }
285
+ else {
286
+ return val;
287
+ }
288
+ }
289
+ else if (_.isArray(answer)) {
290
+ var arr_1 = [];
291
+ _.forEach(answer, function (elem) {
292
+ arr_1.push(_this.resolveValue(elem, form, true));
293
+ });
294
+ return arr_1.toString();
295
+ }
296
+ else if (this.isDate(answer)) {
297
+ if (!arrayElement) {
298
+ return this.encounterViewerService.convertTime(answer);
299
+ }
300
+ else {
301
+ return this.encounterViewerService.convertTime(answer);
302
+ }
303
+ }
304
+ else if (typeof answer === 'object') {
305
+ var values = [];
306
+ var result = Object.keys(answer).map(function (key) { return [key, answer[key]]; });
307
+ values.push(result);
308
+ return values;
309
+ }
310
+ else {
311
+ return answer;
312
+ }
313
+ }
314
+ };
315
+ EncounterPdfViewerService.prototype.generatePdfDefinition = function (form) {
316
+ var _this = this;
317
+ var docDefinition$ = new BehaviorSubject({});
318
+ var remoteSelects = this.getPages(this.obsValueAdapter.traverse(form.rootNode), form, true);
319
+ combineLatest(remoteSelects).subscribe(function (remoteAns) {
320
+ if (remoteAns) {
321
+ var docDefinition = {
322
+ pageSize: 'A4',
323
+ content: _this.getPages(_this.obsValueAdapter.traverse(form.rootNode), form, false, remoteAns),
324
+ styles: {
325
+ answers: {
326
+ fontSize: 8
327
+ },
328
+ banner: {
329
+ fontSize: 9,
330
+ bold: true,
331
+ margin: [50, 15, 30, 0]
332
+ },
333
+ bannerItem: {
334
+ margin: [2, 2, 2, 2]
335
+ },
336
+ bannerLabel: {
337
+ color: '#2f4f4f'
338
+ },
339
+ confidential: {
340
+ color: 'red',
341
+ fontSize: 8,
342
+ bold: true,
343
+ margin: [60, 0, 0, 0]
344
+ },
345
+ footer: {
346
+ alignment: 'center',
347
+ fontSize: 8,
348
+ bold: true
349
+ },
350
+ header: {
351
+ fontSize: 9,
352
+ bold: true,
353
+ margin: [5, 5, 5, 5]
354
+ },
355
+ pageNumber: {
356
+ color: '#2f4f4f',
357
+ fontSize: 6
358
+ },
359
+ tableExample: {
360
+ fontSize: 10,
361
+ margin: [5, 0, 0, 5]
362
+ },
363
+ tableHeader: {
364
+ fillColor: '#f5f5f5',
365
+ width: ['100%'],
366
+ borderColor: '#333',
367
+ fontSize: 9,
368
+ bold: true,
369
+ margin: [5, 0, 5, 0]
370
+ },
371
+ tableSubheader: {
372
+ fillColor: '#337ab7',
373
+ width: ['100%'],
374
+ fontSize: 9,
375
+ color: 'white',
376
+ margin: [5, 0, 5, 0]
377
+ },
378
+ timestamp: {
379
+ bold: true,
380
+ color: '#2f4f4f'
381
+ }
382
+ },
383
+ defaultStyle: {
384
+ fontSize: 7
385
+ }
386
+ };
387
+ docDefinition$.next(docDefinition);
388
+ }
389
+ });
390
+ return docDefinition$;
391
+ };
392
+ EncounterPdfViewerService.prototype.displayPdf = function (form) {
393
+ var _this = this;
394
+ var pdf = pdfMake;
395
+ var patient;
396
+ pdf.vfs = pdfMake.vfs;
397
+ if (form.dataSourcesContainer.dataSources._dataSources) {
398
+ patient =
399
+ form.dataSourcesContainer.dataSources._dataSources['patientInfo'];
400
+ }
401
+ this.generatePdfDefinition(form).subscribe(function (docDefinition) {
402
+ if (!_.isEmpty(docDefinition)) {
403
+ if (typeof patient !== 'undefined') {
404
+ var banner = [];
405
+ if (patient.name) {
406
+ banner.push({
407
+ text: [
408
+ { text: 'Name: ', style: 'bannerLabel' },
409
+ { text: "" + _this.titleize(patient.name) }
410
+ ],
411
+ style: 'bannerItem'
412
+ });
413
+ }
414
+ if (patient.nid) {
415
+ banner.push({
416
+ text: [
417
+ { text: 'ID: ', style: 'bannerLabel' },
418
+ { text: "" + patient.nid }
419
+ ],
420
+ style: 'bannerItem'
421
+ });
422
+ }
423
+ if (patient.birthdate) {
424
+ banner.push({
425
+ text: [
426
+ { text: 'DOB: ', style: 'bannerLabel' },
427
+ {
428
+ text: moment(patient.birthdate).format('l') + " (" + patient.age + " yo)"
429
+ }
430
+ ],
431
+ style: 'bannerItem'
432
+ });
433
+ }
434
+ if (patient.mui) {
435
+ banner.push({
436
+ text: [
437
+ { text: 'MUI: ', style: 'bannerLabel' },
438
+ { text: "" + patient.mui }
439
+ ],
440
+ style: 'bannerItem'
441
+ });
442
+ }
443
+ if (patient.mhn) {
444
+ banner.push({
445
+ text: [
446
+ { text: 'MTRH No: ', style: 'bannerLabel' },
447
+ { text: "" + patient.mhn }
448
+ ],
449
+ style: 'bannerItem'
450
+ });
451
+ }
452
+ docDefinition.header = {
453
+ style: 'banner',
454
+ table: {
455
+ body: [banner]
456
+ },
457
+ layout: 'noBorders'
458
+ };
459
+ }
460
+ docDefinition.footer = function (currentPage, pageCount) {
461
+ return {
462
+ style: 'footer',
463
+ widths: ['*', 'auto'],
464
+ table: {
465
+ body: [
466
+ [
467
+ {
468
+ text: 'Note: Confidentiality is one of the core duties of all medical practitioners. ' +
469
+ "Patients' personal health information should be kept private.",
470
+ style: 'confidential'
471
+ },
472
+ ''
473
+ ],
474
+ [
475
+ {
476
+ text: "Generated on " + new Date().toUTCString(),
477
+ style: 'timestamp'
478
+ },
479
+ {
480
+ text: currentPage.toString() + " of " + pageCount,
481
+ style: 'pageNumber'
482
+ }
483
+ ]
484
+ ]
485
+ },
486
+ layout: 'noBorders'
487
+ };
488
+ };
489
+ var win = window.open('', '_blank');
490
+ pdf.createPdf(docDefinition).open({}, win);
491
+ }
492
+ }, function (error) {
493
+ console.log('Error: ', error);
494
+ });
495
+ };
496
+ EncounterPdfViewerService.prototype.isDate = function (val) {
497
+ return moment(val, moment.ISO_8601, true).isValid();
498
+ };
499
+ EncounterPdfViewerService.prototype.isUuid = function (value) {
500
+ return (value.length === 36 &&
501
+ value.indexOf(' ') === -1 &&
502
+ value.indexOf('.') === -1);
503
+ };
504
+ EncounterPdfViewerService.prototype.titleize = function (str) {
505
+ return str.replace(/\w\S*/g, function (s) { return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase(); });
506
+ };
507
+ EncounterPdfViewerService.decorators = [
508
+ { type: Injectable, args: [{
509
+ providedIn: 'root'
510
+ },] },
511
+ ];
512
+ /** @nocollapse */
513
+ EncounterPdfViewerService.ctorParameters = function () { return [
514
+ { type: EncounterViewerService },
515
+ { type: ObsValueAdapter },
516
+ { type: DataSources }
517
+ ]; };
518
+ EncounterPdfViewerService.ngInjectableDef = i0.defineInjectable({ factory: function EncounterPdfViewerService_Factory() { return new EncounterPdfViewerService(i0.inject(i1.EncounterViewerService), i0.inject(i2.ObsValueAdapter), i0.inject(i3.DataSources)); }, token: EncounterPdfViewerService, providedIn: "root" });
519
+ return EncounterPdfViewerService;
520
+ }());
521
+ export { EncounterPdfViewerService };
522
+
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb3VudGVyLXBkZi12aWV3ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhbXBhdGgta2VueWEvbmd4LW9wZW5tcnMtZm9ybWVudHJ5LyIsInNvdXJjZXMiOlsiZW5jb3VudGVyLXZpZXdlci9lbmNvdW50ZXItcGRmLXZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEQsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLDRCQUE0QixDQUFDOzs7OztBQUdwQyxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkI7SUFlRSxtQ0FDVSxzQkFBOEMsRUFDOUMsZUFBZ0MsRUFDaEMsV0FBd0I7UUFGeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFWM0Isc0JBQWlCLEdBQVE7WUFDOUIsU0FBUyxFQUFFO2dCQUNULEtBQUssRUFBRSxFQUFFO2FBQ1Y7WUFDRCxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7SUFNQyxDQUFDO0lBRUosNENBQVEsR0FBUixVQUNFLEtBQVUsRUFDVixJQUFVLEVBQ1YsaUJBQTJCLEVBQzNCLFNBQWU7UUFFZixJQUFNLE9BQU8sR0FB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Q0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsNENBQVEsR0FBUixVQUFTLEdBQUc7UUFDVixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FDaEIsUUFBUSxFQUNSLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFyRCxDQUFxRCxDQUM3RCxDQUFDO0lBQ0osQ0FBQzs7Z0JBamZGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBakJRLHNCQUFzQjtnQkFEdEIsZUFBZTtnQkFFZixXQUFXOzs7b0NBTHBCO0NBcWdCQyxBQWxmRCxJQWtmQztTQS9lWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi9mb3JtLWVudHJ5L2Zvcm0tZmFjdG9yeS9mb3JtJztcbmltcG9ydCB7IE9ic1ZhbHVlQWRhcHRlciB9IGZyb20gJy4uL2Zvcm0tZW50cnkvdmFsdWUtYWRhcHRlcnMvb2JzLmFkYXB0ZXInO1xuaW1wb3J0IHsgRW5jb3VudGVyVmlld2VyU2VydmljZSB9IGZyb20gJy4vZW5jb3VudGVyLXZpZXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTb3VyY2VzIH0gZnJvbSAnLi4vZm9ybS1lbnRyeS9kYXRhLXNvdXJjZXMvZGF0YS1zb3VyY2VzJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi9mb3JtLWVudHJ5L3F1ZXN0aW9uLW1vZGVscy9pbnRlcmZhY2VzL2RhdGEtc291cmNlJztcblxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcblxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgcGRmTWFrZSBmcm9tICdwZGZtYWtlL2J1aWxkL3BkZm1ha2UuanMnO1xuaW1wb3J0ICdwZGZtYWtlL2J1aWxkL3Zmc19mb250cy5qcyc7XG5pbXBvcnQgKiBhcyBwZGZGb250cyBmcm9tICdwZGZtYWtlL2J1aWxkL3Zmc19mb250cyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVuY291bnRlclBkZlZpZXdlclNlcnZpY2Uge1xuICBwcml2YXRlIHJlbW90ZURhdGFTb3VyY2U6IERhdGFTb3VyY2U7XG4gIHB1YmxpYyBlcnJvcjogYm9vbGVhbjtcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbjtcbiAgcHVibGljIHN1YnNjcmliZWRBbnN3ZXJzOiBhbnkgPSB7XG4gICAgcXVlc3Rpb25zOiB7XG4gICAgICBzdGFjazogW11cbiAgICB9LFxuICAgIGFuc3dlcnM6IFtdXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbmNvdW50ZXJWaWV3ZXJTZXJ2aWNlOiBFbmNvdW50ZXJWaWV3ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgb2JzVmFsdWVBZGFwdGVyOiBPYnNWYWx1ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSBkYXRhU291cmNlczogRGF0YVNvdXJjZXNcbiAgKSB7fVxuXG4gIGdldFBhZ2VzKFxuICAgIHBhZ2VzOiBhbnksXG4gICAgZm9ybTogRm9ybSxcbiAgICByZW1vdGVTZWxlY3RzT25seT86IGJvb2xlYW4sXG4gICAgcmVtb3RlQW5zPzogYW55XG4gICk6IGFueVtdIHtcbiAgICBjb25zdCBjb250ZW50ID0gW107XG4gICAgbGV0IHJlbW90ZVF1ZXN0aW9ucyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSB7XG4gICAgICBpZiAocmVtb3RlU2VsZWN0c09ubHkpIHtcbiAgICAgICAgcmVtb3RlUXVlc3Rpb25zID0gcmVtb3RlUXVlc3Rpb25zLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmdldFNlY3Rpb25zKHBhZ2UucGFnZSwgZm9ybSwgZmFsc2UsIHJlbW90ZUFucylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgZm9ybS5yb290Tm9kZS5xdWVzdGlvbi5xdWVzdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYWdlLmxhYmVsID09PVxuICAgICAgICAgICAgICBmb3JtLnJvb3ROb2RlLmNoaWxkcmVuW3F1ZXN0aW9uLmtleV0ucXVlc3Rpb24ubGFiZWwgJiZcbiAgICAgICAgICAgIHRoaXMuZW5jb3VudGVyVmlld2VyU2VydmljZS5xdWVzdGlvbnNBbnN3ZXJlZChcbiAgICAgICAgICAgICAgZm9ybS5yb290Tm9kZS5jaGlsZHJlbltxdWVzdGlvbi5rZXldXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250ZW50LnB1c2goe1xuICAgICAgICAgICAgICBzdHlsZTogJ3RhYmxlRXhhbXBsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiB7XG4gICAgICAgICAgICAgICAgd2lkdGhzOiBbJyonXSxcbiAgICAgICAgICAgICAgICBoZWFkZXJSb3dzOiAxLFxuICAgICAgICAgICAgICAgIGtlZXBXaXRoSGVhZGVyUm93czogMSxcbiAgICAgICAgICAgICAgICBib2R5OiBbXG4gICAgICAgICAgICAgICAgICBbeyB0ZXh0OiBwYWdlLmxhYmVsLCBzdHlsZTogJ3RhYmxlSGVhZGVyJyB9XSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiAndGFibGVFeGFtcGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICB0YWJsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzOiBbJyonXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuZ2V0U2VjdGlvbnMocGFnZS5wYWdlLCBmb3JtLCB0cnVlLCByZW1vdGVBbnMpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ6ICdub0JvcmRlcnMnLFxuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogWzUsIDAsIDAsIDBdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIGhMaW5lV2lkdGg6IGZ1bmN0aW9uIChpLCBub2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gMCB8fCBpID09PSBub2RlLnRhYmxlLmJvZHkubGVuZ3RoID8gMC41IDogMC41O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdkxpbmVXaWR0aDogZnVuY3Rpb24gKGksIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpID09PSAwIHx8IGkgPT09IG5vZGUudGFibGUud2lkdGhzLmxlbmd0aCA/IDAuNSA6IDAuNTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhMaW5lQ29sb3I6IGZ1bmN0aW9uIChpLCBub2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gMCB8fCBpID09PSBub2RlLnRhYmxlLmJvZHkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gJyNkZGQnXG4gICAgICAgICAgICAgICAgICAgIDogJyNkZGQnO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdkxpbmVDb2xvcjogZnVuY3Rpb24gKGksIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpID09PSAwIHx8IGkgPT09IG5vZGUudGFibGUuYm9keS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyAnI2RkZCdcbiAgICAgICAgICAgICAgICAgICAgOiAnI2RkZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlbW90ZVNlbGVjdHNPbmx5ID8gcmVtb3RlUXVlc3Rpb25zIDogY29udGVudDtcbiAgfVxuXG4gIGdldFNlY3Rpb25zKHNlY3Rpb25zOiBhbnksIGZvcm06IEZvcm0sIHJlc29sdmU6IGFueSwgcmVtb3RlQW5zOiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgY29udGVudCA9IFtdO1xuICAgIGNvbnN0IGFuc3dlcmVkU2VjdGlvbnMgPSBbXTtcbiAgICBsZXQgcXVlc3Rpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XG5cbiAgICBzZWN0aW9ucy5tYXAoKHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmVuY291bnRlclZpZXdlclNlcnZpY2UucXVlc3Rpb25zQW5zd2VyZWQocy5ub2RlKSkge1xuICAgICAgICBhbnN3ZXJlZFNlY3Rpb25zLnB1c2gocyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgYW5zd2VyZWRTZWN0aW9ucykge1xuICAgICAgcXVlc3Rpb25zID0gcXVlc3Rpb25zLmNvbmNhdCh0aGlzLmdldFJlbW90ZVNlY3Rpb25EYXRhKHNlY3Rpb24uc2VjdGlvbikpO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlICYmIHJlbW90ZUFucykge1xuICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGFuc3dlcmVkU2VjdGlvbnMpIHtcbiAgICAgICAgY29udGVudC5wdXNoKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0YWJsZToge1xuICAgICAgICAgICAgICB3aWR0aHM6IFsnKiddLFxuICAgICAgICAgICAgICBib2R5OiBbXG4gICAgICAgICAgICAgICAgW3sgdGV4dDogc2VjdGlvbi5sYWJlbCwgc3R5bGU6ICd0YWJsZVN1YmhlYWRlcicgfV0sXG4gICAgICAgICAgICAgICAgW3RoaXMuZ2V0U2VjdGlvbkRhdGEoc2VjdGlvbi5zZWN0aW9uLCByZW1vdGVBbnMsIGZvcm0pXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGF5b3V0OiAnbm9Cb3JkZXJzJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc29sdmVkQW5zd2VyKFxuICAgIHJlc29sdmVkQW5zd2VyOiBhbnksXG4gICAgcXVlc3Rpb25zOiBhbnksXG4gICAgbm9kZT86IGFueVxuICApIHtcbiAgICBpZiAocmVzb2x2ZWRBbnN3ZXIpIHtcbiAgICAgIHF1ZXN0aW9ucy5zdGFjay5wdXNoKHtcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke25vZGUgPyBub2RlLnF1ZXN0aW9uLmxhYmVsIDogJ1F1ZXN0aW9uIGxhYmVsJ30ke1xuICAgICAgICAgICAgbm9kZSA/IChub2RlLnF1ZXN0aW9uLmxhYmVsLmluZGV4T2YoJzonKSA+IDEgPyAnJyA6ICc6JykgOiAnJ1xuICAgICAgICAgIH0gYCxcbiAgICAgICAgICB7IHRleHQ6IGAke3Jlc29sdmVkQW5zd2VyfWAsIGJvbGQ6IHRydWUgfVxuICAgICAgICBdLFxuICAgICAgICBzdHlsZTogJ2Fuc3dlcnMnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBnZXQgcmVtb3RlIHNlbGVjdHMgb25seVxuICBnZXRSZW1vdGVTZWN0aW9uRGF0YShzZWN0aW9uOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHF1ZXN0aW9uczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IFtdO1xuICAgIHRoaXMuc3Vic2NyaWJlZEFuc3dlcnMucXVlc3Rpb25zLnN0YWNrID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygc2VjdGlvbikge1xuICAgICAgaWYgKG5vZGUucXVlc3Rpb24ucmVuZGVyaW5nVHlwZSA9PT0gJ3JlbW90ZS1zZWxlY3QnKSB7XG4gICAgICAgIHRoaXMucmVtb3RlRGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZXMuZGF0YVNvdXJjZXNbXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbi5kYXRhU291cmNlXG4gICAgICAgIF07XG4gICAgICAgIGlmIChub2RlLmNvbnRyb2wudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVtb3RlRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgIHRoaXMucmVtb3RlRGF0YVNvdXJjZS5yZXNvbHZlU2VsZWN0ZWRWYWx1ZShub2RlLmNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG5cbiAgLy8gbWVyZ2UgcmVtb3RlIHNlbGVjdHNcbiAgZ2V0U2VjdGlvbkRhdGEoc2VjdGlvbjogYW55LCByZW1vdGVBbnM6IGFueVtdLCBmb3JtOiBGb3JtKTogYW55IHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSB7XG4gICAgICBzdGFjazogW11cbiAgICB9O1xuXG4gICAgbGV0IHJlc29sdmVkQW5zd2VyID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygc2VjdGlvbikge1xuICAgICAgc3dpdGNoIChub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgIGlmIChub2RlLmdyb3VwTWVtYmVycykge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnN0YWNrLnB1c2goXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U2VjdGlvbkRhdGEobm9kZS5ncm91cE1lbWJlcnMsIHJlbW90ZUFucywgZm9ybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2ZpZWxkLXNldCc6XG4gICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTWVtYmVycyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMobm9kZS5jaGlsZHJlbikubWFwKFxuICAgICAgICAgICAgICAoa2V5KSA9PiBub2RlLmNoaWxkcmVuW2tleV1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgZ3JvdXBNZW1iZXJzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgcXVlc3Rpb25zLnN0YWNrLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWN0aW9uRGF0YShncm91cE1lbWJlcnNbMF0sIHJlbW90ZUFucywgZm9ybSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVwZWF0aW5nJzpcbiAgICAgICAgICBpZiAobm9kZS5ncm91cE1lbWJlcnMpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9ucy5zdGFjay5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLmdldFNlY3Rpb25EYXRhKG5vZGUuZ3JvdXBNZW1iZXJzLCByZW1vdGVBbnMsIGZvcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyZW1vdGUtc2VsZWN0JzpcbiAgICAgICAgICB0aGlzLnJlbW90ZURhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2VzLmRhdGFTb3VyY2VzW1xuICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5kYXRhU291cmNlXG4gICAgICAgICAgXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFucyBvZiByZW1vdGVBbnMpIHtcbiAgICAgICAgICAgIGlmIChhbnMudmFsdWUgPT09IG5vZGUuY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZFJlc29sdmVkQW5zd2VyKGFucy5sYWJlbCwgcXVlc3Rpb25zLCBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBub2RlLmNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgaWYgKGFuc3dlcikge1xuICAgICAgICAgICAgcmVzb2x2ZWRBbnN3ZXIgPSB0aGlzLnJlc29sdmVWYWx1ZShhbnN3ZXIsIGZvcm0pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRSZXNvbHZlZEFuc3dlcihyZXNvbHZlZEFuc3dlciwgcXVlc3Rpb25zLCBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxuXG4gIHJlc29sdmVWYWx1ZShhbnN3ZXI6IGFueSwgZm9ybTogRm9ybSwgYXJyYXlFbGVtZW50PzogYm9vbGVhbik6IGFueSB7XG4gICAgaWYgKGFuc3dlciAhPT0gJycpIHtcbiAgICAgIGlmICh0aGlzLmlzVXVpZChhbnN3ZXIpKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZW5jb3VudGVyVmlld2VyU2VydmljZS5yZXNvbHZlU2VsZWN0ZWRWYWx1ZUZyb21TY2hlbWEoXG4gICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgIGZvcm0uc2NoZW1hXG4gICAgICAgICk7XG4gICAgICAgIGlmICghYXJyYXlFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYW5zd2VyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNBcnJheShhbnN3ZXIpKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBfLmZvckVhY2goYW5zd2VyLCAoZWxlbSkgPT4ge1xuICAgICAgICAgIGFyci5wdXNoKHRoaXMucmVzb2x2ZVZhbHVlKGVsZW0sIGZvcm0sIHRydWUpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnIudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0RhdGUoYW5zd2VyKSkge1xuICAgICAgICBpZiAoIWFycmF5RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVuY291bnRlclZpZXdlclNlcnZpY2UuY29udmVydFRpbWUoYW5zd2VyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbmNvdW50ZXJWaWV3ZXJTZXJ2aWNlLmNvbnZlcnRUaW1lKGFuc3dlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFuc3dlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5rZXlzKGFuc3dlcikubWFwKChrZXkpID0+IFtrZXksIGFuc3dlcltrZXldXSk7XG5cbiAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhbnN3ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVQZGZEZWZpbml0aW9uKGZvcm06IEZvcm0pOiBhbnkge1xuICAgIGNvbnN0IGRvY0RlZmluaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcbiAgICBjb25zdCByZW1vdGVTZWxlY3RzID0gdGhpcy5nZXRQYWdlcyhcbiAgICAgIHRoaXMub2JzVmFsdWVBZGFwdGVyLnRyYXZlcnNlKGZvcm0ucm9vdE5vZGUpLFxuICAgICAgZm9ybSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChyZW1vdGVTZWxlY3RzKS5zdWJzY3JpYmUoKHJlbW90ZUFucykgPT4ge1xuICAgICAgaWYgKHJlbW90ZUFucykge1xuICAgICAgICBjb25zdCBkb2NEZWZpbml0aW9uID0ge1xuICAgICAgICAgIHBhZ2VTaXplOiAnQTQnLFxuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0UGFnZXMoXG4gICAgICAgICAgICB0aGlzLm9ic1ZhbHVlQWRhcHRlci50cmF2ZXJzZShmb3JtLnJvb3ROb2RlKSxcbiAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIHJlbW90ZUFuc1xuICAgICAgICAgICksXG4gICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICBhbnN3ZXJzOiB7XG4gICAgICAgICAgICAgIGZvbnRTaXplOiA4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmFubmVyOiB7XG4gICAgICAgICAgICAgIGZvbnRTaXplOiA5LFxuICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICBtYXJnaW46IFs1MCwgMTUsIDMwLCAwXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJhbm5lckl0ZW06IHtcbiAgICAgICAgICAgICAgbWFyZ2luOiBbMiwgMiwgMiwgMl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiYW5uZXJMYWJlbDoge1xuICAgICAgICAgICAgICBjb2xvcjogJyMyZjRmNGYnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZmlkZW50aWFsOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiAncmVkJyxcbiAgICAgICAgICAgICAgZm9udFNpemU6IDgsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIG1hcmdpbjogWzYwLCAwLCAwLCAwXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvb3Rlcjoge1xuICAgICAgICAgICAgICBhbGlnbm1lbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBmb250U2l6ZTogOCxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcjoge1xuICAgICAgICAgICAgICBmb250U2l6ZTogOSxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWFyZ2luOiBbNSwgNSwgNSwgNV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYWdlTnVtYmVyOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiAnIzJmNGY0ZicsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiA2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGVFeGFtcGxlOiB7XG4gICAgICAgICAgICAgIGZvbnRTaXplOiAxMCxcbiAgICAgICAgICAgICAgbWFyZ2luOiBbNSwgMCwgMCwgNV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWJsZUhlYWRlcjoge1xuICAgICAgICAgICAgICBmaWxsQ29sb3I6ICcjZjVmNWY1JyxcbiAgICAgICAgICAgICAgd2lkdGg6IFsnMTAwJSddLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyMzMzMnLFxuICAgICAgICAgICAgICBmb250U2l6ZTogOSxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWFyZ2luOiBbNSwgMCwgNSwgMF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWJsZVN1YmhlYWRlcjoge1xuICAgICAgICAgICAgICBmaWxsQ29sb3I6ICcjMzM3YWI3JyxcbiAgICAgICAgICAgICAgd2lkdGg6IFsnMTAwJSddLFxuICAgICAgICAgICAgICBmb250U2l6ZTogOSxcbiAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIG1hcmdpbjogWzUsIDAsIDUsIDBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGltZXN0YW1wOiB7XG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbG9yOiAnIzJmNGY0ZidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlZmF1bHRTdHlsZToge1xuICAgICAgICAgICAgZm9udFNpemU6IDdcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGRvY0RlZmluaXRpb24kLm5leHQoZG9jRGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZG9jRGVmaW5pdGlvbiQ7XG4gIH1cblxuICBkaXNwbGF5UGRmKGZvcm0pIHtcbiAgICBjb25zdCBwZGYgPSBwZGZNYWtlO1xuICAgIGxldCBwYXRpZW50O1xuICAgIHBkZi52ZnMgPSBwZGZNYWtlLnZmcztcblxuICAgIGlmIChmb3JtLmRhdGFTb3VyY2VzQ29udGFpbmVyLmRhdGFTb3VyY2VzLl9kYXRhU291cmNlcykge1xuICAgICAgcGF0aWVudCA9XG4gICAgICAgIGZvcm0uZGF0YVNvdXJjZXNDb250YWluZXIuZGF0YVNvdXJjZXMuX2RhdGFTb3VyY2VzWydwYXRpZW50SW5mbyddO1xuICAgIH1cblxuICAgIHRoaXMuZ2VuZXJhdGVQZGZEZWZpbml0aW9uKGZvcm0pLnN1YnNjcmliZShcbiAgICAgIChkb2NEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgIGlmICghXy5pc0VtcHR5KGRvY0RlZmluaXRpb24pKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXRpZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgYmFubmVyID0gW107XG5cbiAgICAgICAgICAgIGlmIChwYXRpZW50Lm5hbWUpIHtcbiAgICAgICAgICAgICAgYmFubmVyLnB1c2goe1xuICAgICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICAgIHsgdGV4dDogJ05hbWU6ICcsIHN0eWxlOiAnYmFubmVyTGFiZWwnIH0sXG4gICAgICAgICAgICAgICAgICB7IHRleHQ6IGAke3RoaXMudGl0bGVpemUocGF0aWVudC5uYW1lKX1gIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0eWxlOiAnYmFubmVySXRlbSdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXRpZW50Lm5pZCkge1xuICAgICAgICAgICAgICBiYW5uZXIucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAnSUQ6ICcsIHN0eWxlOiAnYmFubmVyTGFiZWwnIH0sXG4gICAgICAgICAgICAgICAgICB7IHRleHQ6IGAke3BhdGllbnQubmlkfWAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdiYW5uZXJJdGVtJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGllbnQuYmlydGhkYXRlKSB7XG4gICAgICAgICAgICAgIGJhbm5lci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgICB7IHRleHQ6ICdET0I6ICcsIHN0eWxlOiAnYmFubmVyTGFiZWwnIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGAke21vbWVudChwYXRpZW50LmJpcnRoZGF0ZSkuZm9ybWF0KCdsJyl9ICgke1xuICAgICAgICAgICAgICAgICAgICAgIHBhdGllbnQuYWdlXG4gICAgICAgICAgICAgICAgICAgIH0geW8pYFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdiYW5uZXJJdGVtJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGllbnQubXVpKSB7XG4gICAgICAgICAgICAgIGJhbm5lci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgICB7IHRleHQ6ICdNVUk6ICcsIHN0eWxlOiAnYmFubmVyTGFiZWwnIH0sXG4gICAgICAgICAgICAgICAgICB7IHRleHQ6IGAke3BhdGllbnQubXVpfWAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdiYW5uZXJJdGVtJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGllbnQubWhuKSB7XG4gICAgICAgICAgICAgIGJhbm5lci5wdXNoKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgICB7IHRleHQ6ICdNVFJIIE5vOiAnLCBzdHlsZTogJ2Jhbm5lckxhYmVsJyB9LFxuICAgICAgICAgICAgICAgICAgeyB0ZXh0OiBgJHtwYXRpZW50Lm1obn1gIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0eWxlOiAnYmFubmVySXRlbSdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY0RlZmluaXRpb24uaGVhZGVyID0ge1xuICAgICAgICAgICAgICBzdHlsZTogJ2Jhbm5lcicsXG4gICAgICAgICAgICAgIHRhYmxlOiB7XG4gICAgICAgICAgICAgICAgYm9keTogW2Jhbm5lcl1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGF5b3V0OiAnbm9Cb3JkZXJzJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2NEZWZpbml0aW9uLmZvb3RlciA9IChjdXJyZW50UGFnZSwgcGFnZUNvdW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdHlsZTogJ2Zvb3RlcicsXG4gICAgICAgICAgICAgIHdpZHRoczogWycqJywgJ2F1dG8nXSxcbiAgICAgICAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgICAgICBib2R5OiBbXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGU6IENvbmZpZGVudGlhbGl0eSBpcyBvbmUgb2YgdGhlIGNvcmUgZHV0aWVzIG9mIGFsbCBtZWRpY2FsIHByYWN0aXRpb25lcnMuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJQYXRpZW50cycgcGVyc29uYWwgaGVhbHRoIGluZm9ybWF0aW9uIHNob3VsZCBiZSBrZXB0IHByaXZhdGUuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICdjb25maWRlbnRpYWwnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogYEdlbmVyYXRlZCBvbiAke25ldyBEYXRlKCkudG9VVENTdHJpbmcoKX1gLFxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiAndGltZXN0YW1wJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogYCR7Y3VycmVudFBhZ2UudG9TdHJpbmcoKX0gb2YgJHtwYWdlQ291bnR9YCxcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogJ3BhZ2VOdW1iZXInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxheW91dDogJ25vQm9yZGVycydcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKCcnLCAnX2JsYW5rJyk7XG4gICAgICAgICAgcGRmLmNyZWF0ZVBkZihkb2NEZWZpbml0aW9uKS5vcGVuKHt9LCB3aW4pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvcjogJywgZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBpc0RhdGUodmFsOiBhbnkpIHtcbiAgICByZXR1cm4gbW9tZW50KHZhbCwgbW9tZW50LklTT184NjAxLCB0cnVlKS5pc1ZhbGlkKCk7XG4gIH1cblxuICBpc1V1aWQodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZS5sZW5ndGggPT09IDM2ICYmXG4gICAgICB2YWx1ZS5pbmRleE9mKCcgJykgPT09IC0xICYmXG4gICAgICB2YWx1ZS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIHRpdGxlaXplKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShcbiAgICAgIC9cXHdcXFMqL2csXG4gICAgICAocykgPT4gcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG59XG4iXX0=