@wavemaker/app-ng-runtime 11.14.3-rc.6401 → 11.14.4-rc.647538

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 (409) hide show
  1. package/components/advanced/carousel/bundles/index.umd.js +1 -15
  2. package/components/advanced/carousel/carousel.directive.d.ts +0 -1
  3. package/components/advanced/carousel/esm2022/carousel.directive.mjs +2 -16
  4. package/components/advanced/carousel/fesm2022/index.mjs +1 -15
  5. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  6. package/components/advanced/login/bundles/index.umd.js +3 -24
  7. package/components/advanced/login/esm2022/login.component.mjs +4 -25
  8. package/components/advanced/login/fesm2022/index.mjs +3 -24
  9. package/components/advanced/login/fesm2022/index.mjs.map +1 -1
  10. package/components/advanced/login/login.component.d.ts +2 -5
  11. package/components/base/bundles/index.umd.js +28 -323
  12. package/components/base/directives/show-in-device.directive.d.ts +1 -2
  13. package/components/base/esm2022/directives/show-in-device.directive.mjs +4 -22
  14. package/components/base/esm2022/pipes/custom-pipes.mjs +1 -1
  15. package/components/base/esm2022/utils/widget-utils.mjs +3 -3
  16. package/components/base/esm2022/widgets/common/base/base-container.component.mjs +1 -27
  17. package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +1 -18
  18. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -68
  19. package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +1 -9
  20. package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +11 -44
  21. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +1 -20
  22. package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +1 -26
  23. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +4 -44
  24. package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +1 -16
  25. package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +1 -22
  26. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -7
  27. package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +3 -5
  28. package/components/base/esm2022/widgets/framework/widget-registry.mjs +3 -6
  29. package/components/base/fesm2022/index.mjs +26 -319
  30. package/components/base/fesm2022/index.mjs.map +1 -1
  31. package/components/base/widgets/common/base/base-container.component.d.ts +2 -3
  32. package/components/base/widgets/common/base/base-field-validations.d.ts +0 -1
  33. package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +2 -3
  34. package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +2 -6
  35. package/components/base/widgets/common/base/partial-container.directive.d.ts +2 -3
  36. package/components/base/widgets/common/item-template/item-template.directive.d.ts +2 -3
  37. package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
  38. package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +2 -3
  39. package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +2 -3
  40. package/components/basic/anchor/bundles/index.umd.js +1 -13
  41. package/components/basic/anchor/esm2022/anchor.component.mjs +2 -14
  42. package/components/basic/anchor/fesm2022/index.mjs +1 -13
  43. package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
  44. package/components/basic/html/bundles/index.umd.js +1 -13
  45. package/components/basic/html/esm2022/html.directive.mjs +2 -14
  46. package/components/basic/html/fesm2022/index.mjs +1 -13
  47. package/components/basic/html/fesm2022/index.mjs.map +1 -1
  48. package/components/basic/label/bundles/index.umd.js +1 -17
  49. package/components/basic/label/esm2022/label.directive.mjs +2 -18
  50. package/components/basic/label/fesm2022/index.mjs +1 -17
  51. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  52. package/components/basic/label/label.directive.d.ts +2 -3
  53. package/components/basic/progress/progress-circle/bundles/index.umd.js +0 -10
  54. package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +1 -11
  55. package/components/basic/progress/progress-circle/fesm2022/index.mjs +0 -10
  56. package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
  57. package/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -3
  58. package/components/basic/search/bundles/index.umd.js +1 -27
  59. package/components/basic/search/esm2022/scrollable.directive.mjs +2 -11
  60. package/components/basic/search/esm2022/search.component.mjs +1 -18
  61. package/components/basic/search/fesm2022/index.mjs +1 -27
  62. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  63. package/components/basic/search/scrollable.directive.d.ts +2 -4
  64. package/components/basic/search/search.component.d.ts +2 -3
  65. package/components/basic/spinner/bundles/index.umd.js +1 -9
  66. package/components/basic/spinner/esm2022/spinner.component.mjs +2 -10
  67. package/components/basic/spinner/fesm2022/index.mjs +1 -9
  68. package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
  69. package/components/basic/spinner/spinner.component.d.ts +2 -4
  70. package/components/chart/bundles/index.umd.js +3 -21
  71. package/components/chart/esm2022/chart.component.mjs +4 -22
  72. package/components/chart/fesm2022/index.mjs +3 -21
  73. package/components/chart/fesm2022/index.mjs.map +1 -1
  74. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -3
  75. package/components/containers/accordion/accordion.directive.d.ts +2 -5
  76. package/components/containers/accordion/bundles/index.umd.js +2 -49
  77. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +1 -10
  78. package/components/containers/accordion/esm2022/accordion.directive.mjs +3 -41
  79. package/components/containers/accordion/fesm2022/index.mjs +2 -49
  80. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  81. package/components/containers/panel/bundles/index.umd.js +0 -13
  82. package/components/containers/panel/esm2022/panel.component.mjs +1 -14
  83. package/components/containers/panel/fesm2022/index.mjs +0 -13
  84. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  85. package/components/containers/panel/panel.component.d.ts +2 -3
  86. package/components/containers/tabs/bundles/index.umd.js +2 -54
  87. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +1 -10
  88. package/components/containers/tabs/esm2022/tabs.component.mjs +3 -46
  89. package/components/containers/tabs/fesm2022/index.mjs +2 -54
  90. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  91. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -3
  92. package/components/containers/tabs/tabs.component.d.ts +2 -5
  93. package/components/containers/wizard/bundles/index.umd.js +3 -47
  94. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +3 -16
  95. package/components/containers/wizard/esm2022/wizard.component.mjs +2 -33
  96. package/components/containers/wizard/fesm2022/index.mjs +3 -47
  97. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  98. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +2 -3
  99. package/components/containers/wizard/wizard.component.d.ts +2 -4
  100. package/components/data/card/bundles/index.umd.js +1 -17
  101. package/components/data/card/card-content/card-content.component.d.ts +2 -3
  102. package/components/data/card/card.component.d.ts +2 -4
  103. package/components/data/card/esm2022/card-content/card-content.component.mjs +1 -6
  104. package/components/data/card/esm2022/card.component.mjs +2 -13
  105. package/components/data/card/fesm2022/index.mjs +1 -17
  106. package/components/data/card/fesm2022/index.mjs.map +1 -1
  107. package/components/data/form/bundles/index.umd.js +0 -92
  108. package/components/data/form/esm2022/form-action/form-action.directive.mjs +1 -7
  109. package/components/data/form/esm2022/form-field/form-field.directive.mjs +1 -28
  110. package/components/data/form/esm2022/form-widget.directive.mjs +1 -8
  111. package/components/data/form/esm2022/form.component.mjs +1 -27
  112. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +1 -7
  113. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +1 -12
  114. package/components/data/form/esm2022/live-form/live-form.directive.mjs +1 -10
  115. package/components/data/form/fesm2022/index.mjs +0 -92
  116. package/components/data/form/fesm2022/index.mjs.map +1 -1
  117. package/components/data/form/form-action/form-action.directive.d.ts +2 -3
  118. package/components/data/form/form-field/form-field.directive.d.ts +2 -3
  119. package/components/data/form/form-widget.directive.d.ts +2 -3
  120. package/components/data/form/live-actions/live-actions.directive.d.ts +1 -3
  121. package/components/data/form/live-filter/live-filter.directive.d.ts +1 -3
  122. package/components/data/form/live-form/live-form.directive.d.ts +1 -3
  123. package/components/data/list/bundles/index.umd.js +17 -180
  124. package/components/data/list/esm2022/list-item.directive.mjs +11 -95
  125. package/components/data/list/esm2022/list.component.mjs +8 -87
  126. package/components/data/list/fesm2022/index.mjs +17 -180
  127. package/components/data/list/fesm2022/index.mjs.map +1 -1
  128. package/components/data/list/list-item.directive.d.ts +2 -7
  129. package/components/data/list/list.component.d.ts +0 -3
  130. package/components/data/live-table/bundles/index.umd.js +1 -13
  131. package/components/data/live-table/esm2022/live-table.component.mjs +2 -14
  132. package/components/data/live-table/fesm2022/index.mjs +1 -13
  133. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  134. package/components/data/live-table/live-table.component.d.ts +2 -4
  135. package/components/data/pagination/bundles/index.umd.js +4 -57
  136. package/components/data/pagination/esm2022/pagination.component.mjs +5 -58
  137. package/components/data/pagination/fesm2022/index.mjs +4 -57
  138. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  139. package/components/data/pagination/pagination.component.d.ts +2 -4
  140. package/components/data/table/bundles/index.umd.js +12 -311
  141. package/components/data/table/esm2022/table-action/table-action.directive.mjs +1 -8
  142. package/components/data/table/esm2022/table-column/table-column.directive.mjs +3 -107
  143. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +1 -9
  144. package/components/data/table/esm2022/table-cud.directive.mjs +2 -8
  145. package/components/data/table/esm2022/table-filter.directive.mjs +2 -12
  146. package/components/data/table/esm2022/table-row/table-row.directive.mjs +1 -8
  147. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +1 -8
  148. package/components/data/table/esm2022/table.component.mjs +9 -159
  149. package/components/data/table/fesm2022/index.mjs +12 -311
  150. package/components/data/table/fesm2022/index.mjs.map +1 -1
  151. package/components/data/table/table-action/table-action.directive.d.ts +2 -3
  152. package/components/data/table/table-column/table-column.directive.d.ts +2 -3
  153. package/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -3
  154. package/components/data/table/table-cud.directive.d.ts +1 -3
  155. package/components/data/table/table-filter.directive.d.ts +1 -3
  156. package/components/data/table/table-row/table-row.directive.d.ts +2 -3
  157. package/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -3
  158. package/components/data/table/table.component.d.ts +2 -2
  159. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -3
  160. package/components/dialogs/alert-dialog/bundles/index.umd.js +0 -5
  161. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +1 -6
  162. package/components/dialogs/alert-dialog/fesm2022/index.mjs +0 -5
  163. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  164. package/components/dialogs/confirm-dialog/bundles/index.umd.js +0 -5
  165. package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -3
  166. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +1 -6
  167. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +0 -5
  168. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  169. package/components/dialogs/default/bundles/index.umd.js +2 -15
  170. package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +2 -4
  171. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +3 -16
  172. package/components/dialogs/default/fesm2022/index.mjs +2 -15
  173. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  174. package/components/dialogs/design-dialog/bundles/index.umd.js +0 -7
  175. package/components/dialogs/design-dialog/dialog.component.d.ts +2 -3
  176. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +1 -8
  177. package/components/dialogs/design-dialog/fesm2022/index.mjs +0 -7
  178. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  179. package/components/dialogs/iframe-dialog/bundles/index.umd.js +0 -5
  180. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +1 -6
  181. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +0 -5
  182. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  183. package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -3
  184. package/components/dialogs/partial-dialog/bundles/index.umd.js +3 -23
  185. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +4 -24
  186. package/components/dialogs/partial-dialog/fesm2022/index.mjs +3 -23
  187. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  188. package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +2 -4
  189. package/components/input/base-form/base-form.component.d.ts +2 -4
  190. package/components/input/base-form/bundles/index.umd.js +2 -16
  191. package/components/input/base-form/esm2022/base-form.component.mjs +3 -17
  192. package/components/input/base-form/fesm2022/index.mjs +2 -16
  193. package/components/input/base-form/fesm2022/index.mjs.map +1 -1
  194. package/components/input/base-form-custom/base-form-custom.component.d.ts +2 -3
  195. package/components/input/base-form-custom/bundles/index.umd.js +2 -13
  196. package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +3 -14
  197. package/components/input/base-form-custom/fesm2022/index.mjs +2 -13
  198. package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
  199. package/components/input/checkbox/bundles/index.umd.js +0 -7
  200. package/components/input/checkbox/checkbox.component.d.ts +2 -3
  201. package/components/input/checkbox/esm2022/checkbox.component.mjs +1 -8
  202. package/components/input/checkbox/fesm2022/index.mjs +0 -7
  203. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  204. package/components/input/checkboxset/bundles/index.umd.js +2 -18
  205. package/components/input/checkboxset/checkboxset.component.d.ts +2 -4
  206. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +3 -19
  207. package/components/input/checkboxset/fesm2022/index.mjs +2 -18
  208. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  209. package/components/input/chips/bundles/index.umd.js +5 -45
  210. package/components/input/chips/chips.component.d.ts +2 -3
  211. package/components/input/chips/esm2022/chips.component.mjs +6 -46
  212. package/components/input/chips/fesm2022/index.mjs +5 -45
  213. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  214. package/components/input/color-picker/bundles/index.umd.js +0 -8
  215. package/components/input/color-picker/color-picker.component.d.ts +2 -3
  216. package/components/input/color-picker/esm2022/color-picker.component.mjs +1 -9
  217. package/components/input/color-picker/fesm2022/index.mjs +0 -8
  218. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  219. package/components/input/composite/bundles/index.umd.js +1 -10
  220. package/components/input/composite/composite.directive.d.ts +2 -3
  221. package/components/input/composite/esm2022/composite.directive.mjs +2 -11
  222. package/components/input/composite/fesm2022/index.mjs +1 -10
  223. package/components/input/composite/fesm2022/index.mjs.map +1 -1
  224. package/components/input/currency/bundles/index.umd.js +0 -7
  225. package/components/input/currency/currency.component.d.ts +2 -3
  226. package/components/input/currency/esm2022/currency.component.mjs +1 -8
  227. package/components/input/currency/fesm2022/index.mjs +0 -7
  228. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  229. package/components/input/dataset-aware-form/bundles/index.umd.js +2 -26
  230. package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +3 -27
  231. package/components/input/dataset-aware-form/fesm2022/index.mjs +2 -26
  232. package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
  233. package/components/input/epoch/date/bundles/index.umd.js +0 -22
  234. package/components/input/epoch/date/date.component.d.ts +0 -1
  235. package/components/input/epoch/date/esm2022/date.component.mjs +1 -23
  236. package/components/input/epoch/date/fesm2022/index.mjs +0 -22
  237. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  238. package/components/input/file-upload/bundles/index.umd.js +8 -25
  239. package/components/input/file-upload/esm2022/file-upload.component.mjs +9 -26
  240. package/components/input/file-upload/fesm2022/index.mjs +8 -25
  241. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  242. package/components/input/file-upload/file-upload.component.d.ts +0 -3
  243. package/components/input/number/bundles/index.umd.js +0 -8
  244. package/components/input/number/esm2022/number.component.mjs +1 -9
  245. package/components/input/number/fesm2022/index.mjs +0 -8
  246. package/components/input/number/fesm2022/index.mjs.map +1 -1
  247. package/components/input/number/number.component.d.ts +2 -3
  248. package/components/input/radioset/bundles/index.umd.js +2 -18
  249. package/components/input/radioset/esm2022/radioset.component.mjs +3 -19
  250. package/components/input/radioset/fesm2022/index.mjs +2 -18
  251. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  252. package/components/input/radioset/radioset.component.d.ts +2 -4
  253. package/components/input/rating/bundles/index.umd.js +0 -10
  254. package/components/input/rating/esm2022/rating.component.mjs +1 -11
  255. package/components/input/rating/fesm2022/index.mjs +0 -10
  256. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  257. package/components/input/rating/rating.component.d.ts +2 -3
  258. package/components/input/select/bundles/index.umd.js +0 -6
  259. package/components/input/select/esm2022/select.component.mjs +1 -7
  260. package/components/input/select/fesm2022/index.mjs +0 -6
  261. package/components/input/select/fesm2022/index.mjs.map +1 -1
  262. package/components/input/select/select.component.d.ts +2 -3
  263. package/components/input/slider/bundles/index.umd.js +0 -10
  264. package/components/input/slider/esm2022/slider.component.mjs +1 -11
  265. package/components/input/slider/fesm2022/index.mjs +0 -10
  266. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  267. package/components/input/slider/slider.component.d.ts +2 -3
  268. package/components/input/switch/bundles/index.umd.js +2 -22
  269. package/components/input/switch/esm2022/switch.component.mjs +3 -23
  270. package/components/input/switch/fesm2022/index.mjs +2 -22
  271. package/components/input/switch/fesm2022/index.mjs.map +1 -1
  272. package/components/input/switch/switch.component.d.ts +2 -3
  273. package/components/input/text/bundles/index.umd.js +0 -36
  274. package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +1 -8
  275. package/components/input/text/esm2022/input-color/input-color.component.mjs +1 -8
  276. package/components/input/text/esm2022/input-email/input-email.component.mjs +1 -8
  277. package/components/input/text/esm2022/input-number/input-number.component.mjs +1 -8
  278. package/components/input/text/esm2022/input-text/input-text.component.mjs +1 -9
  279. package/components/input/text/fesm2022/index.mjs +0 -36
  280. package/components/input/text/fesm2022/index.mjs.map +1 -1
  281. package/components/input/text/input-calendar/input-calendar.component.d.ts +2 -3
  282. package/components/input/text/input-color/input-color.component.d.ts +2 -3
  283. package/components/input/text/input-email/input-email.component.d.ts +2 -3
  284. package/components/input/text/input-number/input-number.component.d.ts +2 -3
  285. package/components/input/text/input-text/input-text.component.d.ts +2 -3
  286. package/components/input/textarea/bundles/index.umd.js +0 -7
  287. package/components/input/textarea/esm2022/textarea.component.mjs +1 -8
  288. package/components/input/textarea/fesm2022/index.mjs +0 -7
  289. package/components/input/textarea/fesm2022/index.mjs.map +1 -1
  290. package/components/input/textarea/textarea.component.d.ts +2 -3
  291. package/components/navigation/menu/bundles/index.umd.js +6 -55
  292. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +3 -17
  293. package/components/navigation/menu/esm2022/menu.component.mjs +3 -10
  294. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +1 -6
  295. package/components/navigation/menu/esm2022/nav/nav.component.mjs +1 -11
  296. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +3 -16
  297. package/components/navigation/menu/fesm2022/index.mjs +6 -55
  298. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  299. package/components/navigation/menu/menu-adapator.component.d.ts +2 -4
  300. package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +2 -3
  301. package/components/navigation/menu/nav/nav.component.d.ts +2 -3
  302. package/components/navigation/menu/nav/navigation-control.directive.d.ts +2 -4
  303. package/components/navigation/navbar/bundles/index.umd.js +0 -5
  304. package/components/navigation/navbar/esm2022/navbar.component.mjs +1 -6
  305. package/components/navigation/navbar/fesm2022/index.mjs +0 -5
  306. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  307. package/components/navigation/navbar/navbar.component.d.ts +2 -3
  308. package/components/navigation/popover/bundles/index.umd.js +13 -65
  309. package/components/navigation/popover/esm2022/popover.component.mjs +11 -63
  310. package/components/navigation/popover/fesm2022/index.mjs +10 -62
  311. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  312. package/components/navigation/popover/popover.component.d.ts +3 -11
  313. package/components/page/default/bundles/index.umd.js +2 -20
  314. package/components/page/default/esm2022/layout.directive.mjs +1 -9
  315. package/components/page/default/esm2022/page-content/page-content.component.mjs +3 -13
  316. package/components/page/default/fesm2022/index.mjs +2 -20
  317. package/components/page/default/fesm2022/index.mjs.map +1 -1
  318. package/components/page/default/layout.directive.d.ts +2 -3
  319. package/components/page/default/page-content/page-content.component.d.ts +2 -3
  320. package/components/page/left-panel/bundles/index.umd.js +0 -16
  321. package/components/page/left-panel/esm2022/left-panel.directive.mjs +1 -17
  322. package/components/page/left-panel/fesm2022/index.mjs +0 -16
  323. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  324. package/components/page/left-panel/left-panel.directive.d.ts +2 -3
  325. package/components/page/top-nav/bundles/index.umd.js +1 -2
  326. package/components/page/top-nav/esm2022/top-nav.props.mjs +2 -3
  327. package/components/page/top-nav/fesm2022/index.mjs +1 -2
  328. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  329. package/components/prefab/bundles/index.umd.js +0 -4
  330. package/components/prefab/esm2022/prefab.directive.mjs +1 -5
  331. package/components/prefab/fesm2022/index.mjs +0 -4
  332. package/components/prefab/fesm2022/index.mjs.map +1 -1
  333. package/core/bundles/index.umd.js +94 -391
  334. package/core/esm2022/public_api.mjs +3 -3
  335. package/core/esm2022/services/viewport.service.mjs +10 -24
  336. package/core/esm2022/types/types.mjs +1 -1
  337. package/core/esm2022/utils/dom.mjs +2 -18
  338. package/core/esm2022/utils/event-notifier.mjs +2 -5
  339. package/core/esm2022/utils/lru-cache.mjs +2 -16
  340. package/core/esm2022/utils/utils.mjs +2 -6
  341. package/core/esm2022/utils/watcher.mjs +81 -323
  342. package/core/fesm2022/index.mjs +96 -390
  343. package/core/fesm2022/index.mjs.map +1 -1
  344. package/core/public_api.d.ts +2 -2
  345. package/core/services/viewport.service.d.ts +2 -5
  346. package/core/types/types.d.ts +0 -1
  347. package/core/utils/lru-cache.d.ts +0 -6
  348. package/core/utils/utils.d.ts +0 -1
  349. package/core/utils/watcher.d.ts +5 -26
  350. package/http/bundles/index.umd.js +1 -31
  351. package/http/esm2022/http.service.mjs +2 -32
  352. package/http/fesm2022/index.mjs +1 -31
  353. package/http/fesm2022/index.mjs.map +1 -1
  354. package/http/http.service.d.ts +2 -6
  355. package/locales/moment-timezone/moment-timezone-with-data.js +7 -7
  356. package/npm-shrinkwrap.json +2 -2
  357. package/oAuth/bundles/index.umd.js +0 -9
  358. package/oAuth/esm2022/oAuth.service.mjs +1 -10
  359. package/oAuth/fesm2022/index.mjs +0 -9
  360. package/oAuth/fesm2022/index.mjs.map +1 -1
  361. package/oAuth/oAuth.service.d.ts +1 -3
  362. package/package-lock.json +2 -2
  363. package/package.json +1 -1
  364. package/runtime/base/bundles/index.umd.js +42 -376
  365. package/runtime/base/components/app-component/app.component.d.ts +0 -4
  366. package/runtime/base/components/prefab-preview.component.d.ts +2 -5
  367. package/runtime/base/directives/accessroles.directive.d.ts +3 -4
  368. package/runtime/base/directives/prefab.directive.d.ts +2 -3
  369. package/runtime/base/esm2022/components/app-component/app.component.mjs +9 -40
  370. package/runtime/base/esm2022/components/base-custom-widget.component.mjs +2 -33
  371. package/runtime/base/esm2022/components/base-layout.component.mjs +1 -7
  372. package/runtime/base/esm2022/components/base-page.component.mjs +3 -36
  373. package/runtime/base/esm2022/components/base-partial.component.mjs +3 -37
  374. package/runtime/base/esm2022/components/base-prefab.component.mjs +3 -32
  375. package/runtime/base/esm2022/components/base-spa-page.component.mjs +3 -37
  376. package/runtime/base/esm2022/components/prefab-preview.component.mjs +4 -23
  377. package/runtime/base/esm2022/directives/accessroles.directive.mjs +2 -11
  378. package/runtime/base/esm2022/directives/prefab.directive.mjs +1 -9
  379. package/runtime/base/esm2022/services/app.manager.service.mjs +10 -37
  380. package/runtime/base/esm2022/services/app.service.mjs +2 -34
  381. package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +1 -4
  382. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  383. package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -7
  384. package/runtime/base/esm2022/services/spinner.service.mjs +1 -15
  385. package/runtime/base/esm2022/util/fragment-monitor.mjs +2 -23
  386. package/runtime/base/fesm2022/index.mjs +44 -377
  387. package/runtime/base/fesm2022/index.mjs.map +1 -1
  388. package/runtime/base/services/app.manager.service.d.ts +1 -6
  389. package/runtime/base/services/app.service.d.ts +2 -12
  390. package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +1 -2
  391. package/runtime/base/services/spinner.service.d.ts +1 -3
  392. package/runtime/base/util/fragment-monitor.d.ts +0 -6
  393. package/runtime/dynamic/bundles/index.umd.js +0 -5
  394. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +1 -6
  395. package/runtime/dynamic/fesm2022/index.mjs +0 -5
  396. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  397. package/scripts/datatable/datatable.js +14 -100
  398. package/security/bundles/index.umd.js +2 -41
  399. package/security/esm2022/security.service.mjs +3 -42
  400. package/security/fesm2022/index.mjs +2 -41
  401. package/security/fesm2022/index.mjs.map +1 -1
  402. package/security/security.service.d.ts +2 -5
  403. package/variables/bundles/index.umd.js +6 -50
  404. package/variables/esm2022/manager/action/notification-action.manager.mjs +3 -18
  405. package/variables/esm2022/manager/variable/base-variable.manager.mjs +2 -15
  406. package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +3 -13
  407. package/variables/esm2022/service/variables.service.mjs +2 -8
  408. package/variables/fesm2022/index.mjs +6 -50
  409. package/variables/fesm2022/index.mjs.map +1 -1
