@mediusinc/mng-commons 0.2.4 → 0.2.8

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 (250) hide show
  1. package/assets/i18n/en.json +5 -1
  2. package/assets/i18n/sl.json +6 -2
  3. package/esm2020/lib/api/models/builders/query-param.builder.mjs +1 -1
  4. package/esm2020/lib/api/models/filter-match-type.model.mjs +1 -1
  5. package/esm2020/lib/api/models/filter-param.model.mjs +16 -27
  6. package/esm2020/lib/api/models/mappers.mjs +7 -7
  7. package/esm2020/lib/api/models/query-mode.model.mjs +1 -1
  8. package/esm2020/lib/api/models/query-param.model.mjs +38 -37
  9. package/esm2020/lib/api/models/query-result.model.mjs +14 -13
  10. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +28 -21
  11. package/esm2020/lib/api/utils/medius-rest.util.mjs +11 -7
  12. package/esm2020/lib/api/utils/object-serializer.util.mjs +23 -21
  13. package/esm2020/lib/components/action/action.component.mjs +10 -7
  14. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +16 -13
  15. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  16. package/esm2020/lib/components/action/models/action-execution.model.mjs +1 -1
  17. package/esm2020/lib/components/action/route/action-route.component.mjs +8 -6
  18. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +16 -14
  19. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +16 -15
  20. package/esm2020/lib/components/form/editor/form-editor.component.mjs +21 -24
  21. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
  22. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
  23. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +4 -4
  24. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +8 -4
  25. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +13 -14
  26. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +12 -11
  27. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +4 -4
  28. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +1 -3
  29. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +1 -3
  30. package/esm2020/lib/components/form/models/form-editor.event.mjs +1 -1
  31. package/esm2020/lib/components/layout/breadcrumb.component.mjs +3 -3
  32. package/esm2020/lib/components/layout/footer.component.mjs +3 -3
  33. package/esm2020/lib/components/layout/main-layout.component.mjs +4 -4
  34. package/esm2020/lib/components/layout/menu-item.component.mjs +36 -34
  35. package/esm2020/lib/components/layout/menu.component.mjs +3 -3
  36. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +4 -1
  37. package/esm2020/lib/components/layout/topbar.component.mjs +5 -4
  38. package/esm2020/lib/components/tableview/index.mjs +2 -1
  39. package/esm2020/lib/components/tableview/models/table.event.mjs +1 -1
  40. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +4 -4
  41. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +33 -0
  42. package/esm2020/lib/components/tableview/services/tableview.component.service.mjs +9 -5
  43. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +23 -11
  44. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +1 -1
  45. package/esm2020/lib/components/tableview/table/table.component.mjs +27 -26
  46. package/esm2020/lib/components/tableview/tableview.component.mjs +11 -3
  47. package/esm2020/lib/config/formly.config.mjs +30 -22
  48. package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
  49. package/esm2020/lib/data-providers/base.data-provider.mjs +1 -1
  50. package/esm2020/lib/data-providers/editor.data-provider.mjs +2 -2
  51. package/esm2020/lib/data-providers/lookup.data-provider.mjs +1 -1
  52. package/esm2020/lib/data-providers/tableview.data-provider.mjs +2 -2
  53. package/esm2020/lib/descriptors/action.descriptor.mjs +3 -5
  54. package/esm2020/lib/descriptors/editor.descriptor.mjs +21 -9
  55. package/esm2020/lib/descriptors/field.validator.mjs +1 -1
  56. package/esm2020/lib/descriptors/lookup.descriptor.mjs +1 -1
  57. package/esm2020/lib/descriptors/model.descriptor.mjs +3 -3
  58. package/esm2020/lib/descriptors/table.descriptor.mjs +28 -2
  59. package/esm2020/lib/descriptors/tableview.descriptor.mjs +2 -2
  60. package/esm2020/lib/directives/component.directive.mjs +2 -2
  61. package/esm2020/lib/directives/template.directive.mjs +2 -3
  62. package/esm2020/lib/mng-commons.module.mjs +33 -41
  63. package/esm2020/lib/models/index.mjs +1 -2
  64. package/esm2020/lib/models/user.model.mjs +1 -1
  65. package/esm2020/lib/pipes/boolean.pipe.mjs +1 -1
  66. package/esm2020/lib/pipes/property-path.pipe.mjs +1 -1
  67. package/esm2020/lib/router/index.mjs +2 -0
  68. package/esm2020/lib/router/models/index.mjs +2 -0
  69. package/esm2020/lib/router/models/router.model.mjs +2 -0
  70. package/esm2020/lib/router/route-builder.mjs +293 -0
  71. package/esm2020/lib/services/action.service.mjs +19 -15
  72. package/esm2020/lib/services/commons.service.mjs +28 -36
  73. package/esm2020/lib/services/configuration.service.mjs +3 -4
  74. package/esm2020/lib/services/navigation.service.mjs +2 -2
  75. package/esm2020/lib/services/providers/config-service.provider.mjs +2 -2
  76. package/esm2020/lib/services/providers/formly-config.provider.mjs +1 -1
  77. package/esm2020/lib/services/tokens/browser-storage.token.mjs +1 -1
  78. package/esm2020/lib/types/type.decorator.mjs +1 -1
  79. package/esm2020/lib/types/type.model.mjs +1 -1
  80. package/esm2020/lib/utils/editor-formly.util.mjs +7 -21
  81. package/esm2020/lib/utils/i18n.util.mjs +2 -2
  82. package/esm2020/lib/utils/model.util.mjs +1 -1
  83. package/esm2020/lib/utils/route.util.mjs +24 -0
  84. package/esm2020/lib/utils/toast.util.mjs +3 -2
  85. package/esm2020/lib/utils/type.util.mjs +2 -1
  86. package/esm2020/public-api.mjs +2 -1
  87. package/fesm2015/mediusinc-mng-commons.mjs +3409 -2999
  88. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  89. package/fesm2020/mediusinc-mng-commons.mjs +3395 -2984
  90. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  91. package/lib/api/models/filter-param.model.d.ts +1 -1
  92. package/lib/api/services/crud-api.abstract.service.d.ts +6 -6
  93. package/lib/api/utils/medius-rest.util.d.ts +1 -1
  94. package/lib/api/utils/object-serializer.util.d.ts +5 -5
  95. package/lib/components/action/action.component.d.ts +3 -3
  96. package/lib/components/action/dialog/action-dialog.component.d.ts +9 -8
  97. package/lib/components/action/models/action-execution.model.d.ts +1 -1
  98. package/lib/components/action/route/action-route.component.d.ts +2 -2
  99. package/lib/components/form/autocomplete/autocomplete.component.d.ts +4 -3
  100. package/lib/components/form/dropdown/dropdown.component.d.ts +4 -3
  101. package/lib/components/form/editor/form-editor.component.d.ts +7 -6
  102. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +2 -1
  103. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +2 -1
  104. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +1 -1
  105. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +1 -3
  106. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +1 -3
  107. package/lib/components/layout/main-layout.component.d.ts +3 -3
  108. package/lib/components/layout/menu-item.component.d.ts +7 -7
  109. package/lib/components/layout/services/main-layout.component.service.d.ts +1 -1
  110. package/lib/components/layout/topbar.component.d.ts +4 -4
  111. package/lib/components/tableview/index.d.ts +1 -0
  112. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +4 -3
  113. package/lib/components/tableview/route/tableview-route.component.d.ts +15 -0
  114. package/lib/components/tableview/services/tableview.component.service.d.ts +3 -2
  115. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +5 -0
  116. package/lib/components/tableview/table/table.component.d.ts +21 -19
  117. package/lib/components/tableview/tableview.component.d.ts +6 -4
  118. package/lib/config/formly.config.d.ts +2 -1
  119. package/lib/descriptors/action.descriptor.d.ts +2 -2
  120. package/lib/descriptors/editor.descriptor.d.ts +9 -7
  121. package/lib/descriptors/lookup.descriptor.d.ts +1 -1
  122. package/lib/descriptors/table.descriptor.d.ts +24 -4
  123. package/lib/descriptors/tableview.descriptor.d.ts +1 -1
  124. package/lib/mng-commons.module.d.ts +46 -44
  125. package/lib/models/index.d.ts +0 -1
  126. package/lib/router/index.d.ts +1 -0
  127. package/lib/router/models/index.d.ts +1 -0
  128. package/lib/router/models/router.model.d.ts +22 -0
  129. package/lib/router/route-builder.d.ts +66 -0
  130. package/lib/services/action.service.d.ts +3 -3
  131. package/lib/services/commons.service.d.ts +6 -6
  132. package/lib/services/navigation.service.d.ts +1 -1
  133. package/lib/services/providers/formly-config.provider.d.ts +1 -1
  134. package/lib/utils/editor-formly.util.d.ts +1 -1
  135. package/lib/utils/model.util.d.ts +1 -1
  136. package/lib/utils/route.util.d.ts +4 -0
  137. package/lib/utils/toast.util.d.ts +1 -1
  138. package/package.json +1 -1
  139. package/public-api.d.ts +1 -0
  140. package/scss/common/layout/_breadcrumb.scss +6 -6
  141. package/scss/common/layout/_config.scss +7 -8
  142. package/scss/common/layout/_exception.scss +13 -12
  143. package/scss/common/layout/_footer.scss +3 -3
  144. package/scss/common/layout/_help.scss +8 -9
  145. package/scss/common/layout/_inlinemenu.scss +3 -3
  146. package/scss/common/layout/_invoice.scss +16 -16
  147. package/scss/common/layout/_landing.scss +57 -60
  148. package/scss/common/layout/_loader.scss +0 -1
  149. package/scss/common/layout/_login.scss +3 -4
  150. package/scss/common/layout/_main.scss +3 -3
  151. package/scss/common/layout/_mixins.scss +28 -20
  152. package/scss/common/layout/_rightmenu.scss +5 -5
  153. package/scss/common/layout/_topbar.scss +7 -5
  154. package/scss/common/layout/_typography.scss +11 -6
  155. package/scss/common/layout/_utils.scss +1 -1
  156. package/scss/common/layout/_widgets.scss +20 -19
  157. package/scss/common/layout/menu/_menu_common.scss +6 -6
  158. package/scss/common/layout/menu/_menu_overlay.scss +1 -1
  159. package/scss/common/layout/menu/_menu_sidebar.scss +6 -5
  160. package/scss/common/layout/menu/_menu_slim.scss +2 -3
  161. package/scss/common/layout/menu/_menu_static.scss +1 -1
  162. package/scss/common/layout/menu/_menu_theme.scss +2 -3
  163. package/scss/common/theme/designer/_colors.scss +11 -12
  164. package/scss/common/theme/designer/_common.scss +4 -3
  165. package/scss/common/theme/designer/_mixins.scss +56 -56
  166. package/scss/common/theme/designer/components/button/_button.scss +32 -20
  167. package/scss/common/theme/designer/components/button/_speeddial.scss +1 -1
  168. package/scss/common/theme/designer/components/button/_splitbutton.scss +2 -1
  169. package/scss/common/theme/designer/components/data/_carousel.scss +1 -1
  170. package/scss/common/theme/designer/components/data/_datatable.scss +5 -5
  171. package/scss/common/theme/designer/components/data/_filter.scss +2 -3
  172. package/scss/common/theme/designer/components/data/_fullcalendar.scss +10 -10
  173. package/scss/common/theme/designer/components/data/_orderlist.scss +2 -2
  174. package/scss/common/theme/designer/components/data/_paginator.scss +1 -1
  175. package/scss/common/theme/designer/components/data/_picklist.scss +1 -1
  176. package/scss/common/theme/designer/components/data/_timeline.scss +3 -6
  177. package/scss/common/theme/designer/components/data/_tree.scss +2 -2
  178. package/scss/common/theme/designer/components/data/_treetable.scss +2 -3
  179. package/scss/common/theme/designer/components/input/_autocomplete.scss +8 -8
  180. package/scss/common/theme/designer/components/input/_calendar.scss +6 -6
  181. package/scss/common/theme/designer/components/input/_cascadeselect.scss +1 -1
  182. package/scss/common/theme/designer/components/input/_checkbox.scss +4 -4
  183. package/scss/common/theme/designer/components/input/_chips.scss +4 -4
  184. package/scss/common/theme/designer/components/input/_colorpicker.scss +2 -2
  185. package/scss/common/theme/designer/components/input/_dropdown.scss +2 -2
  186. package/scss/common/theme/designer/components/input/_editor.scss +7 -7
  187. package/scss/common/theme/designer/components/input/_inputgroup.scss +1 -1
  188. package/scss/common/theme/designer/components/input/_inputmask.scss +1 -1
  189. package/scss/common/theme/designer/components/input/_inputnumber.scss +1 -1
  190. package/scss/common/theme/designer/components/input/_inputswitch.scss +2 -2
  191. package/scss/common/theme/designer/components/input/_inputtext.scss +3 -3
  192. package/scss/common/theme/designer/components/input/_listbox.scss +1 -1
  193. package/scss/common/theme/designer/components/input/_multiselect.scss +5 -6
  194. package/scss/common/theme/designer/components/input/_radiobutton.scss +2 -2
  195. package/scss/common/theme/designer/components/input/_rating.scss +1 -1
  196. package/scss/common/theme/designer/components/input/_selectbutton.scss +1 -1
  197. package/scss/common/theme/designer/components/input/_togglebutton.scss +1 -1
  198. package/scss/common/theme/designer/components/input/_treeselect.scss +2 -2
  199. package/scss/common/theme/designer/components/menu/_contextmenu.scss +3 -2
  200. package/scss/common/theme/designer/components/menu/_dock.scss +4 -4
  201. package/scss/common/theme/designer/components/menu/_megamenu.scss +10 -9
  202. package/scss/common/theme/designer/components/menu/_menu.scss +2 -2
  203. package/scss/common/theme/designer/components/menu/_menubar.scss +12 -11
  204. package/scss/common/theme/designer/components/menu/_panelmenu.scss +1 -2
  205. package/scss/common/theme/designer/components/menu/_slidemenu.scss +3 -2
  206. package/scss/common/theme/designer/components/menu/_steps.scss +1 -2
  207. package/scss/common/theme/designer/components/menu/_tieredmenu.scss +3 -2
  208. package/scss/common/theme/designer/components/messages/_message.scss +1 -1
  209. package/scss/common/theme/designer/components/messages/_toast.scss +1 -2
  210. package/scss/common/theme/designer/components/misc/_avatar.scss +1 -1
  211. package/scss/common/theme/designer/components/misc/_badge.scss +1 -1
  212. package/scss/common/theme/designer/components/misc/_blockui.scss +1 -1
  213. package/scss/common/theme/designer/components/misc/_chip.scss +2 -2
  214. package/scss/common/theme/designer/components/misc/_inplace.scss +0 -1
  215. package/scss/common/theme/designer/components/misc/_scrolltop.scss +1 -1
  216. package/scss/common/theme/designer/components/misc/_skeleton.scss +1 -1
  217. package/scss/common/theme/designer/components/misc/_tag.scss +1 -1
  218. package/scss/common/theme/designer/components/misc/_terminal.scss +8 -8
  219. package/scss/common/theme/designer/components/multimedia/_galleria.scss +1 -1
  220. package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +2 -4
  221. package/scss/common/theme/designer/components/overlay/_dialog.scss +3 -3
  222. package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +2 -4
  223. package/scss/common/theme/designer/components/panel/_accordion.scss +2 -2
  224. package/scss/common/theme/designer/components/panel/_divider.scss +1 -1
  225. package/scss/common/theme/designer/components/panel/_scrollpanel.scss +1 -1
  226. package/scss/common/theme/designer/components/panel/_splitter.scss +1 -1
  227. package/scss/common/theme/extensions/_button.scss +18 -6
  228. package/scss/common/theme/extensions/_orderlist.scss +0 -1
  229. package/scss/common/theme/extensions/_picklist.scss +0 -1
  230. package/scss/common/theme/extensions/_tree.scss +0 -1
  231. package/scss/common/variables/layout/_common.scss +9 -9
  232. package/scss/common/variables/layout/_layout_dark.scss +12 -12
  233. package/scss/common/variables/layout/_layout_light.scss +13 -13
  234. package/scss/common/variables/theme/_theme_dark.scss +76 -76
  235. package/scss/common/variables/theme/_theme_light.scss +80 -80
  236. package/scss/layout/default/_mng-variables-layout-dark.scss +1 -1
  237. package/scss/mng-commons-dark.scss +2 -2
  238. package/scss/mng-commons-light.scss +2 -2
  239. package/scss/mng-overrides/_layout_dialog.scss +4 -3
  240. package/scss/mng-overrides/_layout_forms.scss +1 -1
  241. package/scss/mng-overrides/_layout_radio.scss +1 -1
  242. package/scss/mng-overrides/_theme_datepicker.scss +7 -0
  243. package/scss/mng-overrides/_theme_dialog.scss +0 -1
  244. package/scss/mng-overrides/_theme_dropdown.scss +0 -1
  245. package/scss/mng-overrides/_theme_styles.scss +1 -0
  246. package/scss/mng-overrides/_theme_tableview.scss +6 -6
  247. package/scss/theme/default/_mng-variables-theme-dark.scss +2 -1
  248. package/scss/theme/default/_mng-variables-theme-light.scss +2 -1
  249. package/esm2020/lib/models/router.model.mjs +0 -2
  250. package/lib/models/router.model.d.ts +0 -14