@@ -16,8 +16,6 @@ class SecurityService {
16
16
  this.activatedRoute = activatedRoute;
17
17
  this._location = _location;
18
18
  this.requestQueue = {};
19
- this.queryParamsSubscriptions = []; // MEMORY LEAK FIX: Track subscriptions
20
- this.appSubscriptions = []; // MEMORY LEAK FIX: Track App subscriptions
21
19
  }
22
20
  isLoaded() {
23
21
  return this.config;
@@ -157,13 +155,9 @@ class SecurityService {
157
155
  */
158
156
  getCurrentRouteQueryParam(paramName) {
159
157
  let paramVal;
160
- // MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)
161
- // Note: This method is called synchronously, so the subscription completes immediately
162
- // but we still store it to be safe
163
- const subscription = this.activatedRoute.queryParams.subscribe(params => {
158
+ this.activatedRoute.queryParams.subscribe(params => {
164
159
  paramVal = params[paramName];
165
160
  });
166
- subscription.unsubscribe(); // Immediate unsubscribe since we only need first value
167
161
  return paramVal;
168
162
  }
169
163
  isNoPageLoaded() {
@@ -260,15 +254,11 @@ class SecurityService {
260
254
  */
261
255
  getRedirectedRouteQueryParams() {
262
256
  let queryParams = {};
263
- // MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)
264
- // Note: This method is called synchronously, so the subscription completes immediately
265
- // but we still store it to be safe
266
- const subscription = this.activatedRoute.queryParams.subscribe((paramVal) => {
257
+ this.activatedRoute.queryParams.subscribe((paramVal) => {
267
258
  forEach(paramVal, (val, key) => {
268
259
  queryParams[key] = val;
269
260
  });
270
261
  });
271
- subscription.unsubscribe(); // Immediate unsubscribe since we only need first value
272
262
  return queryParams;
273
263
  }
274
264
  // accepts query object like {a:1, b:2} and returns a=1&b=2 string
@@ -365,17 +355,10 @@ class SecurityService {
365
355
  resolve();
366
356
  }
367
357
  else {
368
- // MEMORY LEAK FIX: Store unsubscribe function for cleanup
369
358
  const unsubscribe = this.injector.get(App).subscribe('userLoggedIn', () => {
370
359
  resolve();
371
360
  unsubscribe();
372
- // Remove from tracking array
373
- const index = this.appSubscriptions.indexOf(unsubscribe);
374
- if (index > -1) {
375
- this.appSubscriptions.splice(index, 1);
376
- }
377
361
  });
378
- this.appSubscriptions.push(unsubscribe);
379
362
  }
380
363
  }
381
364
  else {
@@ -407,28 +390,6 @@ class SecurityService {
407
390
  authInBrowser() {
408
391
  return Promise.reject('This authInBrowser should not be called');
409
392
  }
410
- ngOnDestroy() {
411
- // MEMORY LEAK FIX: Unsubscribe from all query params subscriptions
412
- this.queryParamsSubscriptions.forEach(sub => {
413
- if (sub && sub.unsubscribe) {
414
- sub.unsubscribe();
415
- }
416
- });
417
- this.queryParamsSubscriptions = [];
418
- // MEMORY LEAK FIX: Unsubscribe from all App subscriptions
419
- this.appSubscriptions.forEach(unsubscribe => {
420
- if (unsubscribe) {
421
- unsubscribe();
422
- }
423
- });
424
- this.appSubscriptions = [];
425
- // MEMORY LEAK FIX: Clear references
426
- this.config = null;
427
- this.lastLoggedInUser = null;
428
- this.loggedInUser = null;
429
- this.requestQueue = null;
430
- this.loadPromise = null;
431
- }
432
393
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SecurityService, deps: [{ token: i0.Injector }, { token: i1.AbstractHttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
433
394
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SecurityService }); }
434
395
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../projects/security/src/security.service.ts","../../../projects/security/src/index.ts"],"sourcesContent":["import { Injectable, Injector, OnDestroy } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport {\n AbstractHttpService,\n App,\n getClonedObject,\n getWmProjectProperties,\n triggerFn\n} from '@wm/core';\nimport {each, forEach, get, isEmpty, join, set} from \"lodash-es\";\ndeclare const _WM_APP_PROPERTIES;\n// Todo[Shubham]: Move below constants to a common file\nconst XSRF_COOKIE_NAME = 'wm_xsrf_token',\n isApplicationType = true;\n\n@Injectable()\nexport class SecurityService implements OnDestroy {\n config;\n lastLoggedInUser;\n loggedInUser;\n loadPromise: Promise<any>;\n requestQueue: any = {};\n private queryParamsSubscriptions: Array<{ unsubscribe: () => void }> = []; // MEMORY LEAK FIX: Track subscriptions\n private appSubscriptions: Array<() => void> = []; // MEMORY LEAK FIX: Track App subscriptions\n\n constructor(\n private injector: Injector,\n private $http: AbstractHttpService,\n private routerService: Router,\n private activatedRoute: ActivatedRoute,\n private _location: Location\n ) {}\n\n isLoaded() {\n return this.config;\n }\n\n get() {\n return this.config;\n }\n\n load(forceFlag?: boolean) {\n if(this.loadPromise) {return this.loadPromise;}\n // Check securityEnabled flag in _WM_APP_PROPERTIES\n if (!_WM_APP_PROPERTIES?.securityEnabled) {\n return Promise.resolve(null);\n }\n if (!forceFlag && this.config) {return Promise.resolve(this.config);}\n this.loadPromise = new Promise((resolve, reject) => {\n this.$http.send({'url': 'services/security/info', 'method': 'GET'}).then((response) => {\n this.config = response.body;\n _WM_APP_PROPERTIES['securityInfo'] = this.config\n this.lastLoggedInUser = getClonedObject(this.loggedInUser);\n this.loggedInUser = this.config.userInfo;\n resolve(response.body);\n }).catch((err)=>{\n reject(err);\n }).finally(()=>{\n this.loadPromise = null;\n });\n });\n return this.loadPromise;\n }\n\n /**\n * gets the security config from the deployed app (backend call)\n * @param success\n * @param error\n */\n getWebConfig(success, error) {\n if (this.get()) {\n // if already fetched, return it\n triggerFn(success, this.get());\n return;\n }\n this.load()\n .then(config => {\n triggerFn(success, config);\n }, error);\n }\n\n /**\n * Returns security config\n * @param successCallback\n * @param failureCallback\n */\n getConfig(successCallback, failureCallback) {\n function invokeQueuedCallbacks(id, method, data) {\n forEach(this.requestQueue[id], fn => triggerFn(fn[method], data));\n this.requestQueue[id] = null;\n }\n\n function onSuccess(config) {\n config = config ? config : {}\n config.homePage = getWmProjectProperties().homePage;\n if (config.userInfo) {\n // Backend returns landingPage instead of homePage, hence this statement(for consistency)\n // config.userInfo.homePage = config.userInfo.landingPage;\n }\n this.config = config;\n this.lastLoggedInUser = getClonedObject(this.loggedInUser);\n this.loggedInUser = config.userInfo;\n invokeQueuedCallbacks.call(this, 'config', 'success', this.get());\n }\n\n function onError(error) {\n /*if ($rootScope.isMobileApplicationType) {\n this.config = {\n 'securityEnabled': false,\n 'authenticated': false,\n 'homePage': _WM_APP_PROPERTIES.homePage,\n 'userInfo': null,\n 'login': null\n };\n invokeQueuedCallbacks('config', 'success', this.get());\n } else {*/\n invokeQueuedCallbacks.call(this, 'config', 'error', error);\n // }\n }\n\n if (this.get()) {\n // if already fetched, return it\n triggerFn(successCallback, this.get());\n return;\n }\n\n // Queue check, if same queue is already in progress, do not send another request\n this.requestQueue.config = this.requestQueue.config || [];\n this.requestQueue.config.push({\n success: successCallback,\n error: failureCallback\n });\n if (this.requestQueue.config.length > 1) {\n return;\n }\n\n // for web project, return config returned from backend API call.\n this.getWebConfig(onSuccess.bind(this), onError.bind(this));\n /* else {\n /!*\n * for mobile app, first get the mobile config (saved in the apk)\n * - if security not enabled, just return mobile config (no backend call required)\n * - else, get Web config (will be the same API hit for login) and merge the config with _mobileconfig\n *!/\n getMobileConfig(function (mobileconfig) {\n if (!mobileconfig.securityEnabled) {\n onSuccess(mobileconfig);\n } else {\n getWebConfig(function (config) {\n config = mergeWebAndMobileConfig(config);\n onSuccess(config);\n }, function () {onSuccess(mobileconfig); });\n }\n }, onError);\n }*/\n }\n\n getLastLoggedInUsername() {\n return this.lastLoggedInUser && this.lastLoggedInUser.userName;\n }\n\n /**\n * Returns the current page name\n * @returns {string}\n */\n getCurrentRoutePage() {\n const p = this._location.path();\n let lIndex = p.indexOf('?');\n lIndex = lIndex === -1 ? p.length : lIndex - 1;\n return p.substr(1, lIndex); // ignore the query params\n }\n\n /**\n * Returns Query params for specified param name in current Route\n * @param paramName, the param name whose query param value is to be retrieved\n * @returns {any}\n */\n getCurrentRouteQueryParam(paramName) {\n let paramVal;\n // MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)\n // Note: This method is called synchronously, so the subscription completes immediately\n // but we still store it to be safe\n const subscription = this.activatedRoute.queryParams.subscribe(params => {\n paramVal = params[paramName];\n });\n subscription.unsubscribe(); // Immediate unsubscribe since we only need first value\n return paramVal;\n }\n\n isNoPageLoaded() {\n return !isEmpty(this.getCurrentRoutePage());\n }\n\n getPageByLoggedInUser() {\n const that = this;\n return new Promise((resolve) => {\n let page;\n if (!isApplicationType) {\n if (that.isNoPageLoaded()) {\n page = getWmProjectProperties().homePage;\n resolve(page);\n }\n } else {\n that.getConfig((config) => {\n if (config.securityEnabled && config.authenticated) {\n page = config.userInfo.landingPage || getWmProjectProperties().homePage;\n // override the default xsrf cookie name and xsrf header names with WaveMaker specific values\n if (that.isXsrfEnabled()) {\n // this.$http.defaults.xsrfCookieName = XSRF_COOKIE;\n // this.$http.defaults.xsrfHeaderName = config.csrfHeaderName;\n }\n } else {\n page = getWmProjectProperties().homePage;\n }\n resolve(page);\n }, function () {\n resolve(getWmProjectProperties().homePage);\n });\n }\n });\n }\n\n /**\n * Loads the App page as follows:\n * Security disabled:\n * - Home page\n * Security enabled:\n * - User is logged in, respective landing page is loaded\n * - Not logged in:\n * - Home page is public, loads the home page\n * - Home page not public, Login page(in config) is loaded\n * @param forcePageLoad\n * @returns {Promise<T>}\n */\n loadPageByUserRole(forcePageLoad?) {\n const that = this;\n return this.getPageByLoggedInUser().then(page => {\n if (that.isNoPageLoaded() || forcePageLoad) {\n // Reload the page when current page and post login landing page are same\n if (that.getCurrentRoutePage() === page) {\n (window.location as any).reload();\n } else {\n that.routerService.navigate([`/${page}`]);\n }\n }\n });\n }\n\n /**\n * Navigates to the current user's homePage based on the config in SecurityService\n * Assumption is the SecurityService is updated with the latest security config before making call to this function\n */\n navigateOnLogin() {\n this.loadPageByUserRole(true);\n }\n\n /**\n * Gets the page which needs to be redirected to on successful login\n * @param config,\n * @param page, page name for redirection\n * @returns {any|string}\n */\n getRedirectPage(config, page?) {\n const homePage = getWmProjectProperties().homePage,\n loginPage = get(config, 'loginConfig.pageName');\n let prevRedirectPage,\n redirectPage = page || this.getCurrentRoutePage();\n\n // if user is already on Home page or Login page, they should not be redirected to that page, hence return undefined\n if (redirectPage === homePage || redirectPage === loginPage) {\n /*\n * find previous redirect page from URL, if exists, user should redirect to that page.\n * USE CASE:\n * user is on http://localhost:8080/app/#/Login?redirectTo=page\n * a variable call fails resulting 401\n * in this case, redirectTo page should be 'page' and not undefined\n */\n prevRedirectPage = this.getCurrentRouteQueryParam('redirectTo');\n redirectPage = !isEmpty(prevRedirectPage) ? prevRedirectPage : undefined;\n }\n\n return redirectPage;\n }\n\n /**\n * Returns all the query params(including page params and redirect to params) associated with redirected page\n */\n getRedirectedRouteQueryParams() {\n let queryParams = {};\n // MEMORY LEAK FIX: Store subscription for cleanup (though this is a synchronous read)\n // Note: This method is called synchronously, so the subscription completes immediately\n // but we still store it to be safe\n const subscription = this.activatedRoute.queryParams.subscribe((paramVal) => {\n forEach(paramVal, (val, key) => {\n queryParams[key] = val;\n });\n });\n subscription.unsubscribe(); // Immediate unsubscribe since we only need first value\n return queryParams;\n }\n\n // accepts query object like {a:1, b:2} and returns a=1&b=2 string\n getQueryString(queryObject) {\n const params = [];\n forEach(queryObject, function (value, key) {\n params.push(key + '=' + value);\n });\n return join(params, '&');\n }\n\n appLogin(params, successCallback, failureCallback) {\n let payload = '';\n\n // encode all parameters\n each(params, function (value, name) {\n payload += (payload ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);\n });\n\n return this.$http.send({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n url: 'j_spring_security_check',\n 'data': payload\n }).then((response) => {\n const xsrfCookieValue = response.body ? response.body[XSRF_COOKIE_NAME] : '';\n\n // override the default xsrf cookie name and xsrf header names with WaveMaker specific values\n if (xsrfCookieValue) {\n }\n // After the successful login in device, this function triggers the pending onLoginCallbacks.\n this.injector.get(App).notify('userLoggedIn', {});\n triggerFn(successCallback, response);\n }, failureCallback);\n }\n\n /**\n * The API is used to check if the user is authenticated in the RUN mode.\n *\n * @param {function} successCallback to be called on success\n * @param {function} failureCallback to be called on failure\n */\n isAuthenticated(successCallback, failureCallback) {\n this.getConfig(function (config) {\n triggerFn(successCallback, config.authenticated);\n }, failureCallback);\n }\n\n /**\n * The API is used to logout of the app.\n *\n * @param {function} successCallback to be called on success\n * @param {function} failureCallback to be called on failure\n */\n appLogout(successCallback, failureCallback) {\n return this.$http.send({\n target: 'Security',\n url: 'j_spring_security_logout',\n method: 'POST',\n responseType: 'text',\n byPassResult: true\n }).then((response) => {\n set(this.get(), 'authenticated', false);\n set(this.get(), 'userInfo', null);\n this.injector.get(App).notify('userLoggedOut', {});\n triggerFn(successCallback, response);\n }, failureCallback);\n }\n\n /**\n * Checks and return the cookie\n * @param name, cookie key\n * @returns {string}\n */\n getCookieByName(name) {\n // Todo: Shubham Implement cookie native js\n return 'cookie';\n }\n\n /**\n * This function returns the cookieValue if xsrf is enabled.\n * In device, xsrf cookie is stored in localStorage.\n * @returns xsrf cookie value\n */\n isXsrfEnabled() {\n return this.getCookieByName(XSRF_COOKIE_NAME);\n }\n\n /**\n * This function returns a promise. Promise is resolved when security is\n * 1. disabled\n * 2. enabled and user is authenticated\n * 3. enabled and user is not authenticated, then promise is resolved on user login\n * @returns {*} promise\n */\n public onUserLogin(): Promise<any> {\n return new Promise<void>((resolve, reject) => {\n this.getConfig(config => {\n if (config.securityEnabled) {\n if (config.authenticated) {\n resolve();\n } else {\n // MEMORY LEAK FIX: Store unsubscribe function for cleanup\n const unsubscribe = this.injector.get(App).subscribe('userLoggedIn', () => {\n resolve();\n unsubscribe();\n // Remove from tracking array\n const index = this.appSubscriptions.indexOf(unsubscribe);\n if (index > -1) {\n this.appSubscriptions.splice(index, 1);\n }\n });\n this.appSubscriptions.push(unsubscribe);\n }\n } else {\n resolve();\n }\n }, reject);\n });\n }\n\n /**\n * @returns a promise that is resolved with logged-in-user\n */\n getLoggedInUser() {\n return new Promise<any>((resolve, reject) => {\n this.getConfig((config) => {\n if (config && config.userInfo) {\n resolve(config.userInfo);\n } else {\n reject();\n }\n }, reject);\n });\n }\n\n /**\n * This is for mobile apps to authenticate via browser.\n *\n * @returns a promise that is resolved after login\n */\n authInBrowser(): Promise<any> {\n return Promise.reject('This authInBrowser should not be called');\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Unsubscribe from all query params subscriptions\n this.queryParamsSubscriptions.forEach(sub => {\n if (sub && sub.unsubscribe) {\n sub.unsubscribe();\n }\n });\n this.queryParamsSubscriptions = [];\n\n // MEMORY LEAK FIX: Unsubscribe from all App subscriptions\n this.appSubscriptions.forEach(unsubscribe => {\n if (unsubscribe) {\n unsubscribe();\n }\n });\n this.appSubscriptions = [];\n\n // MEMORY LEAK FIX: Clear references\n this.config = null;\n this.lastLoggedInUser = null;\n this.loggedInUser = null;\n this.requestQueue = null;\n this.loadPromise = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../projects/security/src/security.service.ts","../../../projects/security/src/index.ts"],"sourcesContent":["import { Injectable, Injector } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport {\n AbstractHttpService,\n App,\n getClonedObject,\n getWmProjectProperties,\n triggerFn\n} from '@wm/core';\nimport {each, forEach, get, isEmpty, join, set} from \"lodash-es\";\ndeclare const _WM_APP_PROPERTIES;\n// Todo[Shubham]: Move below constants to a common file\nconst XSRF_COOKIE_NAME = 'wm_xsrf_token',\n isApplicationType = true;\n\n@Injectable()\nexport class SecurityService {\n config;\n lastLoggedInUser;\n loggedInUser;\n loadPromise: Promise<any>;\n requestQueue: any = {};\n\n constructor(\n private injector: Injector,\n private $http: AbstractHttpService,\n private routerService: Router,\n private activatedRoute: ActivatedRoute,\n private _location: Location\n ) {}\n\n isLoaded() {\n return this.config;\n }\n\n get() {\n return this.config;\n }\n\n load(forceFlag?: boolean) {\n if(this.loadPromise) {return this.loadPromise;}\n // Check securityEnabled flag in _WM_APP_PROPERTIES\n if (!_WM_APP_PROPERTIES?.securityEnabled) {\n return Promise.resolve(null);\n }\n if (!forceFlag && this.config) {return Promise.resolve(this.config);}\n this.loadPromise = new Promise((resolve, reject) => {\n this.$http.send({'url': 'services/security/info', 'method': 'GET'}).then((response) => {\n this.config = response.body;\n _WM_APP_PROPERTIES['securityInfo'] = this.config\n this.lastLoggedInUser = getClonedObject(this.loggedInUser);\n this.loggedInUser = this.config.userInfo;\n resolve(response.body);\n }).catch((err)=>{\n reject(err);\n }).finally(()=>{\n this.loadPromise = null;\n });\n });\n return this.loadPromise;\n }\n\n /**\n * gets the security config from the deployed app (backend call)\n * @param success\n * @param error\n */\n getWebConfig(success, error) {\n if (this.get()) {\n // if already fetched, return it\n triggerFn(success, this.get());\n return;\n }\n this.load()\n .then(config => {\n triggerFn(success, config);\n }, error);\n }\n\n /**\n * Returns security config\n * @param successCallback\n * @param failureCallback\n */\n getConfig(successCallback, failureCallback) {\n function invokeQueuedCallbacks(id, method, data) {\n forEach(this.requestQueue[id], fn => triggerFn(fn[method], data));\n this.requestQueue[id] = null;\n }\n\n function onSuccess(config) {\n config = config ? config : {}\n config.homePage = getWmProjectProperties().homePage;\n if (config.userInfo) {\n // Backend returns landingPage instead of homePage, hence this statement(for consistency)\n // config.userInfo.homePage = config.userInfo.landingPage;\n }\n this.config = config;\n this.lastLoggedInUser = getClonedObject(this.loggedInUser);\n this.loggedInUser = config.userInfo;\n invokeQueuedCallbacks.call(this, 'config', 'success', this.get());\n }\n\n function onError(error) {\n /*if ($rootScope.isMobileApplicationType) {\n this.config = {\n 'securityEnabled': false,\n 'authenticated': false,\n 'homePage': _WM_APP_PROPERTIES.homePage,\n 'userInfo': null,\n 'login': null\n };\n invokeQueuedCallbacks('config', 'success', this.get());\n } else {*/\n invokeQueuedCallbacks.call(this, 'config', 'error', error);\n // }\n }\n\n if (this.get()) {\n // if already fetched, return it\n triggerFn(successCallback, this.get());\n return;\n }\n\n // Queue check, if same queue is already in progress, do not send another request\n this.requestQueue.config = this.requestQueue.config || [];\n this.requestQueue.config.push({\n success: successCallback,\n error: failureCallback\n });\n if (this.requestQueue.config.length > 1) {\n return;\n }\n\n // for web project, return config returned from backend API call.\n this.getWebConfig(onSuccess.bind(this), onError.bind(this));\n /* else {\n /!*\n * for mobile app, first get the mobile config (saved in the apk)\n * - if security not enabled, just return mobile config (no backend call required)\n * - else, get Web config (will be the same API hit for login) and merge the config with _mobileconfig\n *!/\n getMobileConfig(function (mobileconfig) {\n if (!mobileconfig.securityEnabled) {\n onSuccess(mobileconfig);\n } else {\n getWebConfig(function (config) {\n config = mergeWebAndMobileConfig(config);\n onSuccess(config);\n }, function () {onSuccess(mobileconfig); });\n }\n }, onError);\n }*/\n }\n\n getLastLoggedInUsername() {\n return this.lastLoggedInUser && this.lastLoggedInUser.userName;\n }\n\n /**\n * Returns the current page name\n * @returns {string}\n */\n getCurrentRoutePage() {\n const p = this._location.path();\n let lIndex = p.indexOf('?');\n lIndex = lIndex === -1 ? p.length : lIndex - 1;\n return p.substr(1, lIndex); // ignore the query params\n }\n\n /**\n * Returns Query params for specified param name in current Route\n * @param paramName, the param name whose query param value is to be retrieved\n * @returns {any}\n */\n getCurrentRouteQueryParam(paramName) {\n let paramVal;\n this.activatedRoute.queryParams.subscribe(params => {\n paramVal = params[paramName];\n });\n return paramVal;\n }\n\n isNoPageLoaded() {\n return !isEmpty(this.getCurrentRoutePage());\n }\n\n getPageByLoggedInUser() {\n const that = this;\n return new Promise((resolve) => {\n let page;\n if (!isApplicationType) {\n if (that.isNoPageLoaded()) {\n page = getWmProjectProperties().homePage;\n resolve(page);\n }\n } else {\n that.getConfig((config) => {\n if (config.securityEnabled && config.authenticated) {\n page = config.userInfo.landingPage || getWmProjectProperties().homePage;\n // override the default xsrf cookie name and xsrf header names with WaveMaker specific values\n if (that.isXsrfEnabled()) {\n // this.$http.defaults.xsrfCookieName = XSRF_COOKIE;\n // this.$http.defaults.xsrfHeaderName = config.csrfHeaderName;\n }\n } else {\n page = getWmProjectProperties().homePage;\n }\n resolve(page);\n }, function () {\n resolve(getWmProjectProperties().homePage);\n });\n }\n });\n }\n\n /**\n * Loads the App page as follows:\n * Security disabled:\n * - Home page\n * Security enabled:\n * - User is logged in, respective landing page is loaded\n * - Not logged in:\n * - Home page is public, loads the home page\n * - Home page not public, Login page(in config) is loaded\n * @param forcePageLoad\n * @returns {Promise<T>}\n */\n loadPageByUserRole(forcePageLoad?) {\n const that = this;\n return this.getPageByLoggedInUser().then(page => {\n if (that.isNoPageLoaded() || forcePageLoad) {\n // Reload the page when current page and post login landing page are same\n if (that.getCurrentRoutePage() === page) {\n (window.location as any).reload();\n } else {\n that.routerService.navigate([`/${page}`]);\n }\n }\n });\n }\n\n /**\n * Navigates to the current user's homePage based on the config in SecurityService\n * Assumption is the SecurityService is updated with the latest security config before making call to this function\n */\n navigateOnLogin() {\n this.loadPageByUserRole(true);\n }\n\n /**\n * Gets the page which needs to be redirected to on successful login\n * @param config,\n * @param page, page name for redirection\n * @returns {any|string}\n */\n getRedirectPage(config, page?) {\n const homePage = getWmProjectProperties().homePage,\n loginPage = get(config, 'loginConfig.pageName');\n let prevRedirectPage,\n redirectPage = page || this.getCurrentRoutePage();\n\n // if user is already on Home page or Login page, they should not be redirected to that page, hence return undefined\n if (redirectPage === homePage || redirectPage === loginPage) {\n /*\n * find previous redirect page from URL, if exists, user should redirect to that page.\n * USE CASE:\n * user is on http://localhost:8080/app/#/Login?redirectTo=page\n * a variable call fails resulting 401\n * in this case, redirectTo page should be 'page' and not undefined\n */\n prevRedirectPage = this.getCurrentRouteQueryParam('redirectTo');\n redirectPage = !isEmpty(prevRedirectPage) ? prevRedirectPage : undefined;\n }\n\n return redirectPage;\n }\n\n /**\n * Returns all the query params(including page params and redirect to params) associated with redirected page\n */\n getRedirectedRouteQueryParams() {\n let queryParams = {};\n this.activatedRoute.queryParams.subscribe((paramVal) => {\n forEach(paramVal, (val, key) => {\n queryParams[key] = val;\n });\n });\n return queryParams;\n }\n\n // accepts query object like {a:1, b:2} and returns a=1&b=2 string\n getQueryString(queryObject) {\n const params = [];\n forEach(queryObject, function (value, key) {\n params.push(key + '=' + value);\n });\n return join(params, '&');\n }\n\n appLogin(params, successCallback, failureCallback) {\n let payload = '';\n\n // encode all parameters\n each(params, function (value, name) {\n payload += (payload ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);\n });\n\n return this.$http.send({\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n url: 'j_spring_security_check',\n 'data': payload\n }).then((response) => {\n const xsrfCookieValue = response.body ? response.body[XSRF_COOKIE_NAME] : '';\n\n // override the default xsrf cookie name and xsrf header names with WaveMaker specific values\n if (xsrfCookieValue) {\n }\n // After the successful login in device, this function triggers the pending onLoginCallbacks.\n this.injector.get(App).notify('userLoggedIn', {});\n triggerFn(successCallback, response);\n }, failureCallback);\n }\n\n /**\n * The API is used to check if the user is authenticated in the RUN mode.\n *\n * @param {function} successCallback to be called on success\n * @param {function} failureCallback to be called on failure\n */\n isAuthenticated(successCallback, failureCallback) {\n this.getConfig(function (config) {\n triggerFn(successCallback, config.authenticated);\n }, failureCallback);\n }\n\n /**\n * The API is used to logout of the app.\n *\n * @param {function} successCallback to be called on success\n * @param {function} failureCallback to be called on failure\n */\n appLogout(successCallback, failureCallback) {\n return this.$http.send({\n target: 'Security',\n url: 'j_spring_security_logout',\n method: 'POST',\n responseType: 'text',\n byPassResult: true\n }).then((response) => {\n set(this.get(), 'authenticated', false);\n set(this.get(), 'userInfo', null);\n this.injector.get(App).notify('userLoggedOut', {});\n triggerFn(successCallback, response);\n }, failureCallback);\n }\n\n /**\n * Checks and return the cookie\n * @param name, cookie key\n * @returns {string}\n */\n getCookieByName(name) {\n // Todo: Shubham Implement cookie native js\n return 'cookie';\n }\n\n /**\n * This function returns the cookieValue if xsrf is enabled.\n * In device, xsrf cookie is stored in localStorage.\n * @returns xsrf cookie value\n */\n isXsrfEnabled() {\n return this.getCookieByName(XSRF_COOKIE_NAME);\n }\n\n /**\n * This function returns a promise. Promise is resolved when security is\n * 1. disabled\n * 2. enabled and user is authenticated\n * 3. enabled and user is not authenticated, then promise is resolved on user login\n * @returns {*} promise\n */\n public onUserLogin(): Promise<any> {\n return new Promise<void>((resolve, reject) => {\n this.getConfig(config => {\n if (config.securityEnabled) {\n if (config.authenticated) {\n resolve();\n } else {\n const unsubscribe = this.injector.get(App).subscribe('userLoggedIn', () => {\n resolve();\n unsubscribe();\n });\n }\n } else {\n resolve();\n }\n }, reject);\n });\n }\n\n /**\n * @returns a promise that is resolved with logged-in-user\n */\n getLoggedInUser() {\n return new Promise<any>((resolve, reject) => {\n this.getConfig((config) => {\n if (config && config.userInfo) {\n resolve(config.userInfo);\n } else {\n reject();\n }\n }, reject);\n });\n }\n\n /**\n * This is for mobile apps to authenticate via browser.\n *\n * @returns a promise that is resolved after login\n */\n authInBrowser(): Promise<any> {\n return Promise.reject('This authInBrowser should not be called');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { Injector, OnDestroy } from '@angular/core';
1
+ import { Injector } from '@angular/core';
2
2
  import { Location } from '@angular/common';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { AbstractHttpService } from '@wm/core';
5
5
  import * as i0 from "@angular/core";
6
- export declare class SecurityService implements OnDestroy {
6
+ export declare class SecurityService {
7
7
  private injector;
8
8
  private $http;
9
9
  private routerService;
@@ -14,8 +14,6 @@ export declare class SecurityService implements OnDestroy {
14
14
  loggedInUser: any;
15
15
  loadPromise: Promise<any>;
16
16
  requestQueue: any;
17
- private queryParamsSubscriptions;
18
- private appSubscriptions;
19
17
  constructor(injector: Injector, $http: AbstractHttpService, routerService: Router, activatedRoute: ActivatedRoute, _location: Location);
20
18
  isLoaded(): any;
21
19
  get(): any;
@@ -121,7 +119,6 @@ export declare class SecurityService implements OnDestroy {
121
119
  * @returns a promise that is resolved after login
122
120
  */
123
121
  authInBrowser(): Promise<any>;
124
- ngOnDestroy(): void;
125
122
  static ɵfac: i0.ɵɵFactoryDeclaration<SecurityService, never>;
126
123
  static ɵprov: i0.ɵɵInjectableDeclaration<SecurityService>;
127
124
  }
@@ -1146,26 +1146,11 @@
1146
1146
  toaster = exports.toasterService.show(type, title, body || null, { positionClass: positionClass, timeOut: duration, enableHtml: true });
1147
1147
  }
1148
1148
  // callbacks
1149
- // MEMORY LEAK FIX: Store subscriptions for cleanup (though toaster is short-lived, we track for safety)
1150
1149
  if (variable.onClick) {
1151
- const onClickSubscription = toaster.onTap.subscribe(this.onToasterClick.bind(this, variable));
1152
- // Store subscription on toaster for cleanup (toaster handles its own lifecycle)
1153
- if (toaster && !toaster._subscriptions) {
1154
- toaster._subscriptions = [];
1155
- }
1156
- if (toaster && toaster._subscriptions) {
1157
- toaster._subscriptions.push(onClickSubscription);
1158
- }
1150
+ toaster.onTap.subscribe(this.onToasterClick.bind(this, variable));
1159
1151
  }
1160
1152
  if (variable.onHide) {
1161
- const onHideSubscription = toaster.onHidden.subscribe(this.onToasterHide.bind(this, variable));
1162
- // Store subscription on toaster for cleanup (toaster handles its own lifecycle)
1163
- if (toaster && !toaster._subscriptions) {
1164
- toaster._subscriptions = [];
1165
- }
1166
- if (toaster && toaster._subscriptions) {
1167
- toaster._subscriptions.push(onHideSubscription);
1168
- }
1153
+ toaster.onHidden.subscribe(this.onToasterHide.bind(this, variable));
1169
1154
  }
1170
1155
  }
1171
1156
  getDialogConfig(variable, options, dialogId, closeCallBackFn) {
@@ -1314,20 +1299,7 @@
1314
1299
  // send the notification manually to hide any context spinners on page.
1315
1300
  // [TODO]: any spinners on widget listening on this variable will also go off. Need to see an approach to sovle that.
1316
1301
  this.notifyInflight(variable, false, err);
1317
- // MEMORY LEAK FIX: Store subscription for cleanup (though it's a one-time promise resolver)
1318
- const error401Subscription = err._401Subscriber.asObservable().subscribe(response => {
1319
- resolve(response);
1320
- // Unsubscribe after resolution
1321
- if (error401Subscription && !error401Subscription.closed) {
1322
- error401Subscription.unsubscribe();
1323
- }
1324
- }, e => {
1325
- reject(e);
1326
- // Unsubscribe after rejection
1327
- if (error401Subscription && !error401Subscription.closed) {
1328
- error401Subscription.unsubscribe();
1329
- }
1330
- });
1302
+ err._401Subscriber.asObservable().subscribe(response => resolve(response), e => reject(e));
1331
1303
  }
1332
1304
  else {
1333
1305
  reject(err);
@@ -2529,13 +2501,7 @@
2529
2501
  }
2530
2502
  }
2531
2503
  freeSocket(variable) {
2532
- // MEMORY LEAK FIX: Properly clean up socket reference
2533
- const socket = this.scope_var_socket_map.get(variable);
2534
- if (socket) {
2535
- // Clear socket reference from variable
2536
- variable._socket = null;
2537
- }
2538
- this.scope_var_socket_map.delete(variable);
2504
+ this.scope_var_socket_map.set(variable, undefined);
2539
2505
  }
2540
2506
  /**
2541
2507
  * calls the ON_CLOSE event on the variable
@@ -2612,11 +2578,7 @@
2612
2578
  if (shouldClose === false) {
2613
2579
  return;
2614
2580
  }
2615
- if (socket) {
2616
- socket.close();
2617
- // MEMORY LEAK FIX: Clean up socket reference after closing
2618
- this.freeSocket(variable);
2619
- }
2581
+ socket.close();
2620
2582
  }
2621
2583
  /**
2622
2584
  * sends a message to the existing socket connection on the variable
@@ -3075,13 +3037,7 @@
3075
3037
  this.processBinding(varInstance, scope, 'dataBinding', this.getBindSourceTarget(varInstance));
3076
3038
  varInstance.httpService = this.httpService;
3077
3039
  varInstance.dateFormatter = new Formatter();
3078
- // MEMORY LEAK FIX: Store subscription unsubscribe function (cleanup handled by registerDestroyListener)
3079
- const afterInvokeUnsubscribe = varInstance.subscribe('afterInvoke', () => i1.$invokeWatchers(true));
3080
- // Store on variable for potential manual cleanup if needed
3081
- if (!varInstance._eventSubscriptions) {
3082
- varInstance._eventSubscriptions = [];
3083
- }
3084
- varInstance._eventSubscriptions.push(afterInvokeUnsubscribe);
3040
+ varInstance.subscribe('afterInvoke', () => i1.$invokeWatchers(true));
3085
3041
  if (varInstance.category === 'wm.LiveVariable' && varInstance.operation === 'read') {
3086
3042
  i1.processFilterExpBindNode(varInstance._context, varInstance.filterExpressions, varInstance);
3087
3043
  }
@@ -24,26 +24,11 @@ export class NotificationActionManager extends BaseActionManager {
24
24
  toaster = toasterService.show(type, title, body || null, { positionClass: positionClass, timeOut: duration, enableHtml: true });
25
25
  }
26
26
  // callbacks
27
- // MEMORY LEAK FIX: Store subscriptions for cleanup (though toaster is short-lived, we track for safety)
28
27
  if (variable.onClick) {
29
- const onClickSubscription = toaster.onTap.subscribe(this.onToasterClick.bind(this, variable));
30
- // Store subscription on toaster for cleanup (toaster handles its own lifecycle)
31
- if (toaster && !toaster._subscriptions) {
32
- toaster._subscriptions = [];
33
- }
34
- if (toaster && toaster._subscriptions) {
35
- toaster._subscriptions.push(onClickSubscription);
36
- }
28
+ toaster.onTap.subscribe(this.onToasterClick.bind(this, variable));
37
29
  }
38
30
  if (variable.onHide) {
39
- const onHideSubscription = toaster.onHidden.subscribe(this.onToasterHide.bind(this, variable));
40
- // Store subscription on toaster for cleanup (toaster handles its own lifecycle)
41
- if (toaster && !toaster._subscriptions) {
42
- toaster._subscriptions = [];
43
- }
44
- if (toaster && toaster._subscriptions) {
45
- toaster._subscriptions.push(onHideSubscription);
46
- }
31
+ toaster.onHidden.subscribe(this.onToasterHide.bind(this, variable));
47
32
  }
48
33
  }
49
34
  getDialogConfig(variable, options, dialogId, closeCallBackFn) {
@@ -149,4 +134,4 @@ export class NotificationActionManager extends BaseActionManager {
149
134
  return variable.dataBinding.cancelButtonText;
150
135
  }
151
136
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWFjdGlvbi5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy9tYW5hZ2VyL2FjdGlvbi9ub3RpZmljYXRpb24tYWN0aW9uLm1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFL0MsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGlCQUFpQjtJQUVwRCxjQUFjLENBQUMsUUFBUTtRQUMzQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBUTtRQUMxQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTztRQUN0QyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQzlFLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUNuRCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFDckIsYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElB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Q0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQVE7UUFDakIsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQVEsRUFBRSxTQUFTO1FBQzVCLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdEIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUFRO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUk7UUFDOUIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDO0lBQ2pELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VBY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9iYXNlLWFjdGlvbi5tYW5hZ2VyJztcbmltcG9ydCB7IGluaXRpYXRlQ2FsbGJhY2ssIHRvYXN0ZXJTZXJ2aWNlLCBkaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbC92YXJpYWJsZS92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Y2FwaXRhbGl6ZSwgaXNTdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkFjdGlvbk1hbmFnZXIgZXh0ZW5kcyBCYXNlQWN0aW9uTWFuYWdlciB7XG5cbiAgICBwcml2YXRlIG9uVG9hc3RlckNsaWNrKHZhcmlhYmxlKSB7XG4gICAgICAgIGluaXRpYXRlQ2FsbGJhY2soJ29uQ2xpY2snLCB2YXJpYWJsZSwgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ub2FzdGVySGlkZSh2YXJpYWJsZSkge1xuICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKCdvbkhpZGUnLCB2YXJpYWJsZSwgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5VmlhVG9hc3Rlcih2YXJpYWJsZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0eXBlID0gKG9wdGlvbnMuY2xhc3MgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcuY2xhc3MgfHwgJ2luZm8nKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgYm9keSA9IG9wdGlvbnMubWVzc2FnZSB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy50ZXh0LFxuICAgICAgICAgICAgdGl0bGUgPSBvcHRpb25zLnRpdGxlLFxuICAgICAgICAgICAgcG9zaXRpb25DbGFzcyA9ICd0b2FzdC0nICsgKG9wdGlvbnMucG9zaXRpb24gfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcudG9hc3RlclBvc2l0aW9uIHx8ICdib3R0b20gcmlnaHQnKS5yZXBsYWNlKCcgJywgJy0nKSxcbiAgICAgICAgICAgIHBhcnRpYWxQYWdlID0gdmFyaWFibGUuZGF0YUJpbmRpbmcucGFnZSxcbiAgICAgICAgICAgIERFRkFVTFRfRFVSQVRJT04gPSAzMDAwO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUludChvcHRpb25zLmR1cmF0aW9uIHx8IHZhcmlhYmxlLmRhdGFCaW5kaW5nLmR1cmF0aW9uLCBudWxsKSxcbiAgICAgICAgICAgIHRvYXN0ZXI7XG5cbiAgICAgICAgLy8gZHVyYXRpb25cbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgZHVyYXRpb24gPSAoZHVyYXRpb24gIT09IDAgJiYgdHlwZSA9PT0gJ3N1Y2Nlc3MnKSA/IERFRkFVTFRfRFVSQVRJT04gOiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YXJpYWJsZS5kYXRhQmluZGluZy5jb250ZW50ICYmIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNvbnRlbnQgPT09ICdwYWdlJyAmJiBwYXJ0aWFsUGFnZSkge1xuICAgICAgICAgICAgdG9hc3RlciA9IHRvYXN0ZXJTZXJ2aWNlLnNob3dDdXN0b20ocGFydGlhbFBhZ2UsIHtwb3NpdGlvbkNsYXNzOiBwb3NpdGlvbkNsYXNzLCB0aW1lT3V0OiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICBwYXJ0aWFsUGFyYW1zOiB2YXJpYWJsZS5fYmluZGRhdGFTZXQsIGNvbnRleHQ6IHZhcmlhYmxlLl9jb250ZXh0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2FzdGVyID0gdG9hc3RlclNlcnZpY2Uuc2hvdyh0eXBlLCB0aXRsZSwgYm9keSB8fCBudWxsLCB7cG9zaXRpb25DbGFzczogcG9zaXRpb25DbGFzcywgdGltZU91dDogZHVyYXRpb24sIGVuYWJsZUh0bWw6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGxiYWNrc1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIHN1YnNjcmlwdGlvbnMgZm9yIGNsZWFudXAgKHRob3VnaCB0b2FzdGVyIGlzIHNob3J0LWxpdmVkLCB3ZSB0cmFjayBmb3Igc2FmZXR5KVxuICAgICAgICBpZiAodmFyaWFibGUub25DbGljaykge1xuICAgICAgICAgICAgY29uc3Qgb25DbGlja1N1YnNjcmlwdGlvbiA9IHRvYXN0ZXIub25UYXAuc3Vic2NyaWJlKCB0aGlzLm9uVG9hc3RlckNsaWNrLmJpbmQodGhpcywgdmFyaWFibGUpICk7XG4gICAgICAgICAgICAvLyBTdG9yZSBzdWJzY3JpcHRpb24gb24gdG9hc3RlciBmb3IgY2xlYW51cCAodG9hc3RlciBoYW5kbGVzIGl0cyBvd24gbGlmZWN5Y2xlKVxuICAgICAgICAgICAgaWYgKHRvYXN0ZXIgJiYgIXRvYXN0ZXIuX3N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0b2FzdGVyLl9zdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG9hc3RlciAmJiB0b2FzdGVyLl9zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdG9hc3Rlci5fc3Vic2NyaXB0aW9ucy5wdXNoKG9uQ2xpY2tTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2YXJpYWJsZS5vbkhpZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9uSGlkZVN1YnNjcmlwdGlvbiA9IHRvYXN0ZXIub25IaWRkZW4uc3Vic2NyaWJlKCB0aGlzLm9uVG9hc3RlckhpZGUuYmluZCh0aGlzLCB2YXJpYWJsZSkgKTtcbiAgICAgICAgICAgIC8vIFN0b3JlIHN1YnNjcmlwdGlvbiBvbiB0b2FzdGVyIGZvciBjbGVhbnVwICh0b2FzdGVyIGhhbmRsZXMgaXRzIG93biBsaWZlY3ljbGUpXG4gICAgICAgICAgICBpZiAodG9hc3RlciAmJiAhdG9hc3Rlci5fc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgICAgIHRvYXN0ZXIuX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2FzdGVyICYmIHRvYXN0ZXIuX3N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0b2FzdGVyLl9zdWJzY3JpcHRpb25zLnB1c2gob25IaWRlU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGlhbG9nQ29uZmlnKHZhcmlhYmxlLCBvcHRpb25zLCBkaWFsb2dJZCwgY2xvc2VDYWxsQmFja0ZuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAndGl0bGUnIDogb3B0aW9ucy50aXRsZSB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy50aXRsZSxcbiAgICAgICAgICAgICd0ZXh0JyA6IG9wdGlvbnMubWVzc2FnZSB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy50ZXh0LFxuICAgICAgICAgICAgJ29rQnV0dG9uVGV4dCcgOiBvcHRpb25zLm9rQnV0dG9uVGV4dCB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy5va0J1dHRvblRleHQgfHwgJ09LJyxcbiAgICAgICAgICAgICdjYW5jZWxCdXR0b25UZXh0JyA6IG9wdGlvbnMuY2FuY2VsQnV0dG9uVGV4dCB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy5jYW5jZWxCdXR0b25UZXh0IHx8ICdDQU5DRUwnLFxuICAgICAgICAgICAgJ2FsZXJ0dHlwZScgOiBvcHRpb25zLmFsZXJ0dHlwZSB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy5hbGVydHR5cGUgfHwgJ2luZm9ybWF0aW9uJyxcbiAgICAgICAgICAgIG9uT2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgYWN0aW9uIGRpYWxvZyBhZnRlciB0cmlnZ2VyaW5nIG9uT2sgY2FsbGJhY2sgZXZlbnRcbiAgICAgICAgICAgICAgICBkaWFsb2dTZXJ2aWNlLmNsb3NlKGRpYWxvZ0lkLCB1bmRlZmluZWQsIGNsb3NlQ2FsbEJhY2tGbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKCdvbkNhbmNlbCcsIHZhcmlhYmxlLCBvcHRpb25zLmRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBhY3Rpb24gZGlhbG9nIGFmdGVyIHRyaWdnZXJpbmcgb25DYW5jZWwgY2FsbGJhY2sgZXZlbnRcbiAgICAgICAgICAgICAgICBkaWFsb2dTZXJ2aWNlLmNsb3NlKGRpYWxvZ0lkLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKCdvbkNsb3NlJywgdmFyaWFibGUsIG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlWaWFEaWFsb2codmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaXNQcmVmYWJUeXBlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdQUkVGQUInO1xuICAgICAgICBjb25zdCBkaWFsb2dQcmVmaXggPSBpc1ByZWZhYlR5cGUgPyAnUHJlZmFiJyA6ICdDb21tb24nO1xuICAgICAgICBjb25zdCBkaWFsb2dJZCA9IGRpYWxvZ1ByZWZpeCArIGNhcGl0YWxpemUodmFyaWFibGUub3BlcmF0aW9uKSArICdEaWFsb2cnO1xuICAgICAgICBjb25zdCBjbG9zZUNhbGxCYWNrRm4gPSAoKSA9PiBpbml0aWF0ZUNhbGxiYWNrKCdvbk9rJywgdmFyaWFibGUsIG9wdGlvbnMuZGF0YSk7XG5cblxuICAgICAgICBsZXQgZGlhbG9nQ29uZmlnOiBhbnkgPSB0aGlzLmdldERpYWxvZ0NvbmZpZyh2YXJpYWJsZSwgb3B0aW9ucywgZGlhbG9nSWQsIGNsb3NlQ2FsbEJhY2tGbik7XG4gICAgICAgIGRpYWxvZ0NvbmZpZyA9IGlzUHJlZmFiVHlwZSA/IGRpYWxvZ0NvbmZpZyA6IHsgbm90aWZpY2F0aW9uOiBkaWFsb2dDb25maWcgfTtcbiAgICAgICAgZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0lkLCB1bmRlZmluZWQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgfVxuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQVUJMSUMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuXG4gICAgbm90aWZ5KHZhcmlhYmxlLCBvcHRpb25zLCBzdWNjZXNzLCBlcnJvcikge1xuICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB2YXJpYWJsZS5vcGVyYXRpb247XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICd0b2FzdCcpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5VmlhVG9hc3Rlcih2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVZpYURpYWxvZyh2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlKHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy50ZXh0O1xuICAgIH1cblxuICAgIHNldE1lc3NhZ2UodmFyaWFibGUsIHRleHQpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHRleHQpKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhQmluZGluZy50ZXh0ID0gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcudGV4dDtcbiAgICB9XG5cbiAgICBnZXRPa0J1dHRvblRleHQodmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLm9rQnV0dG9uVGV4dDtcbiAgICB9XG4gICAgc2V0T2tCdXR0b25UZXh0KHZhcmlhYmxlLCB0ZXh0KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh0ZXh0KSkge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcub2tCdXR0b25UZXh0ID0gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcub2tCdXR0b25UZXh0O1xuICAgIH1cblxuICAgIGdldFRvYXN0ZXJEdXJhdGlvbih2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcuZHVyYXRpb247XG4gICAgfVxuXG4gICAgc2V0VG9hc3RlckR1cmF0aW9uKHZhcmlhYmxlLCBkdXJhdGlvbikge1xuICAgICAgICB2YXJpYWJsZS5kYXRhQmluZGluZy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcuZHVyYXRpb247XG4gICAgfVxuXG4gICAgZ2V0VG9hc3RlckNsYXNzKHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5jbGFzcztcbiAgICB9XG5cbiAgICBzZXRUb2FzdGVyQ2xhc3ModmFyaWFibGUsIHR5cGUpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHR5cGUpKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhQmluZGluZy5jbGFzcyA9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNsYXNzO1xuICAgIH1cblxuICAgIGdldFRvYXN0ZXJQb3NpdGlvbih2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcuY2xhc3M7XG4gICAgfVxuXG4gICAgc2V0VG9hc3RlclBvc2l0aW9uKHZhcmlhYmxlLCBwb3NpdGlvbikge1xuICAgICAgICBpZiAoaXNTdHJpbmcocG9zaXRpb24pKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5kYXRhQmluZGluZy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBnZXRBbGVydFR5cGUodmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmFsZXJ0dHlwZTtcbiAgICB9XG5cbiAgICBzZXRBbGVydFR5cGUodmFyaWFibGUsIGFsZXJ0dHlwZSkge1xuICAgICAgICBpZiAoaXNTdHJpbmcoYWxlcnR0eXBlKSkge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcuYWxlcnR0eXBlID0gYWxlcnR0eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5hbGVydHR5cGU7XG4gICAgfVxuXG4gICAgZ2V0Q2FuY2VsQnV0dG9uVGV4dCh2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcuY2FuY2VsQnV0dG9uVGV4dDtcbiAgICB9XG5cbiAgICBzZXRDYW5jZWxCdXR0b25UZXh0KHZhcmlhYmxlLCB0ZXh0KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh0ZXh0KSkge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcuY2FuY2VsQnV0dG9uVGV4dCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNhbmNlbEJ1dHRvblRleHQ7XG4gICAgfVxufVxuIl19
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWFjdGlvbi5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy9tYW5hZ2VyL2FjdGlvbi9ub3RpZmljYXRpb24tYWN0aW9uLm1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFL0MsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGlCQUFpQjtJQUVwRCxjQUFjLENBQUMsUUFBUTtRQUMzQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBUTtRQUMxQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTztRQUN0QyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQzlFLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUNuRCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFDckIsYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElB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LENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDO0lBQ2pELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VBY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9iYXNlLWFjdGlvbi5tYW5hZ2VyJztcbmltcG9ydCB7IGluaXRpYXRlQ2FsbGJhY2ssIHRvYXN0ZXJTZXJ2aWNlLCBkaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbC92YXJpYWJsZS92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Y2FwaXRhbGl6ZSwgaXNTdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkFjdGlvbk1hbmFnZXIgZXh0ZW5kcyBCYXNlQWN0aW9uTWFuYWdlciB7XG5cbiAgICBwcml2YXRlIG9uVG9hc3RlckNsaWNrKHZhcmlhYmxlKSB7XG4gICAgICAgIGluaXRpYXRlQ2FsbGJhY2soJ29uQ2xpY2snLCB2YXJpYWJsZSwgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ub2FzdGVySGlkZSh2YXJpYWJsZSkge1xuICAgICAgICBpbml0aWF0ZUNhbGxiYWNrKCdvbkhpZGUnLCB2YXJpYWJsZSwgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5VmlhVG9hc3Rlcih2YXJpYWJsZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB0eXBlID0gKG9wdGlvbnMuY2xhc3MgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcuY2xhc3MgfHwgJ2luZm8nKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgYm9keSA9IG9wdGlvbnMubWVzc2FnZSB8fCB2YXJpYWJsZS5kYXRhQmluZGluZy50ZXh0LFxuICAgICAgICAgICAgdGl0bGUgPSBvcHRpb25zLnRpdGxlLFxuICAgICAgICAgICAgcG9zaXRpb25DbGFzcyA9ICd0b2FzdC0nICsgKG9wdGlvbnMucG9zaXRpb24gfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcudG9hc3RlclBvc2l0aW9uIHx8ICdib3R0b20gcmlnaHQnKS5yZXBsYWNlKCcgJywgJy0nKSxcbiAgICAgICAgICAgIHBhcnRpYWxQYWdlID0gdmFyaWFibGUuZGF0YUJpbmRpbmcucGFnZSxcbiAgICAgICAgICAgIERFRkFVTFRfRFVSQVRJT04gPSAzMDAwO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUludChvcHRpb25zLmR1cmF0aW9uIHx8IHZhcmlhYmxlLmRhdGFCaW5kaW5nLmR1cmF0aW9uLCBudWxsKSxcbiAgICAgICAgICAgIHRvYXN0ZXI7XG5cbiAgICAgICAgLy8gZHVyYXRpb25cbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgZHVyYXRpb24gPSAoZHVyYXRpb24gIT09IDAgJiYgdHlwZSA9PT0gJ3N1Y2Nlc3MnKSA/IERFRkFVTFRfRFVSQVRJT04gOiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YXJpYWJsZS5kYXRhQmluZGluZy5jb250ZW50ICYmIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNvbnRlbnQgPT09ICdwYWdlJyAmJiBwYXJ0aWFsUGFnZSkge1xuICAgICAgICAgICAgdG9hc3RlciA9IHRvYXN0ZXJTZXJ2aWNlLnNob3dDdXN0b20ocGFydGlhbFBhZ2UsIHtwb3NpdGlvbkNsYXNzOiBwb3NpdGlvbkNsYXNzLCB0aW1lT3V0OiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICBwYXJ0aWFsUGFyYW1zOiB2YXJpYWJsZS5fYmluZGRhdGFTZXQsIGNvbnRleHQ6IHZhcmlhYmxlLl9jb250ZXh0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2FzdGVyID0gdG9hc3RlclNlcnZpY2Uuc2hvdyh0eXBlLCB0aXRsZSwgYm9keSB8fCBudWxsLCB7cG9zaXRpb25DbGFzczogcG9zaXRpb25DbGFzcywgdGltZU91dDogZHVyYXRpb24sIGVuYWJsZUh0bWw6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGxiYWNrc1xuICAgICAgICBpZiAodmFyaWFibGUub25DbGljaykge1xuICAgICAgICAgICAgdG9hc3Rlci5vblRhcC5zdWJzY3JpYmUoIHRoaXMub25Ub2FzdGVyQ2xpY2suYmluZCh0aGlzLCB2YXJpYWJsZSkgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFyaWFibGUub25IaWRlKSB7XG4gICAgICAgICAgICB0b2FzdGVyLm9uSGlkZGVuLnN1YnNjcmliZSggdGhpcy5vblRvYXN0ZXJIaWRlLmJpbmQodGhpcywgdmFyaWFibGUpICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERpYWxvZ0NvbmZpZyh2YXJpYWJsZSwgb3B0aW9ucywgZGlhbG9nSWQsIGNsb3NlQ2FsbEJhY2tGbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RpdGxlJyA6IG9wdGlvbnMudGl0bGUgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcudGl0bGUsXG4gICAgICAgICAgICAndGV4dCcgOiBvcHRpb25zLm1lc3NhZ2UgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcudGV4dCxcbiAgICAgICAgICAgICdva0J1dHRvblRleHQnIDogb3B0aW9ucy5va0J1dHRvblRleHQgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcub2tCdXR0b25UZXh0IHx8ICdPSycsXG4gICAgICAgICAgICAnY2FuY2VsQnV0dG9uVGV4dCcgOiBvcHRpb25zLmNhbmNlbEJ1dHRvblRleHQgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcuY2FuY2VsQnV0dG9uVGV4dCB8fCAnQ0FOQ0VMJyxcbiAgICAgICAgICAgICdhbGVydHR5cGUnIDogb3B0aW9ucy5hbGVydHR5cGUgfHwgdmFyaWFibGUuZGF0YUJpbmRpbmcuYWxlcnR0eXBlIHx8ICdpbmZvcm1hdGlvbicsXG4gICAgICAgICAgICBvbk9rOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFjdGlvbiBkaWFsb2cgYWZ0ZXIgdHJpZ2dlcmluZyBvbk9rIGNhbGxiYWNrIGV2ZW50XG4gICAgICAgICAgICAgICAgZGlhbG9nU2VydmljZS5jbG9zZShkaWFsb2dJZCwgdW5kZWZpbmVkLCBjbG9zZUNhbGxCYWNrRm4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5pdGlhdGVDYWxsYmFjaygnb25DYW5jZWwnLCB2YXJpYWJsZSwgb3B0aW9ucy5kYXRhKTtcbiAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgYWN0aW9uIGRpYWxvZyBhZnRlciB0cmlnZ2VyaW5nIG9uQ2FuY2VsIGNhbGxiYWNrIGV2ZW50XG4gICAgICAgICAgICAgICAgZGlhbG9nU2VydmljZS5jbG9zZShkaWFsb2dJZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5pdGlhdGVDYWxsYmFjaygnb25DbG9zZScsIHZhcmlhYmxlLCBvcHRpb25zLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5VmlhRGlhbG9nKHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlzUHJlZmFiVHlwZSA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnUFJFRkFCJztcbiAgICAgICAgY29uc3QgZGlhbG9nUHJlZml4ID0gaXNQcmVmYWJUeXBlID8gJ1ByZWZhYicgOiAnQ29tbW9uJztcbiAgICAgICAgY29uc3QgZGlhbG9nSWQgPSBkaWFsb2dQcmVmaXggKyBjYXBpdGFsaXplKHZhcmlhYmxlLm9wZXJhdGlvbikgKyAnRGlhbG9nJztcbiAgICAgICAgY29uc3QgY2xvc2VDYWxsQmFja0ZuID0gKCkgPT4gaW5pdGlhdGVDYWxsYmFjaygnb25PaycsIHZhcmlhYmxlLCBvcHRpb25zLmRhdGEpO1xuXG5cbiAgICAgICAgbGV0IGRpYWxvZ0NvbmZpZzogYW55ID0gdGhpcy5nZXREaWFsb2dDb25maWcodmFyaWFibGUsIG9wdGlvbnMsIGRpYWxvZ0lkLCBjbG9zZUNhbGxCYWNrRm4pO1xuICAgICAgICBkaWFsb2dDb25maWcgPSBpc1ByZWZhYlR5cGUgPyBkaWFsb2dDb25maWcgOiB7IG5vdGlmaWNhdGlvbjogZGlhbG9nQ29uZmlnIH07XG4gICAgICAgIGRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dJZCwgdW5kZWZpbmVkLCBkaWFsb2dDb25maWcpO1xuICAgIH1cblxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUFVCTElDICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cblxuICAgIG5vdGlmeSh2YXJpYWJsZSwgb3B0aW9ucywgc3VjY2VzcywgZXJyb3IpIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gdmFyaWFibGUub3BlcmF0aW9uO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAndG9hc3QnKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeVZpYVRvYXN0ZXIodmFyaWFibGUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlWaWFEaWFsb2codmFyaWFibGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TWVzc2FnZSh2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcudGV4dDtcbiAgICB9XG5cbiAgICBzZXRNZXNzYWdlKHZhcmlhYmxlLCB0ZXh0KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh0ZXh0KSkge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcudGV4dCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLnRleHQ7XG4gICAgfVxuXG4gICAgZ2V0T2tCdXR0b25UZXh0KHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5va0J1dHRvblRleHQ7XG4gICAgfVxuICAgIHNldE9rQnV0dG9uVGV4dCh2YXJpYWJsZSwgdGV4dCkge1xuICAgICAgICBpZiAoaXNTdHJpbmcodGV4dCkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFCaW5kaW5nLm9rQnV0dG9uVGV4dCA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLm9rQnV0dG9uVGV4dDtcbiAgICB9XG5cbiAgICBnZXRUb2FzdGVyRHVyYXRpb24odmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNldFRvYXN0ZXJEdXJhdGlvbih2YXJpYWJsZSwgZHVyYXRpb24pIHtcbiAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcuZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmR1cmF0aW9uO1xuICAgIH1cblxuICAgIGdldFRvYXN0ZXJDbGFzcyh2YXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcuY2xhc3M7XG4gICAgfVxuXG4gICAgc2V0VG9hc3RlckNsYXNzKHZhcmlhYmxlLCB0eXBlKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyh0eXBlKSkge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcuY2xhc3MgPSB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5jbGFzcztcbiAgICB9XG5cbiAgICBnZXRUb2FzdGVyUG9zaXRpb24odmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNsYXNzO1xuICAgIH1cblxuICAgIHNldFRvYXN0ZXJQb3NpdGlvbih2YXJpYWJsZSwgcG9zaXRpb24pIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgdmFyaWFibGUuZGF0YUJpbmRpbmcucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcucG9zaXRpb247XG4gICAgfVxuXG4gICAgZ2V0QWxlcnRUeXBlKHZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5hbGVydHR5cGU7XG4gICAgfVxuXG4gICAgc2V0QWxlcnRUeXBlKHZhcmlhYmxlLCBhbGVydHR5cGUpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGFsZXJ0dHlwZSkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmFsZXJ0dHlwZSA9IGFsZXJ0dHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFyaWFibGUuZGF0YUJpbmRpbmcuYWxlcnR0eXBlO1xuICAgIH1cblxuICAgIGdldENhbmNlbEJ1dHRvblRleHQodmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNhbmNlbEJ1dHRvblRleHQ7XG4gICAgfVxuXG4gICAgc2V0Q2FuY2VsQnV0dG9uVGV4dCh2YXJpYWJsZSwgdGV4dCkge1xuICAgICAgICBpZiAoaXNTdHJpbmcodGV4dCkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLmRhdGFCaW5kaW5nLmNhbmNlbEJ1dHRvblRleHQgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YXJpYWJsZS5kYXRhQmluZGluZy5jYW5jZWxCdXR0b25UZXh0O1xuICAgIH1cbn1cbiJdfQ==
@@ -43,20 +43,7 @@ export class BaseVariableManager {
43
43
  // send the notification manually to hide any context spinners on page.
44
44
  // [TODO]: any spinners on widget listening on this variable will also go off. Need to see an approach to sovle that.
45
45
  this.notifyInflight(variable, false, err);
46
- // MEMORY LEAK FIX: Store subscription for cleanup (though it's a one-time promise resolver)
47
- const error401Subscription = err._401Subscriber.asObservable().subscribe(response => {
48
- resolve(response);
49
- // Unsubscribe after resolution
50
- if (error401Subscription && !error401Subscription.closed) {
51
- error401Subscription.unsubscribe();
52
- }
53
- }, e => {
54
- reject(e);
55
- // Unsubscribe after rejection
56
- if (error401Subscription && !error401Subscription.closed) {
57
- error401Subscription.unsubscribe();
58
- }
59
- });
46
+ err._401Subscriber.asObservable().subscribe(response => resolve(response), e => reject(e));
60
47
  }
61
48
  else {
62
49
  reject(err);
@@ -78,4 +65,4 @@ export class BaseVariableManager {
78
65
  return options;
79
66
  }
80
67
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12YXJpYWJsZS5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy9tYW5hZ2VyL3ZhcmlhYmxlL2Jhc2UtdmFyaWFibGUubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE1BQU0sT0FBZ0IsbUJBQW1CO0lBRXJDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsVUFBVyxFQUFFLFVBQVc7UUFDMUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFlLEVBQUUsSUFBVSxFQUFFLE9BQWE7UUFDL0QsVUFBVSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtZQUN2QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQVk7UUFDMUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3ZHLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxXQUFXLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsdUVBQXVFO29CQUN2RSxxSEFBcUg7b0JBQ3JILElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDMUMsNEZBQTRGO29CQUM1RixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUNwRSxRQUFRLENBQUMsRUFBRTt3QkFDUCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2xCLCtCQUErQjt3QkFDL0IsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUN2RCxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDdkMsQ0FBQztvQkFDTCxDQUFDLEVBQ0QsQ0FBQyxDQUFDLEVBQUU7d0JBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNWLDhCQUE4Qjt3QkFDOUIsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUN2RCxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDdkMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDWCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsTUFBVyxFQUFFLFdBQWtCO1FBQ2xELElBQUksT0FBTyxHQUFvQixFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMzQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHR0cFNlcnZpY2UsIHByb2Nlc3NCaW5kaW5nIH0gZnJvbSAnLi4vLi4vdXRpbC92YXJpYWJsZS92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgYXBwTWFuYWdlcn0gZnJvbSAnLi8uLi8uLi91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBBZHZhbmNlZE9wdGlvbnMgfSBmcm9tICcuLi8uLi9hZHZhbmNlZC1vcHRpb25zJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVmFyaWFibGVNYW5hZ2VyIHtcblxuICAgIGluaXRCaW5kaW5nKHZhcmlhYmxlLCBiaW5kU291cmNlPywgYmluZFRhcmdldD8pIHtcbiAgICAgICAgcHJvY2Vzc0JpbmRpbmcodmFyaWFibGUsIHZhcmlhYmxlLl9jb250ZXh0LCBiaW5kU291cmNlLCBiaW5kVGFyZ2V0KTtcbiAgICB9XG5cbiAgICBub3RpZnlJbmZsaWdodCh2YXJpYWJsZSwgc3RhdHVzOiBib29sZWFuLCBkYXRhPzogYW55LCBvcHRpb25zPzogYW55KSB7XG4gICAgICAgIGFwcE1hbmFnZXIubm90aWZ5KCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCB7XG4gICAgICAgICAgICB2YXJpYWJsZTogdmFyaWFibGUsXG4gICAgICAgICAgICBhY3RpdmU6IHN0YXR1cyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHZhcmlhYmxlIHBhcmFtZXRlciByZXF1ZXN0VHJhY2tJZCB0byBYLVdNLVJlcXVlc3QtVHJhY2stSWQgd2hpY2ggaXMgcmVjZWl2ZWQgaW4gdGhlIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICovXG4gICAgc2V0UmVxdWVzdFRyYWNrSWQocmVzcG9uc2UsIHZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RUcmFja0lkID0gcmVzcG9uc2U/LmhlYWRlcnM/LmdldCgneC13bS1yZXF1ZXN0LXRyYWNrLWlkJyk7XG4gICAgICAgIGlmIChyZXF1ZXN0VHJhY2tJZCkge1xuICAgICAgICAgICAgdmFyaWFibGUuX3JlcXVlc3RUcmFja0lkID0gcmVxdWVzdFRyYWNrSWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBtYWtlcyB0aGUgZmluYWwgYW5ndWxhciBodHRwIGNhbGwgdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUuXG4gICAgICogV2UgYXR0YWNoIHRoaXMgb2JzZXJ2YWJsZSB0byB2YXJpYWJsZSB0byBjYW5jZWwgYSBuZXR3b3JrIGNhbGxcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtc1xuICAgICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBkYk9wZXJhdGlvblxuICAgICAqL1xuICAgIGh0dHBDYWxsKHJlcXVlc3RQYXJhbXMsIHZhcmlhYmxlLCBwYXJhbXM/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhcmlhYmxlLl9vYnNlcnZhYmxlID0gaHR0cFNlcnZpY2Uuc2VuZENhbGxBc09ic2VydmFibGUocmVxdWVzdFBhcmFtcywgcGFyYW1zKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlcXVlc3RUcmFja0lkKHJlc3BvbnNlLCB2YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVxdWVzdFRyYWNrSWQoZXJyLCB2YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKGh0dHBTZXJ2aWNlLmlzUGxhdGZvcm1TZXNzaW9uVGltZW91dChlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiBtYW51YWxseSB0byBoaWRlIGFueSBjb250ZXh0IHNwaW5uZXJzIG9uIHBhZ2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIFtUT0RPXTogYW55IHNwaW5uZXJzIG9uIHdpZGdldCBsaXN0ZW5pbmcgb24gdGhpcyB2YXJpYWJsZSB3aWxsIGFsc28gZ28gb2ZmLiBOZWVkIHRvIHNlZSBhbiBhcHByb2FjaCB0byBzb3ZsZSB0aGF0LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUluZmxpZ2h0KHZhcmlhYmxlLCBmYWxzZSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBzdWJzY3JpcHRpb24gZm9yIGNsZWFudXAgKHRob3VnaCBpdCdzIGEgb25lLXRpbWUgcHJvbWlzZSByZXNvbHZlcilcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3I0MDFTdWJzY3JpcHRpb24gPSBlcnIuXzQwMVN1YnNjcmliZXIuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuc3Vic2NyaWJlIGFmdGVyIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3I0MDFTdWJzY3JpcHRpb24gJiYgIWVycm9yNDAxU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjQwMVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5zdWJzY3JpYmUgYWZ0ZXIgcmVqZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yNDAxU3Vic2NyaXB0aW9uICYmICFlcnJvcjQwMVN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I0MDFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIGZvciB2YXJpYWJsZSBjYWxsYmFja3MuXG4gICAgICogQHBhcmFtIHhock9iaiwgVGhlIHhock9iaiB0byBiZSBwYXNzZWRcbiAgICAgKiBAcGFyYW0gbW9yZU9wdGlvbnMsIGFueSBvdGhlciBpbmZvIHRvIGJlIHBhc3NlZCBpbiB0aGUgb3B0aW9ucyBwYXJhbVxuICAgICAqL1xuICAgIHByZXBhcmVDYWxsYmFja09wdGlvbnMoeGhyT2JqOiBhbnksIG1vcmVPcHRpb25zPyA6IGFueSk6IEFkdmFuY2VkT3B0aW9ucyB7XG4gICAgICAgIGxldCBvcHRpb25zOiBBZHZhbmNlZE9wdGlvbnMgPSB7fTtcbiAgICAgICAgb3B0aW9uc1sneGhyT2JqJ10gPSB4aHJPYmo7XG4gICAgICAgIGlmIChtb3JlT3B0aW9ucykge1xuICAgICAgICAgICAgZXh0ZW5kKG9wdGlvbnMsIG1vcmVPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG59XG4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12YXJpYWJsZS5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFyaWFibGVzL3NyYy9tYW5hZ2VyL3ZhcmlhYmxlL2Jhc2UtdmFyaWFibGUubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWpDLE1BQU0sT0FBZ0IsbUJBQW1CO0lBRXJDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsVUFBVyxFQUFFLFVBQVc7UUFDMUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFlLEVBQUUsSUFBVSxFQUFFLE9BQWE7UUFDL0QsVUFBVSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtZQUN2QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQVk7UUFDMUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3ZHLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QixDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxXQUFXLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsdUVBQXVFO29CQUN2RSxxSEFBcUg7b0JBQ3JILElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDMUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQ3ZDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUM3QixDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsTUFBVyxFQUFFLFdBQWtCO1FBQ2xELElBQUksT0FBTyxHQUFvQixFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMzQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHR0cFNlcnZpY2UsIHByb2Nlc3NCaW5kaW5nIH0gZnJvbSAnLi4vLi4vdXRpbC92YXJpYWJsZS92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgYXBwTWFuYWdlcn0gZnJvbSAnLi8uLi8uLi91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBBZHZhbmNlZE9wdGlvbnMgfSBmcm9tICcuLi8uLi9hZHZhbmNlZC1vcHRpb25zJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVmFyaWFibGVNYW5hZ2VyIHtcblxuICAgIGluaXRCaW5kaW5nKHZhcmlhYmxlLCBiaW5kU291cmNlPywgYmluZFRhcmdldD8pIHtcbiAgICAgICAgcHJvY2Vzc0JpbmRpbmcodmFyaWFibGUsIHZhcmlhYmxlLl9jb250ZXh0LCBiaW5kU291cmNlLCBiaW5kVGFyZ2V0KTtcbiAgICB9XG5cbiAgICBub3RpZnlJbmZsaWdodCh2YXJpYWJsZSwgc3RhdHVzOiBib29sZWFuLCBkYXRhPzogYW55LCBvcHRpb25zPzogYW55KSB7XG4gICAgICAgIGFwcE1hbmFnZXIubm90aWZ5KCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCB7XG4gICAgICAgICAgICB2YXJpYWJsZTogdmFyaWFibGUsXG4gICAgICAgICAgICBhY3RpdmU6IHN0YXR1cyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIHZhcmlhYmxlIHBhcmFtZXRlciByZXF1ZXN0VHJhY2tJZCB0byBYLVdNLVJlcXVlc3QtVHJhY2stSWQgd2hpY2ggaXMgcmVjZWl2ZWQgaW4gdGhlIHJlc3BvbnNlIGhlYWRlcnMuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICovXG4gICAgc2V0UmVxdWVzdFRyYWNrSWQocmVzcG9uc2UsIHZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RUcmFja0lkID0gcmVzcG9uc2U/LmhlYWRlcnM/LmdldCgneC13bS1yZXF1ZXN0LXRyYWNrLWlkJyk7XG4gICAgICAgIGlmIChyZXF1ZXN0VHJhY2tJZCkge1xuICAgICAgICAgICAgdmFyaWFibGUuX3JlcXVlc3RUcmFja0lkID0gcmVxdWVzdFRyYWNrSWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBtYWtlcyB0aGUgZmluYWwgYW5ndWxhciBodHRwIGNhbGwgdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUuXG4gICAgICogV2UgYXR0YWNoIHRoaXMgb2JzZXJ2YWJsZSB0byB2YXJpYWJsZSB0byBjYW5jZWwgYSBuZXR3b3JrIGNhbGxcbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtc1xuICAgICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgICAqIEBwYXJhbSBkYk9wZXJhdGlvblxuICAgICAqL1xuICAgIGh0dHBDYWxsKHJlcXVlc3RQYXJhbXMsIHZhcmlhYmxlLCBwYXJhbXM/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhcmlhYmxlLl9vYnNlcnZhYmxlID0gaHR0cFNlcnZpY2Uuc2VuZENhbGxBc09ic2VydmFibGUocmVxdWVzdFBhcmFtcywgcGFyYW1zKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlcXVlc3RUcmFja0lkKHJlc3BvbnNlLCB2YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVxdWVzdFRyYWNrSWQoZXJyLCB2YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKGh0dHBTZXJ2aWNlLmlzUGxhdGZvcm1TZXNzaW9uVGltZW91dChlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiBtYW51YWxseSB0byBoaWRlIGFueSBjb250ZXh0IHNwaW5uZXJzIG9uIHBhZ2UuXG4gICAgICAgICAgICAgICAgICAgIC8vIFtUT0RPXTogYW55IHNwaW5uZXJzIG9uIHdpZGdldCBsaXN0ZW5pbmcgb24gdGhpcyB2YXJpYWJsZSB3aWxsIGFsc28gZ28gb2ZmLiBOZWVkIHRvIHNlZSBhbiBhcHByb2FjaCB0byBzb3ZsZSB0aGF0LlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUluZmxpZ2h0KHZhcmlhYmxlLCBmYWxzZSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgZXJyLl80MDFTdWJzY3JpYmVyLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0+IHJlc29sdmUocmVzcG9uc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9PiByZWplY3QoZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBwcmVwYXJlcyB0aGUgb3B0aW9ucyBwYXJhbWV0ZXIgZm9yIHZhcmlhYmxlIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0geGhyT2JqLCBUaGUgeGhyT2JqIHRvIGJlIHBhc3NlZFxuICAgICAqIEBwYXJhbSBtb3JlT3B0aW9ucywgYW55IG90aGVyIGluZm8gdG8gYmUgcGFzc2VkIGluIHRoZSBvcHRpb25zIHBhcmFtXG4gICAgICovXG4gICAgcHJlcGFyZUNhbGxiYWNrT3B0aW9ucyh4aHJPYmo6IGFueSwgbW9yZU9wdGlvbnM/IDogYW55KTogQWR2YW5jZWRPcHRpb25zIHtcbiAgICAgICAgbGV0IG9wdGlvbnM6IEFkdmFuY2VkT3B0aW9ucyA9IHt9O1xuICAgICAgICBvcHRpb25zWyd4aHJPYmonXSA9IHhock9iajtcbiAgICAgICAgaWYgKG1vcmVPcHRpb25zKSB7XG4gICAgICAgICAgICBleHRlbmQob3B0aW9ucywgbW9yZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbn1cbiJdfQ==