@@ -1,3 +1,2 @@
1
- export * from './router.model';
2
1
  export * from './user.model';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLm1vZGVsJztcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdXNlci5tb2RlbCc7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3VzZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xuICAgIGlkOiBJZFR5cGU7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgICBsb2dvdXQ/OigpID0+IHZvaWQ7XG4gICAgbG9nb3V0VXJsPzogc3RyaW5nO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3VzZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xuICAgIGlkOiBJZFR5cGU7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgICBsb2dvdXQ/OiAoKSA9PiB2b2lkO1xuICAgIGxvZ291dFVybD86IHN0cmluZztcbn1cbiJdfQ==
@@ -19,4 +19,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
19
19
  pure: true
20
20
  }]
21
21
  }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9waXBlcy9ib29sZWFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxjQUFjO0lBRXZCLFNBQVMsQ0FBQyxLQUFVO1FBRWhCLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUMvQzthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDOzsyR0FUUSxjQUFjO3lHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFKMUIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdib29sZWFuJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0Jvb2xlYW5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IGFueSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPyAnZ2VuZXJhbC55ZXMnIDogJ2dlbmVyYWwubm8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9waXBlcy9ib29sZWFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7O0FBTWxELE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLFNBQVMsQ0FBQyxLQUFVO1FBQ2hCLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUMvQzthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDOzsyR0FQUSxjQUFjO3lHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFKMUIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnYm9vbGVhbicsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNbmdCb29sZWFuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPyAnZ2VuZXJhbC55ZXMnIDogJ2dlbmVyYWwubm8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
33
33
  pure: true
34
34
  }]
35
35
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktcGF0aC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9waXBlcy9wcm9wZXJ0eS1wYXRoLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBTXBELE1BQU0sT0FBTyxtQkFBbUI7SUFFNUIsU0FBUyxDQUFDLEtBQVUsRUFBRSxPQUFlLEVBQUU7UUFFbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN0QixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtvQkFDeEQsT0FBTyxTQUFTLENBQUM7aUJBQ3BCO3FCQUNJLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFO29CQUNwQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSwwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDNUQsT0FBTyxTQUFTLENBQUM7aUJBQ3BCO2FBQ0o7WUFDRCxPQUFPLFNBQVMsQ0FBQztTQUNwQjthQUFNO1lBQ0gsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQzFEO0lBQ0wsQ0FBQzs7Z0hBdEJRLG1CQUFtQjs4R0FBbkIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBSi9CLElBQUk7bUJBQUM7b0JBQ0YsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Byb3BlcnR5UGF0aCcsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNbmdQcm9wZXJ0eVBhdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgcGF0aDogc3RyaW5nID0gJycpOiBhbnkge1xuXG4gICAgICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoU3BsaXQgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBsZXQgY3VyclZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aFNwbGl0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGN1cnJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY3VyclZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBjdXJyVmFsdWVbcF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBQYXRoICR7cGF0aH0gaXMgbm90IHZhbGlkIGZvciBvYmplY3RgLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWVbcGF0aF0gOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktcGF0aC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9waXBlcy9wcm9wZXJ0eS1wYXRoLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7O0FBTWxELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLEtBQVUsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUMzQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFO2dCQUN2QixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUN4RCxPQUFPLFNBQVMsQ0FBQztpQkFDcEI7cUJBQU0sSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7b0JBQ3RDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzVCO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM1RCxPQUFPLFNBQVMsQ0FBQztpQkFDcEI7YUFDSjtZQUNELE9BQU8sU0FBUyxDQUFDO1NBQ3BCO2FBQU07WUFDSCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDMUQ7SUFDTCxDQUFDOztnSEFuQlEsbUJBQW1COzhHQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFKL0IsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsY0FBYztvQkFDcEIsSUFBSSxFQUFFLElBQUk7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ3Byb3BlcnR5UGF0aCcsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNbmdQcm9wZXJ0eVBhdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHBhdGggPSAnJyk6IGFueSB7XG4gICAgICAgIGlmIChwYXRoLmluZGV4T2YoJy4nKSA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoU3BsaXQgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBsZXQgY3VyclZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcGF0aFNwbGl0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IGN1cnJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyclZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN1cnJWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3VyclZhbHVlW3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgUGF0aCAke3BhdGh9IGlzIG5vdCB2YWxpZCBmb3Igb2JqZWN0YCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlW3BhdGhdIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './route-builder';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JvdXRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yb3V0ZS1idWlsZGVyJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './router.model';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3JvdXRlci9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcm91dGVyLm1vZGVsJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9yb3V0ZXIvbW9kZWxzL3JvdXRlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgRGF0YX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge1RhYmxldmlld0RhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycyc7XG5cbmV4cG9ydCB0eXBlIEJyZWFkY3J1bWJUeXBlID0gc3RyaW5nIHwgc3RyaW5nW10gfCBNbmdCcmVhZGNydW1iTWVudUl0ZW0gfCBNbmdCcmVhZGNydW1iTWVudUl0ZW1bXSB8ICgocm91dGVVcmw6IHN0cmluZywgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpID0+IE1uZ0JyZWFkY3J1bWJNZW51SXRlbVtdKTtcblxuZXhwb3J0IGludGVyZmFjZSBNbmdCcmVhZGNydW1iTWVudUl0ZW0gZXh0ZW5kcyBNZW51SXRlbSB7XG4gICAgaXNIb21lPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNbmdSb3V0ZXJEYXRhIGV4dGVuZHMgRGF0YSB7XG4gICAgYnJlYWRjcnVtYj86IEJyZWFkY3J1bWJUeXBlIHwgbnVsbDtcbiAgICBwYWdlVGl0bGU/OiBzdHJpbmc7XG4gICAgdGFibGV2aWV3Pzoge1xuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPGFueT47XG4gICAgICAgIGRhdGFQcm92aWRlcjogVGFibGV2aWV3RGF0YVByb3ZpZGVyPGFueSwgYW55PjtcbiAgICAgICAgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8YW55Pj47XG4gICAgfTtcbiAgICB0b3BiYXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgYnJlYWRjcnVtYkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICBtZW51Q29tcG9uZW50PzogVHlwZTxhbnk+O1xuICAgIGZvb3RlckNvbXBvbmVudD86IFR5cGU8YW55Pjtcbn1cbiJdfQ==
@@ -0,0 +1,293 @@
1
+ import { MngActionRouteComponent } from '../components/action';
2
+ import { MngMainLayoutComponent } from '../components/layout';
3
+ import { MngTableviewRouteComponent } from '../components/tableview';
4
+ import { RouteUtil } from '../utils/route.util';
5
+ export class RoutesBuilder {
6
+ constructor(layoutRoute) {
7
+ this.routes = [];
8
+ this.layoutRoute = layoutRoute?.withRoot(this);
9
+ }
10
+ static create() {
11
+ return new RoutesBuilder();
12
+ }
13
+ static createWithLayout(layoutComponent = MngMainLayoutComponent) {
14
+ const routesBuilder = new RoutesBuilder(RouteBuilder.create('', layoutComponent));
15
+ return routesBuilder;
16
+ }
17
+ addAngularRoute(route) {
18
+ return this.addRouteBuilder(RouteBuilder.createFromRoute(route));
19
+ }
20
+ addRouteRedirect(path, redirectTo, pathMatch = 'prefix') {
21
+ return this.addRouteBuilder(RouteBuilder.createRedirect(path, redirectTo, pathMatch));
22
+ }
23
+ addLazyRoute(path, loadChildren) {
24
+ return this.addRouteBuilder(RouteBuilder.createFromRoute({ path: path, loadChildren: loadChildren }));
25
+ }
26
+ addRoute(path, component) {
27
+ return this.addRouteBuilder(RouteBuilder.create(path, component));
28
+ }
29
+ addTableviewRoutes(path, descriptor, tableviewDataProvider, actions, hasDetails = true, hasEdit = true, hasAdd = true) {
30
+ return this.addRouteBuilder(RouteBuilder.createTableviewRoutes(path, descriptor, tableviewDataProvider, actions, hasDetails, hasEdit, hasAdd));
31
+ }
32
+ addTableviewRoutesFromComponent(path, component, hasDetails = true, hasEdit = true, hasAdd = true) {
33
+ return this.addRouteBuilder(RouteBuilder.createTableviewRoutesFromComponent(path, component, hasDetails, hasEdit, hasAdd));
34
+ }
35
+ addRouteBuilder(routeBuilder) {
36
+ this.currentRoute = routeBuilder.withRoot(this);
37
+ this.routes.push(routeBuilder);
38
+ return this;
39
+ }
40
+ toRoute() {
41
+ if (!this.currentRoute) {
42
+ throw new Error('No routes were added!');
43
+ }
44
+ return this.currentRoute;
45
+ }
46
+ buildRoutes() {
47
+ let angularRoutes = [];
48
+ for (const route of this.routes) {
49
+ angularRoutes.push(route.buildRoute());
50
+ }
51
+ if (this.layoutRoute) {
52
+ const layoutAngularRoute = this.layoutRoute.buildRoute();
53
+ if (angularRoutes.length > 0) {
54
+ layoutAngularRoute.children = angularRoutes;
55
+ }
56
+ angularRoutes = [layoutAngularRoute];
57
+ }
58
+ return angularRoutes;
59
+ }
60
+ buildMenu() {
61
+ const menuItems = [];
62
+ for (const route of this.routes) {
63
+ menuItems.push(...route.buildMenu());
64
+ }
65
+ return menuItems.flat();
66
+ }
67
+ }
68
+ export class RouteBuilder {
69
+ constructor(route) {
70
+ this.routePath = [];
71
+ this.children = [];
72
+ this.menuItemChildren = [];
73
+ if (!route.data) {
74
+ route.data = {};
75
+ }
76
+ if (!route.data['breadcrumb']) {
77
+ route.data['breadcrumb'] = null;
78
+ }
79
+ this.route = route;
80
+ if (this.route.path && this.route.path.length > 0) {
81
+ this.routePath = [this.route.path];
82
+ }
83
+ }
84
+ static create(path, component) {
85
+ return new RouteBuilder({
86
+ path: path,
87
+ component: component
88
+ });
89
+ }
90
+ static createRedirect(path, redirectTo, pathMatch = 'prefix') {
91
+ return new RouteBuilder({
92
+ path: path,
93
+ redirectTo: redirectTo,
94
+ pathMatch: pathMatch
95
+ });
96
+ }
97
+ static createFromRoute(route) {
98
+ return new RouteBuilder(route);
99
+ }
100
+ static createTableviewRoutes(path, descriptor, tableviewDataProvider, actions, hasDetails = true, hasEdit = true, hasAdd = true) {
101
+ const tableviewRoute = RouteBuilder.createFromRoute({
102
+ data: {
103
+ tableviewData: {
104
+ descriptor: descriptor,
105
+ dataProvider: tableviewDataProvider,
106
+ actions: actions
107
+ }
108
+ },
109
+ path: path,
110
+ component: MngTableviewRouteComponent
111
+ });
112
+ RouteBuilder.addActionsSubroutesToTableviewParent(tableviewRoute, hasDetails, hasEdit, hasAdd);
113
+ return tableviewRoute;
114
+ }
115
+ static createTableviewRoutesFromComponent(path, component, hasDetails = true, hasEdit = true, hasAdd = true) {
116
+ const actionCrudRoute = RouteBuilder.create(path, component);
117
+ RouteBuilder.addActionsSubroutesToTableviewParent(actionCrudRoute, hasDetails, hasEdit, hasAdd);
118
+ return actionCrudRoute;
119
+ }
120
+ static addActionsSubroutesToTableviewParent(parentRoute, hasDetails, hasEdit, hasAdd) {
121
+ parentRoute.addChild('', MngActionRouteComponent);
122
+ if (hasAdd) {
123
+ parentRoute.addChild('add', MngActionRouteComponent);
124
+ }
125
+ if (hasDetails) {
126
+ parentRoute.addChild(':itemId', MngActionRouteComponent);
127
+ }
128
+ if (hasEdit) {
129
+ parentRoute.addChild(':itemId/edit', MngActionRouteComponent);
130
+ }
131
+ }
132
+ withRoot(routesBuilder) {
133
+ this.root = routesBuilder;
134
+ return this;
135
+ }
136
+ withParent(parent) {
137
+ this.parent = parent;
138
+ this.routePath = RouteUtil.removeEmptyPathSegments([...this.parent.routePath, this.route.path ?? '']);
139
+ return this;
140
+ }
141
+ withBreadcrumb(breadcrumb) {
142
+ this.breadcrumb = breadcrumb;
143
+ this.route.data['breadcrumb'] = breadcrumb;
144
+ return this;
145
+ }
146
+ withPageTitle(pageTitle) {
147
+ this.pageTitle = pageTitle;
148
+ this.route.data['pageTitle'] = pageTitle;
149
+ return this;
150
+ }
151
+ withRedirectTo(redirectTo) {
152
+ this.route.redirectTo = redirectTo;
153
+ return this;
154
+ }
155
+ withPathMatch(pathMatch) {
156
+ this.route.pathMatch = pathMatch;
157
+ return this;
158
+ }
159
+ withTitle(title) {
160
+ this.withPageTitle(title);
161
+ this.withBreadcrumb(title);
162
+ return this;
163
+ }
164
+ withData(data) {
165
+ this.route.data = data;
166
+ return this;
167
+ }
168
+ withPrimeMenuItem(menuItem) {
169
+ this.menuItem = menuItem;
170
+ return this;
171
+ }
172
+ withMenuItem(icon, label, routerLink) {
173
+ this.menuItem = this.createMenuItem(icon, label, routerLink);
174
+ return this;
175
+ }
176
+ withMenuItemChild(label, icon, routerLink) {
177
+ this.menuItemChildren.push(this.createMenuItem(icon, label, routerLink));
178
+ return this;
179
+ }
180
+ withMenuItemChildren(routesBuilder) {
181
+ const menu = routesBuilder.buildMenu();
182
+ this.adjustMenuRouterLinksFromBuilder(menu);
183
+ this.menuItemChildren.push(...menu);
184
+ return this;
185
+ }
186
+ addChild(path, component) {
187
+ const childRouteBuilder = RouteBuilder.create(path, component);
188
+ this.addChildBuilder(childRouteBuilder);
189
+ return childRouteBuilder;
190
+ }
191
+ addChildBuilder(routeBuilder) {
192
+ routeBuilder.withParent(this);
193
+ if (this.root) {
194
+ routeBuilder.withRoot(this.root);
195
+ }
196
+ this.children.push(routeBuilder);
197
+ return this;
198
+ }
199
+ addTableviewRoutes(path, descriptor, tableviewDataProvider, actions, hasDetails = true, hasEdit = true, hasAdd = true) {
200
+ const routeBuilder = RouteBuilder.createTableviewRoutes(path, descriptor, tableviewDataProvider, actions, hasDetails, hasEdit, hasAdd);
201
+ this.addChildBuilder(routeBuilder);
202
+ return routeBuilder;
203
+ }
204
+ addTableviewRoutesFromComponent(path, component, hasDetails = true, hasEdit = true, hasAdd = true) {
205
+ const routeBuilder = RouteBuilder.createTableviewRoutesFromComponent(path, component, hasDetails, hasEdit, hasAdd);
206
+ this.addChildBuilder(routeBuilder);
207
+ return routeBuilder;
208
+ }
209
+ toParent() {
210
+ if (!this.parent) {
211
+ throw new Error('Parent was not provided.');
212
+ }
213
+ return this.parent;
214
+ }
215
+ toRoot() {
216
+ if (!this.root) {
217
+ throw new Error('Root was not provided.');
218
+ }
219
+ return this.root;
220
+ }
221
+ finish() {
222
+ return this.toRoot();
223
+ }
224
+ buildRoute() {
225
+ const angularRoute = {
226
+ ...this.route
227
+ };
228
+ if ((this.route.children?.length ?? 0) > 0 || this.children.length > 0) {
229
+ // route has children
230
+ angularRoute.children = [];
231
+ if (this.route.children?.length) {
232
+ angularRoute.children.push(...this.route.children);
233
+ }
234
+ if (this.children.length) {
235
+ for (const childRoute of this.children) {
236
+ angularRoute.children.push(childRoute.buildRoute());
237
+ }
238
+ }
239
+ }
240
+ return angularRoute;
241
+ }
242
+ buildMenu() {
243
+ const menuItem = this.menuItem ? { ...this.menuItem } : null;
244
+ const routeChildrenMenuItems = this.children.flatMap(child => child.buildMenu());
245
+ const menuItemChildren = [];
246
+ const finalMenuItemChildren = [];
247
+ if (menuItem?.items) {
248
+ finalMenuItemChildren.push(...menuItem.items);
249
+ }
250
+ for (const menuItemChild of this.menuItemChildren) {
251
+ const finalMenuItemChild = { ...menuItemChild };
252
+ if (!finalMenuItemChild.routerLink) {
253
+ finalMenuItemChild.routerLink = this.routePath;
254
+ }
255
+ finalMenuItemChild.routerLink = RouteUtil.removeEmptyPathSegments(finalMenuItemChild.routerLink);
256
+ menuItemChildren.push(finalMenuItemChild);
257
+ }
258
+ finalMenuItemChildren.push(...menuItemChildren, ...routeChildrenMenuItems);
259
+ if (!menuItem) {
260
+ return finalMenuItemChildren;
261
+ }
262
+ menuItem.label = menuItem.label ?? this.pageTitle;
263
+ menuItem.routerLink = RouteUtil.removeEmptyPathSegments(menuItem.routerLink ?? this.routePath);
264
+ if (finalMenuItemChildren.length > 0) {
265
+ menuItem.items = finalMenuItemChildren;
266
+ }
267
+ return [menuItem];
268
+ }
269
+ createMenuItem(icon, label, routerLink) {
270
+ const menuItem = {};
271
+ if (icon) {
272
+ menuItem.icon = icon;
273
+ }
274
+ if (label) {
275
+ menuItem.label = label;
276
+ }
277
+ if (routerLink) {
278
+ menuItem.routerLink = routerLink;
279
+ }
280
+ return menuItem;
281
+ }
282
+ adjustMenuRouterLinksFromBuilder(menuItems) {
283
+ for (const menuItem of menuItems) {
284
+ if (menuItem.routerLink) {
285
+ menuItem.routerLink = RouteUtil.appendPathToBasePath(this.routePath, menuItem.routerLink);
286
+ }
287
+ if (Array.isArray(menuItem.items)) {
288
+ this.adjustMenuRouterLinksFromBuilder(menuItem.items);
289
+ }
290
+ }
291
+ }
292
+ }
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcm91dGVyL3JvdXRlLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRzlDLE1BQU0sT0FBTyxhQUFhO0lBS3RCLFlBQW9CLFdBQTBCO1FBSHRDLFdBQU0sR0FBd0IsRUFBRSxDQUFDO1FBSXJDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU07UUFDaEIsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLHNCQUFzQjtRQUNuRSxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO1FBQzdGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsU0FB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Q2xELFFBQVEsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9GLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQyxRQUFRLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDO1NBQzFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxVQUEwQjtRQUM1RSxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEVBQUU7WUFDTixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1AsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDMUI7UUFDRCxJQUFJLFVBQVUsRUFBRTtZQUNaLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLFNBQTBCO1FBQy9ELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFO1lBQzlCLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDckIsUUFBUSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0Y7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsZ0NBQWdDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2FkQ2hpbGRyZW4sIFJvdXRlLCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7TWVudUl0ZW19IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24nO1xuaW1wb3J0IHtNbmdNYWluTGF5b3V0Q29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL2xheW91dCc7XG5pbXBvcnQge01uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxldmlldyc7XG5pbXBvcnQge0lUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtSb3V0ZVV0aWx9IGZyb20gJy4uL3V0aWxzL3JvdXRlLnV0aWwnO1xuaW1wb3J0IHtCcmVhZGNydW1iVHlwZSwgTW5nUm91dGVyRGF0YX0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgUm91dGVzQnVpbGRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXlvdXRSb3V0ZT86IFJvdXRlQnVpbGRlcjtcbiAgICBwcml2YXRlIHJvdXRlczogQXJyYXk8Um91dGVCdWlsZGVyPiA9IFtdO1xuICAgIHByaXZhdGUgY3VycmVudFJvdXRlPzogUm91dGVCdWlsZGVyO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihsYXlvdXRSb3V0ZT86IFJvdXRlQnVpbGRlcikge1xuICAgICAgICB0aGlzLmxheW91dFJvdXRlID0gbGF5b3V0Um91dGU/LndpdGhSb290KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKCk6IFJvdXRlc0J1aWxkZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJvdXRlc0J1aWxkZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVdpdGhMYXlvdXQobGF5b3V0Q29tcG9uZW50ID0gTW5nTWFpbkxheW91dENvbXBvbmVudCk6IFJvdXRlc0J1aWxkZXIge1xuICAgICAgICBjb25zdCByb3V0ZXNCdWlsZGVyID0gbmV3IFJvdXRlc0J1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZSgnJywgbGF5b3V0Q29tcG9uZW50KSk7XG4gICAgICAgIHJldHVybiByb3V0ZXNCdWlsZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRBbmd1bGFyUm91dGUocm91dGU6IFJvdXRlKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlRnJvbVJvdXRlKHJvdXRlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdXRlUmVkaXJlY3QocGF0aDogc3RyaW5nLCByZWRpcmVjdFRvOiBzdHJpbmcsIHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcgPSAncHJlZml4Jyk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3V0ZUJ1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZVJlZGlyZWN0KHBhdGgsIHJlZGlyZWN0VG8sIHBhdGhNYXRjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRMYXp5Um91dGUocGF0aDogc3RyaW5nLCBsb2FkQ2hpbGRyZW46IExvYWRDaGlsZHJlbik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRSb3V0ZUJ1aWxkZXIoUm91dGVCdWlsZGVyLmNyZWF0ZUZyb21Sb3V0ZSh7cGF0aDogcGF0aCwgbG9hZENoaWxkcmVuOiBsb2FkQ2hpbGRyZW59KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJvdXRlKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUm91dGVCdWlsZGVyKFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRhYmxldmlld1JvdXRlczxULCBTPihcbiAgICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+LFxuICAgICAgICB0YWJsZXZpZXdEYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbnM/OiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PixcbiAgICAgICAgaGFzRGV0YWlscyA9IHRydWUsXG4gICAgICAgIGhhc0VkaXQgPSB0cnVlLFxuICAgICAgICBoYXNBZGQgPSB0cnVlXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlVGFibGV2aWV3Um91dGVzKHBhdGgsIGRlc2NyaXB0b3IsIHRhYmxldmlld0RhdGFQcm92aWRlciwgYWN0aW9ucywgaGFzRGV0YWlscywgaGFzRWRpdCwgaGFzQWRkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRhYmxldmlld1JvdXRlc0Zyb21Db21wb25lbnQocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgaGFzRGV0YWlscyA9IHRydWUsIGhhc0VkaXQgPSB0cnVlLCBoYXNBZGQgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZFJvdXRlQnVpbGRlcihSb3V0ZUJ1aWxkZXIuY3JlYXRlVGFibGV2aWV3Um91dGVzRnJvbUNvbXBvbmVudChwYXRoLCBjb21wb25lbnQsIGhhc0RldGFpbHMsIGhhc0VkaXQsIGhhc0FkZCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3V0ZUJ1aWxkZXIocm91dGVCdWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSByb3V0ZUJ1aWxkZXIud2l0aFJvb3QodGhpcyk7XG4gICAgICAgIHRoaXMucm91dGVzLnB1c2gocm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUm91dGUoKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRSb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByb3V0ZXMgd2VyZSBhZGRlZCEnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkUm91dGVzKCk6IFJvdXRlcyB7XG4gICAgICAgIGxldCBhbmd1bGFyUm91dGVzOiBSb3V0ZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlcy5wdXNoKHJvdXRlLmJ1aWxkUm91dGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRSb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbGF5b3V0QW5ndWxhclJvdXRlID0gdGhpcy5sYXlvdXRSb3V0ZS5idWlsZFJvdXRlKCk7XG4gICAgICAgICAgICBpZiAoYW5ndWxhclJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGF5b3V0QW5ndWxhclJvdXRlLmNoaWxkcmVuID0gYW5ndWxhclJvdXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZXMgPSBbbGF5b3V0QW5ndWxhclJvdXRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZE1lbnUoKTogQXJyYXk8TWVudUl0ZW0+IHtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1zOiBBcnJheTxNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiB0aGlzLnJvdXRlcykge1xuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goLi4ucm91dGUuYnVpbGRNZW51KCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbXMuZmxhdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJvdXRlQnVpbGRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogUm91dGU7XG4gICAgcHJpdmF0ZSByb3V0ZVBhdGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIHJvb3Q/OiBSb3V0ZXNCdWlsZGVyO1xuICAgIHByaXZhdGUgcGFyZW50PzogUm91dGVCdWlsZGVyO1xuICAgIHByaXZhdGUgY2hpbGRyZW46IEFycmF5PFJvdXRlQnVpbGRlcj4gPSBbXTtcbiAgICBwcml2YXRlIG1lbnVJdGVtPzogTWVudUl0ZW07XG4gICAgcHJpdmF0ZSBtZW51SXRlbUNoaWxkcmVuOiBBcnJheTxNZW51SXRlbT4gPSBbXTtcblxuICAgIHByaXZhdGUgYnJlYWRjcnVtYj86IEJyZWFkY3J1bWJUeXBlO1xuICAgIHByaXZhdGUgcGFnZVRpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihyb3V0ZTogUm91dGUpIHtcbiAgICAgICAgaWYgKCFyb3V0ZS5kYXRhKSB7XG4gICAgICAgICAgICByb3V0ZS5kYXRhID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb3V0ZS5kYXRhWydicmVhZGNydW1iJ10pIHtcbiAgICAgICAgICAgIHJvdXRlLmRhdGFbJ2JyZWFkY3J1bWInXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5wYXRoICYmIHRoaXMucm91dGUucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IFt0aGlzLnJvdXRlLnBhdGhdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55Pik6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlZGlyZWN0KHBhdGg6IHN0cmluZywgcmVkaXJlY3RUbzogc3RyaW5nLCBwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnID0gJ3ByZWZpeCcpOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcih7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgICAgIHBhdGhNYXRjaDogcGF0aE1hdGNoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVJvdXRlKHJvdXRlOiBSb3V0ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHJvdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVRhYmxldmlld1JvdXRlczxULCBTPihcbiAgICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+LFxuICAgICAgICB0YWJsZXZpZXdEYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbnM/OiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PixcbiAgICAgICAgaGFzRGV0YWlscyA9IHRydWUsXG4gICAgICAgIGhhc0VkaXQgPSB0cnVlLFxuICAgICAgICBoYXNBZGQgPSB0cnVlXG4gICAgKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgY29uc3QgdGFibGV2aWV3Um91dGUgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlRnJvbVJvdXRlKHtcbiAgICAgICAgICAgIGRhdGE6IDxNbmdSb3V0ZXJEYXRhPntcbiAgICAgICAgICAgICAgICB0YWJsZXZpZXdEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlcjogdGFibGV2aWV3RGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBhY3Rpb25zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgICAgICBSb3V0ZUJ1aWxkZXIuYWRkQWN0aW9uc1N1YnJvdXRlc1RvVGFibGV2aWV3UGFyZW50KHRhYmxldmlld1JvdXRlLCBoYXNEZXRhaWxzLCBoYXNFZGl0LCBoYXNBZGQpO1xuICAgICAgICByZXR1cm4gdGFibGV2aWV3Um91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVUYWJsZXZpZXdSb3V0ZXNGcm9tQ29tcG9uZW50KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4sIGhhc0RldGFpbHMgPSB0cnVlLCBoYXNFZGl0ID0gdHJ1ZSwgaGFzQWRkID0gdHJ1ZSk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkNydWRSb3V0ZSA9IFJvdXRlQnVpbGRlci5jcmVhdGUocGF0aCwgY29tcG9uZW50KTtcbiAgICAgICAgUm91dGVCdWlsZGVyLmFkZEFjdGlvbnNTdWJyb3V0ZXNUb1RhYmxldmlld1BhcmVudChhY3Rpb25DcnVkUm91dGUsIGhhc0RldGFpbHMsIGhhc0VkaXQsIGhhc0FkZCk7XG4gICAgICAgIHJldHVybiBhY3Rpb25DcnVkUm91dGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkQWN0aW9uc1N1YnJvdXRlc1RvVGFibGV2aWV3UGFyZW50KHBhcmVudFJvdXRlOiBSb3V0ZUJ1aWxkZXIsIGhhc0RldGFpbHM6IGJvb2xlYW4sIGhhc0VkaXQ6IGJvb2xlYW4sIGhhc0FkZDogYm9vbGVhbikge1xuICAgICAgICBwYXJlbnRSb3V0ZS5hZGRDaGlsZCgnJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuXG4gICAgICAgIGlmIChoYXNBZGQpIHtcbiAgICAgICAgICAgIHBhcmVudFJvdXRlLmFkZENoaWxkKCdhZGQnLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIHBhcmVudFJvdXRlLmFkZENoaWxkKCc6aXRlbUlkJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0KSB7XG4gICAgICAgICAgICBwYXJlbnRSb3V0ZS5hZGRDaGlsZCgnOml0ZW1JZC9lZGl0JywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2l0aFJvb3Qocm91dGVzQnVpbGRlcjogUm91dGVzQnVpbGRlcik6IHRoaXMge1xuICAgICAgICB0aGlzLnJvb3QgPSByb3V0ZXNCdWlsZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoUGFyZW50KHBhcmVudDogUm91dGVCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhbLi4udGhpcy5wYXJlbnQucm91dGVQYXRoLCB0aGlzLnJvdXRlLnBhdGggPz8gJyddKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aEJyZWFkY3J1bWIoYnJlYWRjcnVtYjogQnJlYWRjcnVtYlR5cGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iID0gYnJlYWRjcnVtYjtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhIVsnYnJlYWRjcnVtYiddID0gYnJlYWRjcnVtYjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFBhZ2VUaXRsZShwYWdlVGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IHBhZ2VUaXRsZTtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhIVsncGFnZVRpdGxlJ10gPSBwYWdlVGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhSZWRpcmVjdFRvKHJlZGlyZWN0VG86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoUGF0aE1hdGNoKHBhdGhNYXRjaDogJ2Z1bGwnIHwgJ3ByZWZpeCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXRoTWF0Y2ggPSBwYXRoTWF0Y2g7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMud2l0aFBhZ2VUaXRsZSh0aXRsZSk7XG4gICAgICAgIHRoaXMud2l0aEJyZWFkY3J1bWIodGl0bGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB3aXRoRGF0YShkYXRhOiBhbnkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aFByaW1lTWVudUl0ZW0obWVudUl0ZW06IE1lbnVJdGVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSBtZW51SXRlbTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aE1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPik6IHRoaXMge1xuICAgICAgICB0aGlzLm1lbnVJdGVtID0gdGhpcy5jcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHdpdGhNZW51SXRlbUNoaWxkKGxhYmVsOiBzdHJpbmcsIGljb24/OiBzdHJpbmcsIHJvdXRlckxpbms/OiBBcnJheTxzdHJpbmc+KTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW1DaGlsZHJlbi5wdXNoKHRoaXMuY3JlYXRlTWVudUl0ZW0oaWNvbiwgbGFiZWwsIHJvdXRlckxpbmspKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgd2l0aE1lbnVJdGVtQ2hpbGRyZW4ocm91dGVzQnVpbGRlcjogUm91dGVzQnVpbGRlcik6IHRoaXMge1xuICAgICAgICBjb25zdCBtZW51ID0gcm91dGVzQnVpbGRlci5idWlsZE1lbnUoKTtcbiAgICAgICAgdGhpcy5hZGp1c3RNZW51Um91dGVyTGlua3NGcm9tQnVpbGRlcihtZW51KTtcbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLnB1c2goLi4ubWVudSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDaGlsZChwYXRoOiBzdHJpbmcsIGNvbXBvbmVudDogVHlwZTxhbnk+KTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgY29uc3QgY2hpbGRSb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKHBhdGgsIGNvbXBvbmVudCk7XG4gICAgICAgIHRoaXMuYWRkQ2hpbGRCdWlsZGVyKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkUm91dGVCdWlsZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDaGlsZEJ1aWxkZXIocm91dGVCdWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgcm91dGVCdWlsZGVyLndpdGhQYXJlbnQodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUm9vdCh0aGlzLnJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVGFibGV2aWV3Um91dGVzPFQsIFM+KFxuICAgICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD4sXG4gICAgICAgIHRhYmxldmlld0RhdGFQcm92aWRlcjogSVRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgYWN0aW9ucz86IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+LFxuICAgICAgICBoYXNEZXRhaWxzID0gdHJ1ZSxcbiAgICAgICAgaGFzRWRpdCA9IHRydWUsXG4gICAgICAgIGhhc0FkZCA9IHRydWVcbiAgICApOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCByb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlVGFibGV2aWV3Um91dGVzKHBhdGgsIGRlc2NyaXB0b3IsIHRhYmxldmlld0RhdGFQcm92aWRlciwgYWN0aW9ucywgaGFzRGV0YWlscywgaGFzRWRpdCwgaGFzQWRkKTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZEJ1aWxkZXIocm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHJvdXRlQnVpbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVGFibGV2aWV3Um91dGVzRnJvbUNvbXBvbmVudChwYXRoOiBzdHJpbmcsIGNvbXBvbmVudDogVHlwZTxhbnk+LCBoYXNEZXRhaWxzID0gdHJ1ZSwgaGFzRWRpdCA9IHRydWUsIGhhc0FkZCA9IHRydWUpOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCByb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlVGFibGV2aWV3Um91dGVzRnJvbUNvbXBvbmVudChwYXRoLCBjb21wb25lbnQsIGhhc0RldGFpbHMsIGhhc0VkaXQsIGhhc0FkZCk7XG4gICAgICAgIHRoaXMuYWRkQ2hpbGRCdWlsZGVyKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIHJldHVybiByb3V0ZUJ1aWxkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUGFyZW50KCk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IHdhcyBub3QgcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1Jvb3QoKTogUm91dGVzQnVpbGRlciB7XG4gICAgICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3Qgd2FzIG5vdCBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5pc2goKTogUm91dGVzQnVpbGRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUm9vdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZFJvdXRlKCk6IFJvdXRlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhclJvdXRlOiBSb3V0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucm91dGVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKHRoaXMucm91dGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDAgfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyByb3V0ZSBoYXMgY2hpbGRyZW5cbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMucm91dGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jaGlsZHJlbi5wdXNoKC4uLnRoaXMucm91dGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goY2hpbGRSb3V0ZS5idWlsZFJvdXRlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkTWVudSgpOiBBcnJheTxNZW51SXRlbT4ge1xuICAgICAgICBjb25zdCBtZW51SXRlbTogTWVudUl0ZW0gfCBudWxsID0gdGhpcy5tZW51SXRlbSA/IHsuLi50aGlzLm1lbnVJdGVtfSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJvdXRlQ2hpbGRyZW5NZW51SXRlbXM6IEFycmF5PE1lbnVJdGVtPiA9IHRoaXMuY2hpbGRyZW4uZmxhdE1hcChjaGlsZCA9PiBjaGlsZC5idWlsZE1lbnUoKSk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PE1lbnVJdGVtPiA9IFtdO1xuICAgICAgICBjb25zdCBmaW5hbE1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PE1lbnVJdGVtPiA9IFtdO1xuXG4gICAgICAgIGlmIChtZW51SXRlbT8uaXRlbXMpIHtcbiAgICAgICAgICAgIGZpbmFsTWVudUl0ZW1DaGlsZHJlbi5wdXNoKC4uLm1lbnVJdGVtLml0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbWVudUl0ZW1DaGlsZCBvZiB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWVudUl0ZW1DaGlsZDogTWVudUl0ZW0gPSB7Li4ubWVudUl0ZW1DaGlsZH07XG4gICAgICAgICAgICBpZiAoIWZpbmFsTWVudUl0ZW1DaGlsZC5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgZmluYWxNZW51SXRlbUNoaWxkLnJvdXRlckxpbmsgPSB0aGlzLnJvdXRlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsTWVudUl0ZW1DaGlsZC5yb3V0ZXJMaW5rID0gUm91dGVVdGlsLnJlbW92ZUVtcHR5UGF0aFNlZ21lbnRzKGZpbmFsTWVudUl0ZW1DaGlsZC5yb3V0ZXJMaW5rKTtcbiAgICAgICAgICAgIG1lbnVJdGVtQ2hpbGRyZW4ucHVzaChmaW5hbE1lbnVJdGVtQ2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmluYWxNZW51SXRlbUNoaWxkcmVuLnB1c2goLi4ubWVudUl0ZW1DaGlsZHJlbiwgLi4ucm91dGVDaGlsZHJlbk1lbnVJdGVtcyk7XG5cbiAgICAgICAgaWYgKCFtZW51SXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsTWVudUl0ZW1DaGlsZHJlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtLmxhYmVsID0gbWVudUl0ZW0ubGFiZWwgPz8gdGhpcy5wYWdlVGl0bGU7XG4gICAgICAgIG1lbnVJdGVtLnJvdXRlckxpbmsgPSBSb3V0ZVV0aWwucmVtb3ZlRW1wdHlQYXRoU2VnbWVudHMobWVudUl0ZW0ucm91dGVyTGluayA/PyB0aGlzLnJvdXRlUGF0aCk7XG4gICAgICAgIGlmIChmaW5hbE1lbnVJdGVtQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWVudUl0ZW0uaXRlbXMgPSBmaW5hbE1lbnVJdGVtQ2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW21lbnVJdGVtXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBtZW51SXRlbTogTWVudUl0ZW0gPSB7fTtcbiAgICAgICAgaWYgKGljb24pIHtcbiAgICAgICAgICAgIG1lbnVJdGVtLmljb24gPSBpY29uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgbWVudUl0ZW0ubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgICAgICAgbWVudUl0ZW0ucm91dGVyTGluayA9IHJvdXRlckxpbms7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0TWVudVJvdXRlckxpbmtzRnJvbUJ1aWxkZXIobWVudUl0ZW1zOiBBcnJheTxNZW51SXRlbT4pIHtcbiAgICAgICAgZm9yIChjb25zdCBtZW51SXRlbSBvZiBtZW51SXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChtZW51SXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgbWVudUl0ZW0ucm91dGVyTGluayA9IFJvdXRlVXRpbC5hcHBlbmRQYXRoVG9CYXNlUGF0aCh0aGlzLnJvdXRlUGF0aCwgbWVudUl0ZW0ucm91dGVyTGluayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZW51SXRlbS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdE1lbnVSb3V0ZXJMaW5rc0Zyb21CdWlsZGVyKG1lbnVJdGVtLml0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==