@coolon/angular-ui-powerups 12.4.9 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/assets/activities/activities.scss +1 -1
  2. package/assets/cards.scss +1 -1
  3. package/assets/form.scss +1 -1
  4. package/assets/interaction/editor/inline-string-editor.scss +1 -1
  5. package/assets/interaction.scss +1 -1
  6. package/assets/mixins.scss +2 -2
  7. package/assets/pills.scss +1 -1
  8. package/assets/styles.scss +1 -1
  9. package/{esm2015/lib/angular-ui-powerups.module.js → esm2020/lib/angular-ui-powerups.module.mjs} +5 -5
  10. package/esm2020/lib/components/busy-overlay/busy-overlay.component.mjs +32 -0
  11. package/{esm2015/lib/components/cards/abstract-card-container.component.js → esm2020/lib/components/cards/abstract-card-container.component.mjs} +4 -4
  12. package/esm2020/lib/components/cards/card-container/card-container.component.mjs +129 -0
  13. package/esm2020/lib/components/cards/card-stack/card-stack.component.mjs +81 -0
  14. package/esm2020/lib/components/commands/command/command.component.mjs +96 -0
  15. package/{esm2015/lib/components/commands/command-face/command-face.component.js → esm2020/lib/components/commands/command-face/command-face.component.mjs} +5 -10
  16. package/esm2020/lib/components/commands/command-face.mjs +112 -0
  17. package/{esm2015/lib/components/commands/flex.component.js → esm2020/lib/components/commands/flex.component.mjs} +4 -4
  18. package/esm2020/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +84 -0
  19. package/esm2020/lib/components/commands/group/popup-menu/more-menu.component.mjs +57 -0
  20. package/esm2020/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.mjs +101 -0
  21. package/esm2020/lib/components/commands/group/popup-menu/popup-menu.component.mjs +53 -0
  22. package/esm2020/lib/components/commands/group/tool-bar/tool-bar.component.mjs +31 -0
  23. package/{esm2015/lib/components/commands/separator.component.js → esm2020/lib/components/commands/separator.component.mjs} +5 -5
  24. package/{esm2015/lib/components/components.module.js → esm2020/lib/components/components.module.mjs} +6 -6
  25. package/{esm2015/lib/components/disposable-component.js → esm2020/lib/components/disposable-component.mjs} +4 -4
  26. package/{esm2015/lib/components/empty-state/empty-state.component.js → esm2020/lib/components/empty-state/empty-state.component.mjs} +6 -10
  27. package/{esm2015/lib/components/focus-container/focus-container.component.js → esm2020/lib/components/focus-container/focus-container.component.mjs} +6 -11
  28. package/{esm2015/lib/components/focusable.component.js → esm2020/lib/components/focusable.component.mjs} +6 -8
  29. package/{esm2015/lib/components/forms/abstract-input.component.js → esm2020/lib/components/forms/abstract-input.component.mjs} +4 -4
  30. package/{esm2015/lib/components/forms/abstract-list-input.component.js → esm2020/lib/components/forms/abstract-list-input.component.mjs} +4 -4
  31. package/{esm2015/lib/components/forms/abstract-value-input.component.js → esm2020/lib/components/forms/abstract-value-input.component.mjs} +4 -4
  32. package/esm2020/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +72 -0
  33. package/esm2020/lib/components/forms/checkbox-input/checkbox-input.component.mjs +29 -0
  34. package/esm2020/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +52 -0
  35. package/esm2020/lib/components/forms/number-input/number-input.component.mjs +33 -0
  36. package/esm2020/lib/components/forms/password-input/password-input.component.mjs +24 -0
  37. package/esm2020/lib/components/forms/select-input/select-input.component.mjs +57 -0
  38. package/esm2020/lib/components/forms/string-input/string-input.component.mjs +48 -0
  39. package/esm2020/lib/components/forms/text-input/text-input.component.mjs +30 -0
  40. package/esm2020/lib/components/icon/icon.component.mjs +52 -0
  41. package/esm2020/lib/components/labelled-value/labelled-value.component.mjs +20 -0
  42. package/esm2020/lib/components/loading-container/loading-container.component.mjs +50 -0
  43. package/esm2020/lib/components/noop/noop.component.mjs +13 -0
  44. package/{esm2015/lib/components/resize-aware.component.js → esm2020/lib/components/resize-aware.component.mjs} +4 -4
  45. package/esm2020/lib/components/scroll-container/scroll-container.component.mjs +15 -0
  46. package/esm2020/lib/components/section-header/section-header.component.mjs +36 -0
  47. package/{esm2015/lib/components/switch-case/switch-case.component.js → esm2020/lib/components/switch-case/switch-case.component.mjs} +11 -15
  48. package/esm2020/lib/components/tables/abstract-table-model.mjs +185 -0
  49. package/esm2020/lib/components/tables/abstract-table.component.mjs +168 -0
  50. package/{esm2015/lib/components/tables/table/cell-portal-ref.js → esm2020/lib/components/tables/table/cell-portal-ref.mjs} +2 -2
  51. package/esm2020/lib/components/tables/table/column-model.mjs +392 -0
  52. package/esm2020/lib/components/tables/table/column-template/column-template.directive.mjs +35 -0
  53. package/esm2020/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.mjs +22 -0
  54. package/esm2020/lib/components/tables/table/default-header-cell-renderer/default-header-cell-renderer.component.mjs +15 -0
  55. package/esm2020/lib/components/tables/table/edit-row-controls/edit-row-controls.component.mjs +55 -0
  56. package/esm2020/lib/components/tables/table/paginator/paginator.component.mjs +40 -0
  57. package/esm2020/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.mjs +26 -0
  58. package/esm2020/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.mjs +31 -0
  59. package/esm2020/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.mjs +93 -0
  60. package/esm2020/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.mjs +32 -0
  61. package/{esm2015/lib/components/tables/table/table-row-menu/table-row-menu.component.js → esm2020/lib/components/tables/table/table-row-menu/table-row-menu.component.mjs} +5 -5
  62. package/esm2020/lib/components/tables/table/table.component.mjs +95 -0
  63. package/esm2020/lib/components/tables/tree-table/decorated-tree-node.mjs +171 -0
  64. package/esm2020/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.mjs +72 -0
  65. package/esm2020/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +91 -0
  66. package/esm2020/lib/components/tables/tree-table/tree-table-component.mjs +95 -0
  67. package/{esm2015/lib/components/text/markdown/markdown.component.js → esm2020/lib/components/text/markdown/markdown.component.mjs} +5 -9
  68. package/{esm2015/lib/components/vertical-focus-container/vertical-focus-container.component.js → esm2020/lib/components/vertical-focus-container/vertical-focus-container.component.mjs} +6 -11
  69. package/{esm2015/lib/directives/command.directive.js → esm2020/lib/directives/command.directive.mjs} +4 -4
  70. package/{esm2015/lib/directives/directives.module.js → esm2020/lib/directives/directives.module.mjs} +5 -5
  71. package/{esm2015/lib/directives/focus-binding-factory.js → esm2020/lib/directives/focus-binding-factory.mjs} +4 -4
  72. package/{esm2015/lib/directives/focus-binding.directive.js → esm2020/lib/directives/focus-binding.directive.mjs} +4 -4
  73. package/{esm2015/lib/directives/highlight-text-model.directive.js → esm2020/lib/directives/highlight-text-model.directive.mjs} +4 -4
  74. package/{esm2015/lib/directives/highlight.pipe.js → esm2020/lib/directives/highlight.pipe.mjs} +6 -7
  75. package/esm2020/lib/interaction/activity.mjs +87 -0
  76. package/{esm2015/lib/interaction/components/abstract-confirm-dialog.component.js → esm2020/lib/interaction/components/abstract-confirm-dialog.component.mjs} +4 -4
  77. package/{esm2015/lib/interaction/components/abstract-dialog.component.js → esm2020/lib/interaction/components/abstract-dialog.component.mjs} +4 -4
  78. package/esm2020/lib/interaction/components/activity-actions/activity-actions.component.mjs +109 -0
  79. package/esm2020/lib/interaction/components/activity-body/activity-body.component.mjs +23 -0
  80. package/esm2020/lib/interaction/components/activity-container/activity-container.component.mjs +205 -0
  81. package/{esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js → esm2020/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs} +5 -9
  82. package/esm2020/lib/interaction/components/activity-title/activity-title.component.mjs +41 -0
  83. package/{esm2015/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.js → esm2020/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.mjs} +5 -6
  84. package/esm2020/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +24 -0
  85. package/esm2020/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.mjs +22 -0
  86. package/esm2020/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.mjs +30 -0
  87. package/esm2020/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +91 -0
  88. package/esm2020/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +73 -0
  89. package/esm2020/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +30 -0
  90. package/esm2020/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +30 -0
  91. package/esm2020/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +34 -0
  92. package/esm2020/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +29 -0
  93. package/esm2020/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +173 -0
  94. package/esm2020/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +91 -0
  95. package/esm2020/lib/interaction/components/input-activities/input-activity.mjs +103 -0
  96. package/{esm2015/lib/interaction/components/input-activities/select-input-activity.js → esm2020/lib/interaction/components/input-activities/select-input-activity.mjs} +6 -8
  97. package/{esm2015/lib/interaction/components/input-activities/string-input-activity.js → esm2020/lib/interaction/components/input-activities/string-input-activity.mjs} +4 -4
  98. package/{esm2015/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.js → esm2020/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.mjs} +5 -9
  99. package/{esm2015/lib/interaction/directives/interaction-context-trigger-for.directive.js → esm2020/lib/interaction/directives/interaction-context-trigger-for.directive.mjs} +4 -4
  100. package/{esm2015/lib/interaction/interaction.module.js → esm2020/lib/interaction/interaction.module.mjs} +5 -11
  101. package/{esm2015/lib/interaction/services/interaction.service.js → esm2020/lib/interaction/services/interaction.service.mjs} +4 -4
  102. package/esm2020/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.mjs +47 -0
  103. package/esm2020/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.mjs +61 -0
  104. package/{esm2015/lib/place/components/abstract-place-navigation.component.js → esm2020/lib/place/components/abstract-place-navigation.component.mjs} +4 -4
  105. package/esm2020/lib/place/components/list-place-nav/list-place-nav.component.mjs +23 -0
  106. package/esm2020/lib/place/components/not-authorised-notice/not-authorised-notice.component.mjs +13 -0
  107. package/esm2020/lib/place/components/place-outlet/place-outlet.component.mjs +256 -0
  108. package/esm2020/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +93 -0
  109. package/esm2020/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.mjs +22 -0
  110. package/esm2020/lib/place/guards/noop-auth-guard.service.mjs +18 -0
  111. package/esm2020/lib/place/guards/place.guard.mjs +109 -0
  112. package/esm2020/lib/place/navigation/place-component-deactivation-handler.mjs +83 -0
  113. package/esm2020/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.mjs +43 -0
  114. package/esm2020/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.mjs +152 -0
  115. package/esm2020/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.mjs +62 -0
  116. package/esm2020/lib/place/navigation/session/navigation-session.mjs +157 -0
  117. package/esm2020/lib/place/place-component.mjs +198 -0
  118. package/esm2020/lib/place/place-history.mjs +138 -0
  119. package/esm2020/lib/place/place-router.mjs +331 -0
  120. package/esm2020/lib/place/place.decorator.mjs +18 -0
  121. package/{esm2015/lib/place/place.module.js → esm2020/lib/place/place.module.mjs} +5 -6
  122. package/esm2020/lib/place/route/parameter-definition.mjs +123 -0
  123. package/esm2020/lib/place/route/visit-sanitiser.mjs +41 -0
  124. package/{esm2015/lib/place/url-service.js → esm2020/lib/place/url-service.mjs} +4 -4
  125. package/esm2020/lib/place/visit.mjs +69 -0
  126. package/{esm2015/lib/services/markdown/markdown.service.js → esm2020/lib/services/markdown/markdown.service.mjs} +5 -5
  127. package/esm2020/lib/services/markdown/pill-plugin.mjs +37 -0
  128. package/{esm2015/lib/services/visibility-service.js → esm2020/lib/services/visibility-service.mjs} +4 -4
  129. package/fesm2015/{coolon-angular-ui-powerups.js → coolon-angular-ui-powerups.mjs} +1201 -1415
  130. package/fesm2015/coolon-angular-ui-powerups.mjs.map +1 -0
  131. package/fesm2020/coolon-angular-ui-powerups.mjs +9891 -0
  132. package/fesm2020/coolon-angular-ui-powerups.mjs.map +1 -0
  133. package/package.json +37 -24
  134. package/schematics/activity/index.js +3 -3
  135. package/schematics/activity/index.js.map +1 -1
  136. package/schematics/aup-i18n/index.js +7 -7
  137. package/schematics/aup-i18n/index.js.map +1 -1
  138. package/schematics/bootstrap-app/index.js +9 -9
  139. package/schematics/bootstrap-app/index.js.map +1 -1
  140. package/schematics/bootstrap-app/templates/src/styles.scss.template +2 -2
  141. package/schematics/component/index.js +3 -3
  142. package/schematics/component/index.js.map +1 -1
  143. package/schematics/ng-add/index.js +2 -2
  144. package/schematics/ng-add/index.js.map +1 -1
  145. package/schematics/place-add/index.js +3 -3
  146. package/schematics/place-add/index.js.map +1 -1
  147. package/schematics/place-bootstrap/index.js +1 -1
  148. package/schematics/place-bootstrap/index.js.map +1 -1
  149. package/schematics/place-routes/place-builder.js +6 -6
  150. package/schematics/place-routes/place-builder.js.map +1 -1
  151. package/schematics/place-routes/place-class-scanner.js +3 -3
  152. package/schematics/place-routes/place-class-scanner.js.map +1 -1
  153. package/schematics/place-routes/place-def.js +4 -4
  154. package/schematics/place-routes/place-def.js.map +1 -1
  155. package/schematics/utils/decorators/decorated-class.js +1 -1
  156. package/schematics/utils/decorators/decorated-class.js.map +1 -1
  157. package/schematics/utils/import-def.js +3 -3
  158. package/schematics/utils/import-def.js.map +1 -1
  159. package/schematics/utils/method-scanner.js +4 -4
  160. package/schematics/utils/method-scanner.js.map +1 -1
  161. package/schematics/utils/path-helper.js +3 -3
  162. package/schematics/utils/path-helper.js.map +1 -1
  163. package/schematics/utils/source-file-scanner.js +5 -5
  164. package/schematics/utils/source-file-scanner.js.map +1 -1
  165. package/schematics/utils/source-file-utilities.js +1 -1
  166. package/schematics/utils/source-file-utilities.js.map +1 -1
  167. package/schematics/utils/template-utilities.js +4 -4
  168. package/schematics/utils/template-utilities.js.map +1 -1
  169. package/bundles/coolon-angular-ui-powerups.umd.js +0 -11847
  170. package/bundles/coolon-angular-ui-powerups.umd.js.map +0 -1
  171. package/esm2015/lib/components/busy-overlay/busy-overlay.component.js +0 -36
  172. package/esm2015/lib/components/cards/card-container/card-container.component.js +0 -133
  173. package/esm2015/lib/components/cards/card-stack/card-stack.component.js +0 -85
  174. package/esm2015/lib/components/commands/command/command.component.js +0 -100
  175. package/esm2015/lib/components/commands/command-face.js +0 -112
  176. package/esm2015/lib/components/commands/group/popup-menu/abstract-popup-menu.component.js +0 -89
  177. package/esm2015/lib/components/commands/group/popup-menu/more-menu.component.js +0 -61
  178. package/esm2015/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.js +0 -104
  179. package/esm2015/lib/components/commands/group/popup-menu/popup-menu.component.js +0 -58
  180. package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.js +0 -36
  181. package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +0 -76
  182. package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +0 -33
  183. package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +0 -56
  184. package/esm2015/lib/components/forms/number-input/number-input.component.js +0 -37
  185. package/esm2015/lib/components/forms/password-input/password-input.component.js +0 -28
  186. package/esm2015/lib/components/forms/select-input/select-input.component.js +0 -61
  187. package/esm2015/lib/components/forms/string-input/string-input.component.js +0 -52
  188. package/esm2015/lib/components/forms/text-input/text-input.component.js +0 -34
  189. package/esm2015/lib/components/icon/icon.component.js +0 -56
  190. package/esm2015/lib/components/labelled-value/labelled-value.component.js +0 -24
  191. package/esm2015/lib/components/loading-container/loading-container.component.js +0 -54
  192. package/esm2015/lib/components/noop/noop.component.js +0 -17
  193. package/esm2015/lib/components/scroll-container/scroll-container.component.js +0 -19
  194. package/esm2015/lib/components/section-header/section-header.component.js +0 -40
  195. package/esm2015/lib/components/tables/abstract-table-model.js +0 -188
  196. package/esm2015/lib/components/tables/abstract-table.component.js +0 -170
  197. package/esm2015/lib/components/tables/table/column-model.js +0 -389
  198. package/esm2015/lib/components/tables/table/column-template/column-template.directive.js +0 -36
  199. package/esm2015/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.js +0 -26
  200. package/esm2015/lib/components/tables/table/default-header-cell-renderer/default-header-cell-renderer.component.js +0 -19
  201. package/esm2015/lib/components/tables/table/edit-row-controls/edit-row-controls.component.js +0 -60
  202. package/esm2015/lib/components/tables/table/paginator/paginator.component.js +0 -44
  203. package/esm2015/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.js +0 -32
  204. package/esm2015/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.js +0 -37
  205. package/esm2015/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.js +0 -98
  206. package/esm2015/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.js +0 -36
  207. package/esm2015/lib/components/tables/table/table.component.js +0 -100
  208. package/esm2015/lib/components/tables/tree-table/decorated-tree-node.js +0 -171
  209. package/esm2015/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.js +0 -76
  210. package/esm2015/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.js +0 -96
  211. package/esm2015/lib/components/tables/tree-table/tree-table-component.js +0 -100
  212. package/esm2015/lib/interaction/activity.js +0 -88
  213. package/esm2015/lib/interaction/components/activity-actions/activity-actions.component.js +0 -113
  214. package/esm2015/lib/interaction/components/activity-body/activity-body.component.js +0 -27
  215. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +0 -214
  216. package/esm2015/lib/interaction/components/activity-title/activity-title.component.js +0 -45
  217. package/esm2015/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.js +0 -28
  218. package/esm2015/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.js +0 -26
  219. package/esm2015/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.js +0 -34
  220. package/esm2015/lib/interaction/components/add-card-activity/add-card-activity.component.js +0 -95
  221. package/esm2015/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.js +0 -77
  222. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +0 -34
  223. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +0 -34
  224. package/esm2015/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.js +0 -39
  225. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +0 -33
  226. package/esm2015/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.js +0 -176
  227. package/esm2015/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.js +0 -96
  228. package/esm2015/lib/interaction/components/input-activities/input-activity.js +0 -107
  229. package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +0 -41
  230. package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +0 -58
  231. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +0 -27
  232. package/esm2015/lib/place/components/not-authorised-notice/not-authorised-notice.component.js +0 -17
  233. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +0 -263
  234. package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.js +0 -97
  235. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +0 -26
  236. package/esm2015/lib/place/guards/noop-auth-guard.service.js +0 -21
  237. package/esm2015/lib/place/guards/place.guard.js +0 -116
  238. package/esm2015/lib/place/navigation/place-component-deactivation-handler.js +0 -88
  239. package/esm2015/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.js +0 -46
  240. package/esm2015/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.js +0 -159
  241. package/esm2015/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.js +0 -65
  242. package/esm2015/lib/place/navigation/session/navigation-session.js +0 -160
  243. package/esm2015/lib/place/place-component.js +0 -204
  244. package/esm2015/lib/place/place-history.js +0 -139
  245. package/esm2015/lib/place/place-router.js +0 -336
  246. package/esm2015/lib/place/place.decorator.js +0 -19
  247. package/esm2015/lib/place/route/parameter-definition.js +0 -128
  248. package/esm2015/lib/place/route/visit-sanitiser.js +0 -44
  249. package/esm2015/lib/place/visit.js +0 -69
  250. package/esm2015/lib/services/markdown/pill-plugin.js +0 -38
  251. package/fesm2015/coolon-angular-ui-powerups.js.map +0 -1
  252. /package/{esm2015/coolon-angular-ui-powerups.js → esm2020/coolon-angular-ui-powerups.mjs} +0 -0
  253. /package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  254. /package/{esm2015/lib/animations/exports.js → esm2020/lib/animations/exports.mjs} +0 -0
  255. /package/{esm2015/lib/animations/slide-animations.js → esm2020/lib/animations/slide-animations.mjs} +0 -0
  256. /package/{esm2015/lib/components/alignment.js → esm2020/lib/components/alignment.mjs} +0 -0
  257. /package/{esm2015/lib/components/commands/group/command-container.js → esm2020/lib/components/commands/group/command-container.mjs} +0 -0
  258. /package/{esm2015/lib/components/commands/group/popup-aware.component.js → esm2020/lib/components/commands/group/popup-aware.component.mjs} +0 -0
  259. /package/{esm2015/lib/components/commands/group/popup-container.js → esm2020/lib/components/commands/group/popup-container.mjs} +0 -0
  260. /package/{esm2015/lib/components/exports.js → esm2020/lib/components/exports.mjs} +0 -0
  261. /package/{esm2015/lib/components/tables/column-list-model.js → esm2020/lib/components/tables/column-list-model.mjs} +0 -0
  262. /package/{esm2015/lib/components/tables/edit-session.js → esm2020/lib/components/tables/edit-session.mjs} +0 -0
  263. /package/{esm2015/lib/components/tables/table/cell-editors.js → esm2020/lib/components/tables/table/cell-editors.mjs} +0 -0
  264. /package/{esm2015/lib/components/tables/table/cell-renderer.js → esm2020/lib/components/tables/table/cell-renderer.mjs} +0 -0
  265. /package/{esm2015/lib/components/tables/table/column-text-properties.js → esm2020/lib/components/tables/table/column-text-properties.mjs} +0 -0
  266. /package/{esm2015/lib/components/tables/table/mutable-cell-renderer.js → esm2020/lib/components/tables/table/mutable-cell-renderer.mjs} +0 -0
  267. /package/{esm2015/lib/components/tables/table/table-def.js → esm2020/lib/components/tables/table/table-def.mjs} +0 -0
  268. /package/{esm2015/lib/components/tables/table/table-model.js → esm2020/lib/components/tables/table/table-model.mjs} +0 -0
  269. /package/{esm2015/lib/components/tables/table/text-search-predicate.js → esm2020/lib/components/tables/table/text-search-predicate.mjs} +0 -0
  270. /package/{esm2015/lib/components/tables/tree-table/flattened-tree-list-model.js → esm2020/lib/components/tables/tree-table/flattened-tree-list-model.mjs} +0 -0
  271. /package/{esm2015/lib/components/tables/tree-table/tree-expansion-model.js → esm2020/lib/components/tables/tree-table/tree-expansion-model.mjs} +0 -0
  272. /package/{esm2015/lib/components/tables/tree-table/tree-label-column-model.js → esm2020/lib/components/tables/tree-table/tree-label-column-model.mjs} +0 -0
  273. /package/{esm2015/lib/components/tables/tree-table/tree-table-model.js → esm2020/lib/components/tables/tree-table/tree-table-model.mjs} +0 -0
  274. /package/{esm2015/lib/components/track-by.js → esm2020/lib/components/track-by.mjs} +0 -0
  275. /package/{esm2015/lib/components/types/bounds.class.js → esm2020/lib/components/types/bounds.class.mjs} +0 -0
  276. /package/{esm2015/lib/components/types/dimension.class.js → esm2020/lib/components/types/dimension.class.mjs} +0 -0
  277. /package/{esm2015/lib/components/types/point.class.js → esm2020/lib/components/types/point.class.mjs} +0 -0
  278. /package/{esm2015/lib/directives/exports.js → esm2020/lib/directives/exports.mjs} +0 -0
  279. /package/{esm2015/lib/directives/focus-binding.js → esm2020/lib/directives/focus-binding.mjs} +0 -0
  280. /package/{esm2015/lib/interaction/abstract-interaction-context.js → esm2020/lib/interaction/abstract-interaction-context.mjs} +0 -0
  281. /package/{esm2015/lib/interaction/activity-ref.js → esm2020/lib/interaction/activity-ref.mjs} +0 -0
  282. /package/{esm2015/lib/interaction/alert.js → esm2020/lib/interaction/alert.mjs} +0 -0
  283. /package/{esm2015/lib/interaction/components/editors/edit-context.js → esm2020/lib/interaction/components/editors/edit-context.mjs} +0 -0
  284. /package/{esm2015/lib/interaction/components/editors/inline-string-editor/inline-editor-model.js → esm2020/lib/interaction/components/editors/inline-string-editor/inline-editor-model.mjs} +0 -0
  285. /package/{esm2015/lib/interaction/confirm.js → esm2020/lib/interaction/confirm.mjs} +0 -0
  286. /package/{esm2015/lib/interaction/exports.js → esm2020/lib/interaction/exports.mjs} +0 -0
  287. /package/{esm2015/lib/interaction/in-place-interaction-context.js → esm2020/lib/interaction/in-place-interaction-context.mjs} +0 -0
  288. /package/{esm2015/lib/interaction/interaction-context.js → esm2020/lib/interaction/interaction-context.mjs} +0 -0
  289. /package/{esm2015/lib/interaction/route-synchronisation-adapter.js → esm2020/lib/interaction/route-synchronisation-adapter.mjs} +0 -0
  290. /package/{esm2015/lib/interaction/services/interaction-service-routing-adapter.js → esm2020/lib/interaction/services/interaction-service-routing-adapter.mjs} +0 -0
  291. /package/{esm2015/lib/interaction/services/modal-interaction-context.factory.js → esm2020/lib/interaction/services/modal-interaction-context.factory.mjs} +0 -0
  292. /package/{esm2015/lib/place/components/place-outlet/route-animations.js → esm2020/lib/place/components/place-outlet/route-animations.mjs} +0 -0
  293. /package/{esm2015/lib/place/exports.js → esm2020/lib/place/exports.mjs} +0 -0
  294. /package/{esm2015/lib/place/guards/consolidated-param-map.js → esm2020/lib/place/guards/consolidated-param-map.mjs} +0 -0
  295. /package/{esm2015/lib/place/nav-item.js → esm2020/lib/place/nav-item.mjs} +0 -0
  296. /package/{esm2015/lib/place/navigation/session/abstract-pop-state-navigation.js → esm2020/lib/place/navigation/session/abstract-pop-state-navigation.mjs} +0 -0
  297. /package/{esm2015/lib/place/navigation/session/event-cleanup/event-clean-up-session.js → esm2020/lib/place/navigation/session/event-cleanup/event-clean-up-session.mjs} +0 -0
  298. /package/{esm2015/lib/place/navigation/session/interactions/navigating-during-interaction.js → esm2020/lib/place/navigation/session/interactions/navigating-during-interaction.mjs} +0 -0
  299. /package/{esm2015/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.js → esm2020/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.mjs} +0 -0
  300. /package/{esm2015/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.js → esm2020/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.mjs} +0 -0
  301. /package/{esm2015/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.js → esm2020/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs} +0 -0
  302. /package/{esm2015/lib/place/navigation/session/navigating.js → esm2020/lib/place/navigation/session/navigating.mjs} +0 -0
  303. /package/{esm2015/lib/place/navigation/session/navigation-context.js → esm2020/lib/place/navigation/session/navigation-context.mjs} +0 -0
  304. /package/{esm2015/lib/place/navigation/session/pop-state-navigation.js → esm2020/lib/place/navigation/session/pop-state-navigation.mjs} +0 -0
  305. /package/{esm2015/lib/place/place-access-guard.js → esm2020/lib/place/place-access-guard.mjs} +0 -0
  306. /package/{esm2015/lib/place/place-config.js → esm2020/lib/place/place-config.mjs} +0 -0
  307. /package/{esm2015/lib/place/place-definition.js → esm2020/lib/place/place-definition.mjs} +0 -0
  308. /package/{esm2015/lib/place/route/formatter.js → esm2020/lib/place/route/formatter.mjs} +0 -0
  309. /package/{esm2015/lib/place/route/json-types.js → esm2020/lib/place/route/json-types.mjs} +0 -0
  310. /package/{esm2015/lib/place/route/parameter-decorators.js → esm2020/lib/place/route/parameter-decorators.mjs} +0 -0
  311. /package/{esm2015/lib/place/route/parameter-sanitiser.js → esm2020/lib/place/route/parameter-sanitiser.mjs} +0 -0
  312. /package/{esm2015/lib/place/route/parameter-snapshot.js → esm2020/lib/place/route/parameter-snapshot.mjs} +0 -0
  313. /package/{esm2015/lib/place/url-snapshot.js → esm2020/lib/place/url-snapshot.mjs} +0 -0
  314. /package/{esm2015/lib/services/exports.js → esm2020/lib/services/exports.mjs} +0 -0
  315. /package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
@@ -1,336 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Location } from '@angular/common';
3
- import { Injectable } from '@angular/core';
4
- import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
5
- import { assert, Binding, DebugContext, DelegatingValueModel, Dsl, GarbageCollector, lang, MutableListModel, MutableValueModel } from '@coolon/pectin';
6
- import { InteractionService } from '../interaction/services/interaction.service';
7
- import { NavigatingDuringInteraction } from './navigation/session/interactions/navigating-during-interaction';
8
- import { PopStateDuringInteractionNavigation } from './navigation/session/interactions/pop-state-during-interaction-navigation';
9
- import { SynchroniseInteractionContextIdsWithRoute } from './navigation/session/interactions/synchronise-interaction-context-ids-with-route';
10
- import { Navigating } from './navigation/session/navigating';
11
- import { NavigationContext } from './navigation/session/navigation-context';
12
- import { PopStateNavigation } from './navigation/session/pop-state-navigation';
13
- import { PlaceAccessGuard } from './place-access-guard';
14
- import { PlaceHistory } from './place-history';
15
- import { UrlService } from './url-service';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/router";
18
- import * as i2 from "@angular/common";
19
- import * as i3 from "../interaction/services/interaction.service";
20
- import * as i4 from "./url-service";
21
- import * as i5 from "./place-history";
22
- function asArray(item) {
23
- return Array.isArray(item) ? item : [item];
24
- }
25
- export class PlaceRouter extends GarbageCollector {
26
- constructor(angularRouter, angularLocation, interactionService, urlService, placeHistory) {
27
- super();
28
- this.angularRouter = angularRouter;
29
- this.angularLocation = angularLocation;
30
- this.interactionService = interactionService;
31
- this.urlService = urlService;
32
- this.placeHistory = placeHistory;
33
- this.navigationSessionModel = new MutableValueModel();
34
- this._activeVisits = new MutableListModel();
35
- this.sessionFinishedJobs = [];
36
- /**
37
- * An observable model containing the authoriser function. This allows places to react to changes
38
- * in permissions when any underlying auth logic changes, e.g. a role being removed from a user.
39
- */
40
- this._accessGuard = this.registerDisposable(new DelegatingValueModel().withDefault(new PlaceAccessGuard.NoAuth()));
41
- if (window['Cypress']) {
42
- window['aup.PlaceRouter'] = this;
43
- }
44
- this.routerInteractionAdapter = interactionService.registerPlaceRouter(this);
45
- // TODO: Make this an interface and use 'this' instead.
46
- this.navigationContext = new NavigationContext.Impl(this.urlService, this.routerInteractionAdapter, (urlSnapshot, options) => {
47
- return this.navigateByUrl(urlSnapshot, options);
48
- }, state => {
49
- this.transitionTo(state);
50
- }, visits => {
51
- this.routingSessionFinished(visits);
52
- });
53
- const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(this);
54
- this.navigationInProgress = chain(this.navigationSessionModel).isNotNil();
55
- const idleStateName = chain(this.interactionService.active).map(active => active ? 'IdleDuringInteraction' : 'Idle');
56
- this.navigationSessionName = chain(this.navigationSessionModel)
57
- .pluck('name')
58
- .otherwise(idleStateName);
59
- DebugContext.tag(this._activeVisits, 'PlaceRouter.activeVisits');
60
- this.state = chain(this._activeVisits).reduce(visits => new PlaceRouter.State(visits));
61
- // TODO: make setup the callbacks in during module initiation to make this testable.
62
- angularRouter.events.subscribe(event => {
63
- // Routing event sequence
64
- // ======================
65
- // NavigationStart -> .... -> NavigationCancel --> redirect, go around again in the same session
66
- // NavigationStart -> .... -> NavigationEnd --> navigation complete, end session.
67
- // NavigationStart -> .... -> NavigationError --> navigation aborted, end session.
68
- // =======================
69
- if (event instanceof NavigationStart) {
70
- // console.log(`---> NavigationStart[${event.id}]: ${event.url} (${event.navigationTrigger})`);
71
- if (event.navigationTrigger === 'popstate') {
72
- this.onPopState(event);
73
- }
74
- else {
75
- this.onRouterStarted(event);
76
- }
77
- // console.log(`<--- NavigationStart[${event.id}]: ${event.url} (${event.navigationTrigger})`);
78
- }
79
- if (event instanceof NavigationEnd) {
80
- // console.log(`---> NavigationEnd[${event.id}]: ${event.url}`);
81
- this.onRouterEnd(event);
82
- // console.log(`<--- NavigationEnd[${event.id}]: ${event.url}`);
83
- }
84
- if (event instanceof NavigationError) {
85
- // console.log(`---> NavigationError[${event.id}]: ${event.url}`);
86
- this.onRouterError(event);
87
- // console.log(`<--- NavigationError[${event.id}]: ${event.url}`);
88
- }
89
- if (event instanceof NavigationCancel) {
90
- // console.log(`---> NavigationCancel[${event.id}]: ${event.url}`);
91
- this.onRouterCancelled(event);
92
- // console.log(`<--- NavigationCancel[${event.id}]: ${event.url}`);
93
- }
94
- });
95
- // The router needs to know about url changes and in some cases they are the only way the router can know if
96
- // the back button was clicked.
97
- angularLocation.onUrlChange(url => this.onUrlChanged(url));
98
- }
99
- get accessGuard() {
100
- return this._accessGuard.readonly;
101
- }
102
- // @Trace()
103
- configureAuth(accessGrant, redirections) {
104
- // We need a shitty mutable model until setDelegate is clever enough to work with readonly models.
105
- const hackyMutableModel = new MutableValueModel();
106
- const binding = new Binding(hackyMutableModel, accessGrant, {
107
- toRight(leftValue) {
108
- return lang.illegalState('hackyMutableModel is read only');
109
- },
110
- toLeft: (rightValue) => rightValue
111
- });
112
- binding.writeLeft();
113
- this._accessGuard.setDelegate(hackyMutableModel);
114
- this.redirections = redirections;
115
- }
116
- getAuthenticationFailureRedirect(activatedRoute, state) {
117
- return this.redirections.onAuthenticationFailure(activatedRoute, state);
118
- }
119
- get navigationSession() {
120
- return this.navigationSessionModel.value;
121
- }
122
- get currentSession() {
123
- return this.navigationSessionModel.value;
124
- }
125
- isNavigating() {
126
- return this.navigationInProgress.value;
127
- }
128
- waitUntilIdle() {
129
- const { when } = Dsl.disposeWith(this);
130
- return new Promise(resolve => {
131
- when(this.navigationInProgress).becomesFalsey(() => resolve(this), {
132
- initialValue: 'evaluate',
133
- once: true
134
- });
135
- });
136
- }
137
- // @Trace()
138
- onPopState(event) {
139
- assert.isTruthy(event.navigationTrigger === 'popstate');
140
- if (this.currentSession) {
141
- this.currentSession.onPopState(event);
142
- }
143
- else {
144
- const poppedHistoryUrl = event.url;
145
- const currentRouterUrl = this.urlService.getCurrentRouterUrl();
146
- const session = this.interactionService.isActive() ?
147
- new PopStateDuringInteractionNavigation(this.navigationContext, currentRouterUrl, poppedHistoryUrl) :
148
- new PopStateNavigation(this.navigationContext, currentRouterUrl, poppedHistoryUrl);
149
- this.transitionTo(session);
150
- }
151
- }
152
- // @Trace()
153
- onRouterStarted(event) {
154
- assert.isFalsey(event.navigationTrigger === 'popstate');
155
- const inInteraction = this.interactionService.isActive();
156
- if (this.currentSession) {
157
- this.currentSession.onRouterStarted(event);
158
- }
159
- else {
160
- this.transitionTo(this.createNavigationSession(this.urlService.getCurrentRouterUrl()));
161
- }
162
- }
163
- // @Trace()
164
- onUrlChanged(newUrl) {
165
- // the back button can trigger a url change without a navigation session in progress so we
166
- // console.log(`---> Url Changed ${newUrl}`);
167
- if (this.currentSession) {
168
- this.currentSession.onUrlChange(newUrl);
169
- }
170
- else {
171
- console.log('FYI: url changed without a navigation session in progress');
172
- }
173
- // console.log(`<--- Url Changed`);
174
- }
175
- // @Trace()
176
- onRouterCancelled(event) {
177
- this.currentSession.onRouterCancelled(event);
178
- }
179
- // @Trace()
180
- onRouterError(event) {
181
- this.currentSession.onRouterError(event);
182
- }
183
- // @Trace()
184
- onRouterEnd(event) {
185
- this.currentSession.onRouterEnd(event);
186
- }
187
- navigate(visit, options) {
188
- const commands = asArray(visit).reduce((result, v) => {
189
- return [...result, v.placeDefinition.path, ...this.createRouteParameters(v)];
190
- }, []);
191
- return this.doNavigation(visit, (router) => __awaiter(this, void 0, void 0, function* () {
192
- yield this.angularRouter.navigate(commands, {
193
- relativeTo: options ? options.relativeTo : null
194
- });
195
- }));
196
- }
197
- // @Trace()
198
- doNavigation(visit, runNavigationCommands) {
199
- return __awaiter(this, void 0, void 0, function* () {
200
- if (this.navigationInProgress.value) {
201
- lang.illegalState('Navigation already in progress');
202
- }
203
- const navigation = this.createNavigationSession(this.urlService.getCurrentRouterUrl());
204
- asArray(visit).forEach(v => navigation.storeVisit(v));
205
- this.transitionTo(navigation);
206
- try {
207
- yield runNavigationCommands(this.angularRouter);
208
- }
209
- finally {
210
- // Check if the router has finished (in the case where no router change required) and we're still in a
211
- // transient state and finish of the transition.
212
- if (!this.angularRouter.getCurrentNavigation() && this.currentSession) {
213
- this.currentSession.onRouterEnd(new NavigationEnd(-1, '', ''));
214
- }
215
- }
216
- });
217
- }
218
- navigateByUrl(urlSnapshot, navigationExtras) {
219
- console.log(`### navigationByUrl -> ${urlSnapshot.urlTree.toString()}`);
220
- return this.angularRouter.navigateByUrl(urlSnapshot.urlTree, navigationExtras);
221
- }
222
- get activeVisits() {
223
- return this._activeVisits.readonly;
224
- }
225
- // @Trace()
226
- pushVisitChangesToRoute(previous, next) {
227
- return __awaiter(this, void 0, void 0, function* () {
228
- this.placeHistory.updateVisit(next);
229
- // FIXME: no route id -> route id duplicates route parameters
230
- if (next.hasRoutingChangedFrom(previous)) {
231
- return this.doNavigation(next, router => {
232
- const urlSnapshot = this.urlService.parseUrl(this.angularRouter.routerState.snapshot.url).updateVisitSegments(next);
233
- // console.log('### Push Changes to route Redirect', { commands: urlSnapshot.url });
234
- return this.navigateByUrl(urlSnapshot);
235
- });
236
- }
237
- });
238
- }
239
- createNavigationSession(currentRouterUrl) {
240
- const inInteraction = this.interactionService.isActive();
241
- return inInteraction ?
242
- new NavigatingDuringInteraction(this.navigationContext, currentRouterUrl) :
243
- new Navigating(this.navigationContext, currentRouterUrl);
244
- }
245
- // @Trace()
246
- transitionTo(next) {
247
- const previous = this.navigationSessionModel.value;
248
- if (!previous) {
249
- this.placeHistory.notifyNavigationStarted();
250
- }
251
- assert.isTruthy(next !== previous);
252
- // Logger.get(this).info(`### Router State Transition: ${previous ? previous.toString() : 'null'} -> ${next.toString()}`);
253
- this.navigationSessionModel.value = next;
254
- if (!!previous) {
255
- previous.dispose();
256
- }
257
- next.notifyActive();
258
- }
259
- // @Trace()
260
- routingSessionFinished(visits) {
261
- if (visits && visits.length > 0) {
262
- assert.isTruthy(this.navigationInProgress.value);
263
- this.placeHistory.notifyNavigationFinished(visits);
264
- // We update the active visits before we finish the session so the
265
- // place outlets can ignore the incoming changes until things are
266
- // settled. TODO: can we removed the event'ness here and just do a push?
267
- this._activeVisits.value = visits;
268
- }
269
- const session = this.currentSession;
270
- session.dispose();
271
- this.navigationSessionModel.value = null;
272
- // console.log(`### Router Session Finished (was ${session.toString()})`);
273
- this.sessionFinishedJobs.forEach(job => job());
274
- this.sessionFinishedJobs = [];
275
- }
276
- runAfterRoutingSessionFinishes(func) {
277
- assert.isTruthy(this.navigationInProgress);
278
- this.sessionFinishedJobs.push(func);
279
- }
280
- /**
281
- * Sync's the current interaction state with the URL. We need to push something in the URL in order
282
- * to be able to capture the back button on the first page. If we don't then the back click will exit
283
- * the app directly and we don't get to ask.
284
- */
285
- // @Trace()
286
- syncInteractionContextIdsWithRouter() {
287
- if (this.navigationSession) {
288
- // console.log(`Navigation active -> ${this.navigationSession.toString()}, sync delayed until finished.`);
289
- const session = this.navigationSession;
290
- return new Promise((resolve, reject) => {
291
- this.runAfterRoutingSessionFinishes(() => {
292
- this.runAfterRoutingSessionFinishes(resolve);
293
- const syncSession = new SynchroniseInteractionContextIdsWithRoute(this.navigationContext, this.urlService.getCurrentRouterUrl(), false);
294
- this.transitionTo(syncSession);
295
- });
296
- });
297
- }
298
- else {
299
- return new Promise(((resolve, reject) => {
300
- // console.log(`No navigation in progress, starting synchronisation job`);
301
- this.runAfterRoutingSessionFinishes(resolve);
302
- const session = new SynchroniseInteractionContextIdsWithRoute(this.navigationContext, this.urlService.getCurrentRouterUrl(), false);
303
- this.transitionTo(session);
304
- }));
305
- }
306
- }
307
- createRouteParameters(visit) {
308
- const def = visit.placeDefinition;
309
- return visit.hasRouteId() ?
310
- [def.getFormattedRouteId(visit), def.getFormattedRouteParameters(visit)] :
311
- [def.getFormattedRouteParameters(visit)];
312
- }
313
- }
314
- PlaceRouter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PlaceRouter, deps: [{ token: i1.Router }, { token: i2.Location }, { token: i3.InteractionService }, { token: i4.UrlService }, { token: i5.PlaceHistory }], target: i0.ɵɵFactoryTarget.Injectable });
315
- PlaceRouter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PlaceRouter, providedIn: 'root' });
316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PlaceRouter, decorators: [{
317
- type: Injectable,
318
- args: [{
319
- providedIn: 'root'
320
- }]
321
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.InteractionService }, { type: i4.UrlService }, { type: i5.PlaceHistory }]; } });
322
- (function (PlaceRouter) {
323
- class State {
324
- constructor(activeVisits) {
325
- this.activeVisits = activeVisits;
326
- }
327
- isPlaceActive(placeDefinition) {
328
- return !!this.getVisitFor(placeDefinition);
329
- }
330
- getVisitFor(placeDefinition) {
331
- return this.activeVisits.find(v => v.placeDefinition === placeDefinition);
332
- }
333
- }
334
- PlaceRouter.State = State;
335
- })(PlaceRouter || (PlaceRouter = {}));
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBR0wsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBRWYsZUFBZSxFQUNmLE1BQU0sRUFFUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILGdCQUFnQixFQUNoQixJQUFJLEVBRUosZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQzdJLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFN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cnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgTmF2aWdhdGlvbkNhbmNlbCxcbiAgTmF2aWdhdGlvbkVuZCxcbiAgTmF2aWdhdGlvbkVycm9yLFxuICBOYXZpZ2F0aW9uRXh0cmFzLFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIFJvdXRlcixcbiAgUm91dGVyU3RhdGVTbmFwc2hvdFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBCaW5kaW5nLFxuICBEZWJ1Z0NvbnRleHQsXG4gIERlbGVnYXRpbmdWYWx1ZU1vZGVsLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTXV0YWJsZUxpc3RNb2RlbCxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL3NlcnZpY2VzL2ludGVyYWN0aW9uLXNlcnZpY2Utcm91dGluZy1hZGFwdGVyJztcbmltcG9ydCB7IEludGVyYWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyYWN0aW9uL3NlcnZpY2VzL2ludGVyYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGluZ0R1cmluZ0ludGVyYWN0aW9uIH0gZnJvbSAnLi9uYXZpZ2F0aW9uL3Nlc3Npb24vaW50ZXJhY3Rpb25zL25hdmlnYXRpbmctZHVyaW5nLWludGVyYWN0aW9uJztcbmltcG9ydCB7IFBvcFN0YXRlRHVyaW5nSW50ZXJhY3Rpb25OYXZpZ2F0aW9uIH0gZnJvbSAnLi9uYXZpZ2F0aW9uL3Nlc3Npb24vaW50ZXJhY3Rpb25zL3BvcC1zdGF0ZS1kdXJpbmctaW50ZXJhY3Rpb24tbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZSB9IGZyb20gJy4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9zeW5jaHJvbmlzZS1pbnRlcmFjdGlvbi1jb250ZXh0LWlkcy13aXRoLXJvdXRlJztcbmltcG9ydCB7IE5hdmlnYXRpbmcgfSBmcm9tICcuL25hdmlnYXRpb24vc2Vzc2lvbi9uYXZpZ2F0aW5nJztcbmltcG9ydCB7IE5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSAnLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGlvbi1jb250ZXh0JztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXNzaW9uIH0gZnJvbSAnLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGlvbi1zZXNzaW9uJztcbmltcG9ydCB7IFBvcFN0YXRlTmF2aWdhdGlvbiB9IGZyb20gJy4vbmF2aWdhdGlvbi9zZXNzaW9uL3BvcC1zdGF0ZS1uYXZpZ2F0aW9uJztcbmltcG9ydCB7IFBsYWNlQWNjZXNzR3VhcmQgfSBmcm9tICcuL3BsYWNlLWFjY2Vzcy1ndWFyZCc7XG5pbXBvcnQgeyBQbGFjZURlZmluaXRpb24gfSBmcm9tICcuL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFVybFNlcnZpY2UgfSBmcm9tICcuL3VybC1zZXJ2aWNlJztcbmltcG9ydCB7IFVybFNuYXBzaG90IH0gZnJvbSAnLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuL3Zpc2l0JztcblxuZnVuY3Rpb24gYXNBcnJheTxUPihpdGVtOiBUIHwgVFtdKTpUW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbaXRlbV07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlUm91dGVyIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcmVhZG9ubHkgbmF2aWdhdGlvblNlc3Npb25Nb2RlbCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxOYXZpZ2F0aW9uU2Vzc2lvbj4oKTtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvbkluUHJvZ3Jlc3M6IFZhbHVlTW9kZWxDaGFpbjxib29sZWFuPjtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvblNlc3Npb25OYW1lOiBWYWx1ZU1vZGVsQ2hhaW48c3RyaW5nPjsgLy8gdXNlZCBieSB0ZXN0c1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGlvbkNvbnRleHQ6IE5hdmlnYXRpb25Db250ZXh0LkltcGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVmlzaXRzID0gbmV3IE11dGFibGVMaXN0TW9kZWw8VmlzaXQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVySW50ZXJhY3Rpb25BZGFwdGVyOiBJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlcjtcbiAgcHJpdmF0ZSBzZXNzaW9uRmluaXNoZWRKb2JzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZTogVmFsdWVNb2RlbDxQbGFjZVJvdXRlci5TdGF0ZT47XG5cbiAgLyoqXG4gICAqIEFuIG9ic2VydmFibGUgbW9kZWwgY29udGFpbmluZyB0aGUgYXV0aG9yaXNlciBmdW5jdGlvbi4gIFRoaXMgYWxsb3dzIHBsYWNlcyB0byByZWFjdCB0byBjaGFuZ2VzXG4gICAqIGluIHBlcm1pc3Npb25zIHdoZW4gYW55IHVuZGVybHlpbmcgYXV0aCBsb2dpYyBjaGFuZ2VzLCBlLmcuIGEgcm9sZSBiZWluZyByZW1vdmVkIGZyb20gYSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYWNjZXNzR3VhcmQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ1ZhbHVlTW9kZWw8UGxhY2VBY2Nlc3NHdWFyZD4oKS53aXRoRGVmYXVsdChuZXcgUGxhY2VBY2Nlc3NHdWFyZC5Ob0F1dGgoKSkpO1xuICBwcml2YXRlIHJlZGlyZWN0aW9uczogUGxhY2VSb3V0ZXIuUmVkaXJlY3Rpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhclJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJMb2NhdGlvbjogTG9jYXRpb24sXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU2VydmljZTogVXJsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAod2luZG93WydDeXByZXNzJ10pIHtcbiAgICAgIHdpbmRvd1snYXVwLlBsYWNlUm91dGVyJ10gPSB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyID0gaW50ZXJhY3Rpb25TZXJ2aWNlLnJlZ2lzdGVyUGxhY2VSb3V0ZXIodGhpcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYW4gaW50ZXJmYWNlIGFuZCB1c2UgJ3RoaXMnIGluc3RlYWQuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCA9IG5ldyBOYXZpZ2F0aW9uQ29udGV4dC5JbXBsKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLFxuICAgICAgdGhpcy5yb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXIsXG4gICAgICAodXJsU25hcHNob3Q6IFVybFNuYXBzaG90LCBvcHRpb25zOiB7IHJlcGxhY2VVcmw6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LCBvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICBzdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB2aXNpdHMgPT4ge1xuICAgICAgICB0aGlzLnJvdXRpbmdTZXNzaW9uRmluaXNoZWQodmlzaXRzKTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgeyBjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT24gfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsKS5pc05vdE5pbCgpO1xuXG4gICAgY29uc3QgaWRsZVN0YXRlTmFtZSA9IGNoYWluKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZSkubWFwKGFjdGl2ZSA9PiBhY3RpdmUgPyAnSWRsZUR1cmluZ0ludGVyYWN0aW9uJyA6ICdJZGxlJyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk5hbWUgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uTW9kZWwpXG4gICAgICAucGx1Y2soJ25hbWUnKVxuICAgICAgLm90aGVyd2lzZShpZGxlU3RhdGVOYW1lKTtcblxuICAgIERlYnVnQ29udGV4dC50YWcodGhpcy5fYWN0aXZlVmlzaXRzLCAnUGxhY2VSb3V0ZXIuYWN0aXZlVmlzaXRzJyk7XG4gICAgdGhpcy5zdGF0ZSA9IGNoYWluKHRoaXMuX2FjdGl2ZVZpc2l0cykucmVkdWNlKHZpc2l0cyA9PiBuZXcgUGxhY2VSb3V0ZXIuU3RhdGUodmlzaXRzKSk7XG5cbiAgICAvLyBUT0RPOiBtYWtlIHNldHVwIHRoZSBjYWxsYmFja3MgaW4gZHVyaW5nIG1vZHVsZSBpbml0aWF0aW9uIHRvIG1ha2UgdGhpcyB0ZXN0YWJsZS5cbiAgICBhbmd1bGFyUm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgLy8gUm91dGluZyBldmVudCBzZXF1ZW5jZVxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkNhbmNlbCAtLT4gcmVkaXJlY3QsIGdvIGFyb3VuZCBhZ2FpbiBpbiB0aGUgc2FtZSBzZXNzaW9uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRW5kIC0tPiBuYXZpZ2F0aW9uIGNvbXBsZXRlLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FcnJvciAtLT4gbmF2aWdhdGlvbiBhYm9ydGVkLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYC0tLT4gTmF2aWdhdGlvblN0YXJ0WyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9ICgke2V2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyfSlgKTtcbiAgICAgICAgaWYgKGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSB7XG4gICAgICAgICAgdGhpcy5vblBvcFN0YXRlKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uUm91dGVyU3RhcnRlZChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvblN0YXJ0WyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9ICgke2V2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyfSlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYC0tLT4gTmF2aWdhdGlvbkVuZFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICB0aGlzLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVuZFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FcnJvclske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICB0aGlzLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgPC0tLSBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYC0tLT4gTmF2aWdhdGlvbkNhbmNlbFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICB0aGlzLm9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkNhbmNlbFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHJvdXRlciBuZWVkcyB0byBrbm93IGFib3V0IHVybCBjaGFuZ2VzIGFuZCBpbiBzb21lIGNhc2VzIHRoZXkgYXJlIHRoZSBvbmx5IHdheSB0aGUgcm91dGVyIGNhbiBrbm93IGlmXG4gICAgLy8gdGhlIGJhY2sgYnV0dG9uIHdhcyBjbGlja2VkLlxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4gdGhpcy5vblVybENoYW5nZWQodXJsKSk7XG5cbiAgfVxuXG4gIGdldCBhY2Nlc3NHdWFyZCgpOiBWYWx1ZU1vZGVsPFBsYWNlQWNjZXNzR3VhcmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWNjZXNzR3VhcmQucmVhZG9ubHk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBjb25maWd1cmVBdXRoKGFjY2Vzc0dyYW50OiBWYWx1ZU1vZGVsPFBsYWNlQWNjZXNzR3VhcmQ+LCByZWRpcmVjdGlvbnM6IFBsYWNlUm91dGVyLlJlZGlyZWN0aW9ucykge1xuICAgIC8vIFdlIG5lZWQgYSBzaGl0dHkgbXV0YWJsZSBtb2RlbCB1bnRpbCBzZXREZWxlZ2F0ZSBpcyBjbGV2ZXIgZW5vdWdoIHRvIHdvcmsgd2l0aCByZWFkb25seSBtb2RlbHMuXG4gICAgY29uc3QgaGFja3lNdXRhYmxlTW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8UGxhY2VBY2Nlc3NHdWFyZD4oKTtcbiAgICBjb25zdCBiaW5kaW5nID0gbmV3IEJpbmRpbmcoaGFja3lNdXRhYmxlTW9kZWwsIGFjY2Vzc0dyYW50LCB7XG4gICAgICB0b1JpZ2h0KGxlZnRWYWx1ZTogUGxhY2VBY2Nlc3NHdWFyZCkge1xuICAgICAgICByZXR1cm4gbGFuZy5pbGxlZ2FsU3RhdGUoJ2hhY2t5TXV0YWJsZU1vZGVsIGlzIHJlYWQgb25seScpO1xuICAgICAgfSxcbiAgICAgIHRvTGVmdDogKHJpZ2h0VmFsdWU6IFBsYWNlQWNjZXNzR3VhcmQpID0+IHJpZ2h0VmFsdWVcbiAgICB9KTtcbiAgICBiaW5kaW5nLndyaXRlTGVmdCgpO1xuICAgIHRoaXMuX2FjY2Vzc0d1YXJkLnNldERlbGVnYXRlKGhhY2t5TXV0YWJsZU1vZGVsKTtcbiAgICB0aGlzLnJlZGlyZWN0aW9ucyA9IHJlZGlyZWN0aW9ucztcbiAgfVxuXG4gIGdldEF1dGhlbnRpY2F0aW9uRmFpbHVyZVJlZGlyZWN0KGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFZpc2l0IHtcbiAgICByZXR1cm4gdGhpcy5yZWRpcmVjdGlvbnMub25BdXRoZW50aWNhdGlvbkZhaWx1cmUoYWN0aXZhdGVkUm91dGUsIHN0YXRlKTtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gIH1cblxuICBpc05hdmlnYXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWU7XG4gIH1cblxuICB3YWl0VW50aWxJZGxlKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHsgd2hlbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx0aGlzPihyZXNvbHZlID0+IHtcbiAgICAgIHdoZW4odGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcykuYmVjb21lc0ZhbHNleSgoKSA9PiByZXNvbHZlKHRoaXMpLCB7XG4gICAgICAgIGluaXRpYWxWYWx1ZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUG9wU3RhdGUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb3BwZWRIaXN0b3J5VXJsID0gZXZlbnQudXJsO1xuICAgICAgY29uc3QgY3VycmVudFJvdXRlclVybCA9IHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSA/XG4gICAgICAgIG5ldyBQb3BTdGF0ZUR1cmluZ0ludGVyYWN0aW9uTmF2aWdhdGlvbih0aGlzLm5hdmlnYXRpb25Db250ZXh0LCBjdXJyZW50Um91dGVyVXJsLCBwb3BwZWRIaXN0b3J5VXJsKSA6XG4gICAgICAgIG5ldyBQb3BTdGF0ZU5hdmlnYXRpb24odGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCwgcG9wcGVkSGlzdG9yeVVybCk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25UbyhzZXNzaW9uKTtcbiAgICB9XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc0ZhbHNleShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJyk7XG4gICAgY29uc3QgaW5JbnRlcmFjdGlvbiA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Sb3V0ZXJTdGFydGVkKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8odGhpcy5jcmVhdGVOYXZpZ2F0aW9uU2Vzc2lvbih0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25VcmxDaGFuZ2VkKG5ld1VybDogc3RyaW5nKSB7XG4gICAgLy8gdGhlIGJhY2sgYnV0dG9uIGNhbiB0cmlnZ2VyIGEgdXJsIGNoYW5nZSB3aXRob3V0IGEgbmF2aWdhdGlvbiBzZXNzaW9uIGluIHByb2dyZXNzIHNvIHdlXG4gICAgLy8gY29uc29sZS5sb2coYC0tLT4gVXJsIENoYW5nZWQgJHtuZXdVcmx9YCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25VcmxDaGFuZ2UobmV3VXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ0ZZSTogdXJsIGNoYW5nZWQgd2l0aG91dCBhIG5hdmlnYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzcycpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgPC0tLSBVcmwgQ2hhbmdlZGApO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcikge1xuICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Sb3V0ZXJFcnJvcihldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCkge1xuICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Sb3V0ZXJFbmQoZXZlbnQpO1xuICB9XG5cbiAgbmF2aWdhdGUodmlzaXQ6IFZpc2l0IHwgVmlzaXRbXSwgb3B0aW9ucz86IHsgcmVsYXRpdmVUbzogQWN0aXZhdGVkUm91dGUgfSkge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gYXNBcnJheSh2aXNpdCkucmVkdWNlKChyZXN1bHQsIHYpID0+IHtcbiAgICAgIHJldHVybiBbLi4ucmVzdWx0LCB2LnBsYWNlRGVmaW5pdGlvbi5wYXRoLCAuLi50aGlzLmNyZWF0ZVJvdXRlUGFyYW1ldGVycyh2KV07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiB0aGlzLmRvTmF2aWdhdGlvbih2aXNpdCwgYXN5bmMgcm91dGVyID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYW5ndWxhclJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZWxhdGl2ZVRvOiBvcHRpb25zID8gb3B0aW9ucy5yZWxhdGl2ZVRvIDogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBkb05hdmlnYXRpb24odmlzaXQ6IFZpc2l0fCBWaXNpdFtdLCBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gYW55KSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MudmFsdWUpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMuY3JlYXRlTmF2aWdhdGlvblNlc3Npb24odGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gICAgYXNBcnJheSh2aXNpdCkuZm9yRWFjaCh2ID0+IG5hdmlnYXRpb24uc3RvcmVWaXNpdCh2KSk7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obmF2aWdhdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgJycpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCwgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmxvZyhgIyMjIG5hdmlnYXRpb25CeVVybCAtPiAke3VybFNuYXBzaG90LnVybFRyZWUudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QudXJsVHJlZSwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXRzKCk6IExpc3RNb2RlbDxWaXNpdD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVWaXNpdHMucmVhZG9ubHk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhc3luYyBwdXNoVmlzaXRDaGFuZ2VzVG9Sb3V0ZShwcmV2aW91czogVmlzaXQsIG5leHQ6IFZpc2l0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wbGFjZUhpc3RvcnkudXBkYXRlVmlzaXQobmV4dCk7XG5cbiAgICAvLyBGSVhNRTogbm8gcm91dGUgaWQgLT4gcm91dGUgaWQgZHVwbGljYXRlcyByb3V0ZSBwYXJhbWV0ZXJzXG4gICAgaWYgKG5leHQuaGFzUm91dGluZ0NoYW5nZWRGcm9tKHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9OYXZpZ2F0aW9uKG5leHQsIHJvdXRlciA9PiB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy51cmxTZXJ2aWNlLnBhcnNlVXJsKHRoaXMuYW5ndWxhclJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpLnVwZGF0ZVZpc2l0U2VnbWVudHMobmV4dCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCcjIyMgUHVzaCBDaGFuZ2VzIHRvIHJvdXRlIFJlZGlyZWN0JywgeyBjb21tYW5kczogdXJsU25hcHNob3QudXJsIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBjcmVhdGVOYXZpZ2F0aW9uU2Vzc2lvbihjdXJyZW50Um91dGVyVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU2Vzc2lvbiB7XG4gICAgY29uc3QgaW5JbnRlcmFjdGlvbiA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCk7XG4gICAgcmV0dXJuIGluSW50ZXJhY3Rpb24gP1xuICAgICAgbmV3IE5hdmlnYXRpbmdEdXJpbmdJbnRlcmFjdGlvbih0aGlzLm5hdmlnYXRpb25Db250ZXh0LCBjdXJyZW50Um91dGVyVXJsKSA6XG4gICAgICBuZXcgTmF2aWdhdGluZyh0aGlzLm5hdmlnYXRpb25Db250ZXh0LCBjdXJyZW50Um91dGVyVXJsKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHByb3RlY3RlZCB0cmFuc2l0aW9uVG8obmV4dDogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZTtcbiAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICB0aGlzLnBsYWNlSGlzdG9yeS5ub3RpZnlOYXZpZ2F0aW9uU3RhcnRlZCgpO1xuICAgIH1cbiAgICBhc3NlcnQuaXNUcnV0aHkobmV4dCAhPT0gcHJldmlvdXMpO1xuICAgIC8vIExvZ2dlci5nZXQodGhpcykuaW5mbyhgIyMjIFJvdXRlciBTdGF0ZSBUcmFuc2l0aW9uOiAke3ByZXZpb3VzID8gcHJldmlvdXMudG9TdHJpbmcoKSA6ICdudWxsJ30gLT4gJHtuZXh0LnRvU3RyaW5nKCl9YCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlID0gbmV4dDtcbiAgICBpZiAoISFwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBuZXh0Lm5vdGlmeUFjdGl2ZSgpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJpdmF0ZSByb3V0aW5nU2Vzc2lvbkZpbmlzaGVkKHZpc2l0czogVmlzaXRbXSkge1xuICAgIGlmICh2aXNpdHMgJiYgdmlzaXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzLnZhbHVlKTtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25GaW5pc2hlZCh2aXNpdHMpO1xuICAgICAgLy8gV2UgdXBkYXRlIHRoZSBhY3RpdmUgdmlzaXRzIGJlZm9yZSB3ZSBmaW5pc2ggdGhlIHNlc3Npb24gc28gdGhlXG4gICAgICAvLyBwbGFjZSBvdXRsZXRzIGNhbiBpZ25vcmUgdGhlIGluY29taW5nIGNoYW5nZXMgdW50aWwgdGhpbmdzIGFyZVxuICAgICAgLy8gc2V0dGxlZC4gVE9ETzogY2FuIHdlIHJlbW92ZWQgdGhlIGV2ZW50J25lc3MgaGVyZSBhbmQganVzdCBkbyBhIHB1c2g/XG4gICAgICB0aGlzLl9hY3RpdmVWaXNpdHMudmFsdWUgPSB2aXNpdHM7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN1cnJlbnRTZXNzaW9uO1xuICAgIHNlc3Npb24uZGlzcG9zZSgpO1xuICAgIHRoaXMubmF2aWdhdGlvblNlc3Npb25Nb2RlbC52YWx1ZSA9IG51bGw7XG4gICAgLy8gY29uc29sZS5sb2coYCMjIyBSb3V0ZXIgU2Vzc2lvbiBGaW5pc2hlZCAod2FzICR7c2Vzc2lvbi50b1N0cmluZygpfSlgKTtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMuZm9yRWFjaChqb2IgPT4gam9iKCkpO1xuICAgIHRoaXMuc2Vzc2lvbkZpbmlzaGVkSm9icyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoZnVuYzogKCkgPT4gdm9pZCkge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLm5hdmlnYXRpb25JblByb2dyZXNzKTtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMucHVzaChmdW5jKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFN5bmMncyB0aGUgY3VycmVudCBpbnRlcmFjdGlvbiBzdGF0ZSB3aXRoIHRoZSBVUkwuICBXZSBuZWVkIHRvIHB1c2ggc29tZXRoaW5nIGluIHRoZSBVUkwgaW4gb3JkZXJcbiAgICogdG8gYmUgYWJsZSB0byBjYXB0dXJlIHRoZSBiYWNrIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZS4gIElmIHdlIGRvbid0IHRoZW4gdGhlIGJhY2sgY2xpY2sgd2lsbCBleGl0XG4gICAqIHRoZSBhcHAgZGlyZWN0bHkgYW5kIHdlIGRvbid0IGdldCB0byBhc2suXG4gICAqL1xuICAvLyBAVHJhY2UoKVxuICBzeW5jSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coYE5hdmlnYXRpb24gYWN0aXZlIC0+ICR7dGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi50b1N0cmluZygpfSwgc3luYyBkZWxheWVkIHVudGlsIGZpbmlzaGVkLmApO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMocmVzb2x2ZSk7XG4gICAgICAgICAgY29uc3Qgc3luY1Nlc3Npb24gPSBuZXcgU3luY2hyb25pc2VJbnRlcmFjdGlvbkNvbnRleHRJZHNXaXRoUm91dGUodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSwgZmFsc2UpO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN5bmNTZXNzaW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBObyBuYXZpZ2F0aW9uIGluIHByb2dyZXNzLCBzdGFydGluZyBzeW5jaHJvbmlzYXRpb24gam9iYCk7XG4gICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKHJlc29sdmUpO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKHRoaXMubmF2aWdhdGlvbkNvbnRleHQsIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksIGZhbHNlKTtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgICB9KSk7XG5cbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgY3JlYXRlUm91dGVQYXJhbWV0ZXJzKHZpc2l0OiBWaXNpdCkge1xuICAgIGNvbnN0IGRlZiA9IHZpc2l0LnBsYWNlRGVmaW5pdGlvbjtcbiAgICByZXR1cm4gdmlzaXQuaGFzUm91dGVJZCgpID9cbiAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdCksIGRlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXSA6XG4gICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdCldO1xuICB9XG5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQbGFjZVJvdXRlciB7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdGlvbnMge1xuICAgIG9uQXV0aGVudGljYXRpb25GYWlsdXJlKGFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVmlzaXQ7XG4gIH1cblxuICBleHBvcnQgY2xhc3MgU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlVmlzaXRzOiBWaXNpdFtdKSB7XG4gICAgfVxuXG4gICAgaXNQbGFjZUFjdGl2ZShwbGFjZURlZmluaXRpb246IFBsYWNlRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRWaXNpdEZvcihwbGFjZURlZmluaXRpb24pO1xuICAgIH1cblxuICAgIGdldFZpc2l0Rm9yKHBsYWNlRGVmaW5pdGlvbjogUGxhY2VEZWZpbml0aW9uKTogVmlzaXQge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlzaXRzLmZpbmQodiA9PiB2LnBsYWNlRGVmaW5pdGlvbiA9PT0gcGxhY2VEZWZpbml0aW9uKTtcbiAgICB9XG4gIH1cblxufVxuIl19
@@ -1,19 +0,0 @@
1
- import { lang } from '@coolon/pectin';
2
- import { isNil } from 'lodash';
3
- import { PlaceComponent } from './place-component';
4
- import { PlaceDefinition } from './place-definition';
5
- export function Place(options) {
6
- return (target) => {
7
- var _a;
8
- if (PlaceComponent.isPlaceComponentConstructor(target)) {
9
- PlaceComponent.injectDefinition(target, new PlaceDefinition(target, options.path, isNil(options.authenticate) ? true : options.authenticate, (_a = options.role) !== null && _a !== void 0 ? _a : options.roles, options.data, PlaceComponent.getRouteParameters(target), (options.children || []).map(c => PlaceComponent.getDefinition(c))));
10
- if (options.roles) {
11
- console.warn(`${target.name} @Place({roles: string[]}) is deprecated. Use @Place({role:any}) instead`);
12
- }
13
- }
14
- else {
15
- lang.illegalState(`${target} must extend PlaceComponent to use the @Place decorator`);
16
- }
17
- };
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsSUFBSSxFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBc0I7SUFDMUMsT0FBTyxDQUFDLE1BQWdCLEVBQUUsRUFBRTs7UUFDMUIsSUFBSSxjQUFjLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEQsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FDekQsTUFBTSxFQUNOLE9BQU8sQ0FBQyxJQUFJLEVBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUN6RCxNQUFBLE9BQU8sQ0FBQyxJQUFJLG1DQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQzdCLE9BQU8sQ0FBQyxJQUFJLEVBQ1osY0FBYyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUN6QyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSwyRUFBMkUsQ0FBQyxDQUFBO2FBQ3hHO1NBRUY7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLHlEQUF5RCxDQUFDLENBQUM7U0FDdkY7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0YWJsZSwgbGFuZywgTG9nZ2VyIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudCB9IGZyb20gJy4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGxhY2UtZGVmaW5pdGlvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGFjZShvcHRpb25zOiBQbGFjZS5PcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBGdW5jdGlvbikgPT4ge1xuICAgIGlmIChQbGFjZUNvbXBvbmVudC5pc1BsYWNlQ29tcG9uZW50Q29uc3RydWN0b3IodGFyZ2V0KSkge1xuICAgICAgUGxhY2VDb21wb25lbnQuaW5qZWN0RGVmaW5pdGlvbih0YXJnZXQsIG5ldyBQbGFjZURlZmluaXRpb24oXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgb3B0aW9ucy5wYXRoLFxuICAgICAgICBpc05pbChvcHRpb25zLmF1dGhlbnRpY2F0ZSkgPyB0cnVlIDogb3B0aW9ucy5hdXRoZW50aWNhdGUsXG4gICAgICAgIG9wdGlvbnMucm9sZSA/PyBvcHRpb25zLnJvbGVzLFxuICAgICAgICBvcHRpb25zLmRhdGEsXG4gICAgICAgIFBsYWNlQ29tcG9uZW50LmdldFJvdXRlUGFyYW1ldGVycyh0YXJnZXQpLFxuICAgICAgICAob3B0aW9ucy5jaGlsZHJlbiB8fCBbXSkubWFwKGMgPT4gUGxhY2VDb21wb25lbnQuZ2V0RGVmaW5pdGlvbihjKSlcbiAgICAgICkpO1xuXG4gICAgICBpZiAob3B0aW9ucy5yb2xlcykge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGFyZ2V0Lm5hbWV9IEBQbGFjZSh7cm9sZXM6IHN0cmluZ1tdfSkgaXMgZGVwcmVjYXRlZC4gIFVzZSBAUGxhY2Uoe3JvbGU6YW55fSkgaW5zdGVhZGApXG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoYCR7dGFyZ2V0fSBtdXN0IGV4dGVuZCBQbGFjZUNvbXBvbmVudCB0byB1c2UgdGhlIEBQbGFjZSBkZWNvcmF0b3JgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2Uge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGRhdGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9OyAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgYXV0aGVudGljYXRlPzogYm9vbGVhbjsgLy8gZGVmYXVsdHMgdG8gdHJ1ZVxuICAgIHJvbGU/OiBhbnk7IC8vIGRlZmF1bHRzIHRvIGVtcHR5IGFycmF5XG5cbiAgICAvKipcbiAgICAgKiAgQGRlcHJlY2F0ZWQgdXNlICNyb2xlIGluc3RlYWRcbiAgICAgKi9cbiAgICByb2xlcz86IHN0cmluZ1tdOyAvLyBkZWZhdWx0cyB0byBlbXB0eSBhcnJheVxuXG4gICAgY2hpbGRyZW4/OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PltdO1xuICAgIGRlZmF1bHRDaGlsZD86IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+O1xuICB9XG5cbn1cblxuIl19
@@ -1,128 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { MutableListModel, MutableValueModel } from '@coolon/pectin';
3
- import { lang, Opts } from '@coolon/typescript-utilities';
4
- import { isEqual, isFunction, isNil, isObject } from 'lodash';
5
- const PARAMETER_DEFINITION_KEY = Symbol('parameterDefinition');
6
- export class ParameterDefinition {
7
- constructor(propertyName, options, urlFormat) {
8
- this.propertyName = propertyName;
9
- this.urlFormat = urlFormat;
10
- this.options = Opts.get(options);
11
- this.remember = this.options.getOptional('remember', false);
12
- this.defaultValue = this.options.getOptional('defaultValue', null);
13
- }
14
- get name() {
15
- return this.options.getOptional('as', this.propertyName);
16
- }
17
- // @Trace()
18
- get isRouteParameter() {
19
- return !!this.urlFormat;
20
- }
21
- createBackingModel() {
22
- const model = this.backingModelFactory();
23
- model[PARAMETER_DEFINITION_KEY] = this;
24
- return model;
25
- }
26
- getOptionValue(key) {
27
- return this.options.getOptional(key, null);
28
- }
29
- // @Trace()
30
- sanitise(value, visit, placeHistory, injector, isPopState) {
31
- return __awaiter(this, void 0, void 0, function* () {
32
- // console.log(`sanitise(${this.propertyName})`)
33
- value = yield this.sanitiseMissing(visit, placeHistory, value);
34
- value = yield this.runCustomSanitiser(value, visit, placeHistory, injector, isPopState);
35
- return value;
36
- });
37
- }
38
- runCustomSanitiser(value, visit, placeHistory, injector, isPopState) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- const customSanitiser = this.prepareCustomSanitiser(injector);
41
- return customSanitiser ? customSanitiser.sanitise(value, visit, injector) : value;
42
- });
43
- }
44
- sanitiseMissing(visit, placeHistory, value) {
45
- if (this.isMissingFrom(visit)) {
46
- const returningFromSomewhereElse = !placeHistory.lastVisitIncluded(visit.placeDefinition);
47
- if (returningFromSomewhereElse) {
48
- const lastKnownVisit = placeHistory.getMostRecentVisitFor(visit.placeDefinition);
49
- if (this.remember && lastKnownVisit) {
50
- value = lastKnownVisit.getParameterValue(this);
51
- }
52
- value = this.isEmptyValue(value) ? this.defaultValue : value;
53
- }
54
- }
55
- return value;
56
- }
57
- prepareCustomSanitiser(injector) {
58
- const customSanitiser = this.options.getOptional('sanitiser', null);
59
- if (isFunction(customSanitiser)) {
60
- return injector.get(customSanitiser);
61
- }
62
- if (isObject(customSanitiser)) {
63
- return isFunction(customSanitiser['sanitise']) ?
64
- customSanitiser :
65
- lang.illegalState(`expected @VisitParameter({sanitiser: ...}) for ${this.propertyName} to be a constructor or instance of ParameterSanitiser, got: ` + customSanitiser);
66
- }
67
- return undefined;
68
- }
69
- isMissingFrom(visit) {
70
- return !visit.hasParameter(this);
71
- }
72
- }
73
- (function (ParameterDefinition) {
74
- class RouteId extends ParameterDefinition {
75
- constructor() {
76
- super(...arguments);
77
- this.isRouteId = true;
78
- this.isArray = false;
79
- this.backingModelFactory = () => new MutableValueModel();
80
- }
81
- isEmptyValue(value) {
82
- return isNil(value);
83
- }
84
- hasChanged(a, b) {
85
- return a !== b;
86
- }
87
- }
88
- ParameterDefinition.RouteId = RouteId;
89
- class ValueParameter extends ParameterDefinition {
90
- constructor() {
91
- super(...arguments);
92
- this.isRouteId = false;
93
- this.isArray = false;
94
- this.backingModelFactory = () => new MutableValueModel();
95
- }
96
- isEmptyValue(value) {
97
- return isNil(value);
98
- }
99
- hasChanged(a, b) {
100
- return a !== b;
101
- }
102
- }
103
- ParameterDefinition.ValueParameter = ValueParameter;
104
- class ArrayParameter extends ParameterDefinition {
105
- constructor(parameterName, options, urlFormat) {
106
- super(parameterName, options, urlFormat);
107
- this.isRouteId = false;
108
- this.isArray = true;
109
- this.backingModelFactory = () => new MutableListModel();
110
- }
111
- isEmptyValue(value) {
112
- return isNil(value) || value.length < 1;
113
- }
114
- hasChanged(a, b) {
115
- return !isEqual(a, b);
116
- }
117
- }
118
- ParameterDefinition.ArrayParameter = ArrayParameter;
119
- function get(model) {
120
- const parameterDefinition = model[PARAMETER_DEFINITION_KEY];
121
- if (!parameterDefinition) {
122
- lang.illegalArgument('model hasn\'t been annotated with @VisitParameter, @VisitParameterList or @RouteId');
123
- }
124
- return parameterDefinition;
125
- }
126
- ParameterDefinition.get = get;
127
- })(ParameterDefinition || (ParameterDefinition = {}));
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9wbGFjZS9yb3V0ZS9wYXJhbWV0ZXItZGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFzQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JILE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU05RCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRy9ELE1BQU0sT0FBZ0IsbUJBQW1CO0lBVXZDLFlBQXFCLFlBQW9CLEVBQUUsT0FBdUMsRUFBVyxTQUF3QjtRQUFoRyxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFvRCxjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ25ILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXO0lBQ1gsSUFBSSxnQkFBZ0I7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QUFDO1FBSWhFLENBQUM7UUFFRCxZQUFZLENBQUMsS0FBVTtZQUNyQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsVUFBVSxDQUFDLENBQU0sRUFBRSxDQUFNO1lBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7S0FFRjtJQWpCWSxrQ0FBYyxpQkFpQjFCLENBQUE7SUFJRCxTQUFnQixHQUFHLENBQUksS0FBbUM7UUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1NBQzVHO1FBQ0QsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBTmUsdUJBQUcsTUFNbEIsQ0FBQTtBQUdILENBQUMsRUFyRWdCLG1CQUFtQixLQUFuQixtQkFBbUIsUUFxRW5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdGFibGUsIEhhc1ZhbHVlLCBMaXN0TW9kZWwsIE11dGFibGVMaXN0TW9kZWwsIE11dGFibGVWYWx1ZU1vZGVsLCBWYWx1ZU1vZGVsIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgbGFuZywgT3B0cyB9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuXG5pbXBvcnQgeyBpc0VxdWFsLCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4uL3Zpc2l0JztcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gJy4vZm9ybWF0dGVyJztcbmltcG9ydCB7IFBhcmFtZXRlclNhbml0aXNlciB9IGZyb20gJy4vcGFyYW1ldGVyLXNhbml0aXNlcic7XG5cbmNvbnN0IFBBUkFNRVRFUl9ERUZJTklUSU9OX0tFWSA9IFN5bWJvbCgncGFyYW1ldGVyRGVmaW5pdGlvbicpO1xuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYXJhbWV0ZXJEZWZpbml0aW9uPFQsIEUgPSBUPiB7XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNSb3V0ZUlkOiBib29sZWFuO1xuICBhYnN0cmFjdCByZWFkb25seSBpc0FycmF5OiBib29sZWFuO1xuXG4gIHJlYWRvbmx5IHJlbWVtYmVyOiBib29sZWFuO1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU6IFQ7XG4gIHByaXZhdGUgb3B0aW9uczogT3B0czxQYXJhbWV0ZXJEZWZpbml0aW9uLk9wdGlvbnM8VD4+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYmFja2luZ01vZGVsRmFjdG9yeTogKCkgPT4gSGFzVmFsdWU8VD47XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFBhcmFtZXRlckRlZmluaXRpb24uT3B0aW9uczxUPiwgcmVhZG9ubHkgdXJsRm9ybWF0PzogRm9ybWF0dGVyPEU+KSB7XG4gICAgdGhpcy5vcHRpb25zID0gT3B0cy5nZXQob3B0aW9ucyk7XG4gICAgdGhpcy5yZW1lbWJlciA9IHRoaXMub3B0aW9ucy5nZXRPcHRpb25hbCgncmVtZW1iZXInLCBmYWxzZSk7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLm9wdGlvbnMuZ2V0T3B0aW9uYWwoJ2RlZmF1bHRWYWx1ZScsIG51bGwpO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5nZXRPcHRpb25hbCgnYXMnLCB0aGlzLnByb3BlcnR5TmFtZSk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBnZXQgaXNSb3V0ZVBhcmFtZXRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnVybEZvcm1hdDtcbiAgfVxuXG4gIGFic3RyYWN0IGlzRW1wdHlWYWx1ZSh2YWx1ZTogVCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgaGFzQ2hhbmdlZChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW47XG5cbiAgY3JlYXRlQmFja2luZ01vZGVsKCk6IEhhc1ZhbHVlPFQ+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuYmFja2luZ01vZGVsRmFjdG9yeSgpO1xuICAgIG1vZGVsW1BBUkFNRVRFUl9ERUZJTklUSU9OX0tFWV0gPSB0aGlzO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPcHRpb25WYWx1ZTxLIGV4dGVuZHMga2V5b2YgUGFyYW1ldGVyRGVmaW5pdGlvbi5PcHRpb25zPFQ+PihrZXk6IEspOiBQYXJhbWV0ZXJEZWZpbml0aW9uLk9wdGlvbnM8VD5bS10ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2V0T3B0aW9uYWwoa2V5LCBudWxsKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIHNhbml0aXNlKHZhbHVlOiBULCB2aXNpdDogVmlzaXQsIHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5LCBpbmplY3RvcjogSW5qZWN0b3IsIGlzUG9wU3RhdGU6IGJvb2xlYW4pOiBQcm9taXNlPFQ+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgc2FuaXRpc2UoJHt0aGlzLnByb3BlcnR5TmFtZX0pYClcbiAgICB2YWx1ZSA9IGF3YWl0IHRoaXMuc2FuaXRpc2VNaXNzaW5nKHZpc2l0LCBwbGFjZUhpc3RvcnksIHZhbHVlKTtcbiAgICB2YWx1ZSA9IGF3YWl0IHRoaXMucnVuQ3VzdG9tU2FuaXRpc2VyKHZhbHVlLCB2aXNpdCwgcGxhY2VIaXN0b3J5LCBpbmplY3RvciwgaXNQb3BTdGF0ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5DdXN0b21TYW5pdGlzZXIodmFsdWU6IFQsIHZpc2l0OiBWaXNpdCwgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnksIGluamVjdG9yOiBJbmplY3RvciwgaXNQb3BTdGF0ZTogYm9vbGVhbik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGN1c3RvbVNhbml0aXNlciA9IHRoaXMucHJlcGFyZUN1c3RvbVNhbml0aXNlcihpbmplY3Rvcik7XG4gICAgcmV0dXJuIGN1c3RvbVNhbml0aXNlciA/IGN1c3RvbVNhbml0aXNlci5zYW5pdGlzZSh2YWx1ZSwgdmlzaXQsIGluamVjdG9yKSA6IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZU1pc3NpbmcodmlzaXQ6IFZpc2l0LCBwbGFjZUhpc3Rvcnk6IFBsYWNlSGlzdG9yeSwgdmFsdWU6IFQpIHtcbiAgICBpZiAodGhpcy5pc01pc3NpbmdGcm9tKHZpc2l0KSkge1xuICAgICAgY29uc3QgcmV0dXJuaW5nRnJvbVNvbWV3aGVyZUVsc2UgPSAhcGxhY2VIaXN0b3J5Lmxhc3RWaXNpdEluY2x1ZGVkKHZpc2l0LnBsYWNlRGVmaW5pdGlvbik7XG4gICAgICBpZiAocmV0dXJuaW5nRnJvbVNvbWV3aGVyZUVsc2UpIHtcbiAgICAgICAgY29uc3QgbGFzdEtub3duVmlzaXQgPSBwbGFjZUhpc3RvcnkuZ2V0TW9zdFJlY2VudFZpc2l0Rm9yKHZpc2l0LnBsYWNlRGVmaW5pdGlvbik7XG4gICAgICAgIGlmICh0aGlzLnJlbWVtYmVyICYmIGxhc3RLbm93blZpc2l0KSB7XG4gICAgICAgICAgdmFsdWUgPSBsYXN0S25vd25WaXNpdC5nZXRQYXJhbWV0ZXJWYWx1ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHRoaXMuaXNFbXB0eVZhbHVlKHZhbHVlKSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUN1c3RvbVNhbml0aXNlcihpbmplY3RvcjogSW5qZWN0b3IpOiBQYXJhbWV0ZXJTYW5pdGlzZXI8YW55PiB7XG4gICAgY29uc3QgY3VzdG9tU2FuaXRpc2VyID0gdGhpcy5vcHRpb25zLmdldE9wdGlvbmFsKCdzYW5pdGlzZXInLCBudWxsKTtcbiAgICBpZiAoaXNGdW5jdGlvbihjdXN0b21TYW5pdGlzZXIpKSB7XG4gICAgICByZXR1cm4gaW5qZWN0b3IuZ2V0KGN1c3RvbVNhbml0aXNlcik7XG4gICAgfVxuICAgIGlmIChpc09iamVjdChjdXN0b21TYW5pdGlzZXIpKSB7XG4gICAgICByZXR1cm4gaXNGdW5jdGlvbihjdXN0b21TYW5pdGlzZXJbJ3Nhbml0aXNlJ10pID9cbiAgICAgICAgY3VzdG9tU2FuaXRpc2VyIGFzIFBhcmFtZXRlclNhbml0aXNlcjxhbnk+IDpcbiAgICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoYGV4cGVjdGVkIEBWaXNpdFBhcmFtZXRlcih7c2FuaXRpc2VyOiAuLi59KSBmb3IgJHt0aGlzLnByb3BlcnR5TmFtZX0gdG8gYmUgYSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSBvZiBQYXJhbWV0ZXJTYW5pdGlzZXIsIGdvdDogYCArIGN1c3RvbVNhbml0aXNlcik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzTWlzc2luZ0Zyb20odmlzaXQ6IFZpc2l0KSB7XG4gICAgcmV0dXJuICF2aXNpdC5oYXNQYXJhbWV0ZXIodGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQYXJhbWV0ZXJEZWZpbml0aW9uIHtcblxuICBleHBvcnQgaW50ZXJmYWNlIE9wdGlvbnM8VD4ge1xuICAgIGFzPzogc3RyaW5nO1xuICAgIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgICByZW1lbWJlcj86IGJvb2xlYW47XG4gICAgZGVmYXVsdFZhbHVlPzogVDtcbiAgICBzYW5pdGlzZXI/OiBDb25zdHJ1Y3RhYmxlPFBhcmFtZXRlclNhbml0aXNlcjxUPj4gfCBQYXJhbWV0ZXJTYW5pdGlzZXI8VD47XG4gIH1cblxuICBleHBvcnQgY2xhc3MgUm91dGVJZDxUPiBleHRlbmRzIFBhcmFtZXRlckRlZmluaXRpb248VD4ge1xuICAgIHJlYWRvbmx5IGlzUm91dGVJZCA9IHRydWU7XG4gICAgcmVhZG9ubHkgaXNBcnJheSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBiYWNraW5nTW9kZWxGYWN0b3J5ID0gKCkgPT4gbmV3IE11dGFibGVWYWx1ZU1vZGVsPFQ+KCk7XG5cbiAgICBpc0VtcHR5VmFsdWUodmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBpc05pbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaGFzQ2hhbmdlZChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGEgIT09IGI7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgVmFsdWVQYXJhbWV0ZXI8VD4gZXh0ZW5kcyBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+IHtcbiAgICByZWFkb25seSBpc1JvdXRlSWQgPSBmYWxzZTtcbiAgICByZWFkb25seSBpc0FycmF5ID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGJhY2tpbmdNb2RlbEZhY3RvcnkgPSAoKSA9PiBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8VD4oKTtcblxuICAgIGlzRW1wdHlWYWx1ZSh2YWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGlzTmlsKHZhbHVlKTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gYSAhPT0gYjtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgQXJyYXlQYXJhbWV0ZXI8VD4gZXh0ZW5kcyBQYXJhbWV0ZXJEZWZpbml0aW9uPFRbXSwgVD4ge1xuICAgIHJlYWRvbmx5IGlzUm91dGVJZCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IGlzQXJyYXkgPSB0cnVlO1xuICAgIHByb3RlY3RlZCBiYWNraW5nTW9kZWxGYWN0b3J5ID0gKCkgPT4gbmV3IE11dGFibGVMaXN0TW9kZWw8VD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlck5hbWU6IHN0cmluZywgb3B0aW9uczogT3B0aW9uczxUW10+LCB1cmxGb3JtYXQ6IEZvcm1hdHRlcjxUPikge1xuICAgICAgc3VwZXIocGFyYW1ldGVyTmFtZSwgb3B0aW9ucywgdXJsRm9ybWF0KTtcbiAgICB9XG5cbiAgICBpc0VtcHR5VmFsdWUodmFsdWU6IFRbXSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGlzTmlsKHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPCAxO1xuICAgIH1cblxuICAgIGhhc0NoYW5nZWQoYTogVFtdLCBiOiBUW10pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhaXNFcXVhbChhLCBiKTtcbiAgICB9XG5cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXQ8VD4obW9kZWw6IFZhbHVlTW9kZWw8VD4pOiBQYXJhbWV0ZXJEZWZpbml0aW9uLlZhbHVlUGFyYW1ldGVyPFQ+XG4gIGV4cG9ydCBmdW5jdGlvbiBnZXQ8VD4obW9kZWw6IExpc3RNb2RlbDxUPik6IFBhcmFtZXRlckRlZmluaXRpb24uQXJyYXlQYXJhbWV0ZXI8VD5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldDxUPihtb2RlbDogVmFsdWVNb2RlbDxUPiB8IExpc3RNb2RlbDxUPik6IFBhcmFtZXRlckRlZmluaXRpb24uVmFsdWVQYXJhbWV0ZXI8VD4gfCBQYXJhbWV0ZXJEZWZpbml0aW9uLkFycmF5UGFyYW1ldGVyPFQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWZpbml0aW9uID0gbW9kZWxbUEFSQU1FVEVSX0RFRklOSVRJT05fS0VZXTtcbiAgICBpZiAoIXBhcmFtZXRlckRlZmluaXRpb24pIHtcbiAgICAgIGxhbmcuaWxsZWdhbEFyZ3VtZW50KCdtb2RlbCBoYXNuXFwndCBiZWVuIGFubm90YXRlZCB3aXRoIEBWaXNpdFBhcmFtZXRlciwgQFZpc2l0UGFyYW1ldGVyTGlzdCBvciBAUm91dGVJZCcpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1ldGVyRGVmaW5pdGlvbjtcbiAgfVxuXG5cbn1cbiJdfQ==
@@ -1,44 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- export class VisitSanitiser {
3
- constructor(navigationSession, activatedRoute, router, placeHistory, injector) {
4
- this.navigationSession = navigationSession;
5
- this.activatedRoute = activatedRoute;
6
- this.router = router;
7
- this.placeHistory = placeHistory;
8
- this.injector = injector;
9
- }
10
- // @Trace()
11
- sanitise(visit) {
12
- return __awaiter(this, void 0, void 0, function* () {
13
- const placeDef = visit.placeDefinition;
14
- if (placeDef.hasRouteId()) {
15
- const routeIdDef = placeDef.getRouteIdParameterDef();
16
- const routeId = visit.getRouteId();
17
- const sanitisedValue = yield routeIdDef.sanitise(routeId, visit, this.placeHistory, this.injector, this.navigationSession.isPopState);
18
- // console.log({routeId, sanitisedValue});
19
- // ###------- EARLY EXIT --------###
20
- if (routeIdDef.hasChanged(routeId, sanitisedValue)) {
21
- // if the route id has changed we redirect immediately as other
22
- // parameter sanitisers might use it.
23
- return visit.replace(routeIdDef, sanitisedValue);
24
- }
25
- }
26
- // if we didn't replace the routeId we continue the url present parameters.
27
- const parameterDefs = placeDef.getVisitParameterDefs({
28
- includeRouteParameters: true,
29
- includeNonRouteParameters: true
30
- });
31
- let sanitisedVisit = visit;
32
- for (let i = 0; i < parameterDefs.length; i++) {
33
- const def = parameterDefs[i];
34
- const value = visit.getParameterValue(def);
35
- const sanitisedValue = yield def.sanitise(value, sanitisedVisit, this.placeHistory, this.injector, this.navigationSession.isPopState);
36
- if (def.hasChanged(value, sanitisedValue)) {
37
- sanitisedVisit = sanitisedVisit.replace(def, sanitisedValue);
38
- }
39
- }
40
- return sanitisedVisit.hasChangedFrom(visit) ? sanitisedVisit : visit;
41
- });
42
- }
43
- }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaXQtc2FuaXRpc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2Uvcm91dGUvdmlzaXQtc2FuaXRpc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFPQSxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUFvQixpQkFBb0MsRUFBVSxjQUFzQyxFQUFVLE1BQWMsRUFBVSxZQUEwQixFQUFVLFFBQWtCO1FBQTVLLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRWhNLENBQUM7SUFFRCxXQUFXO0lBQ0wsUUFBUSxDQUFDLEtBQVk7O1lBQ3pCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDdkMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3pCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sY0FBYyxHQUFHLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RJLDBDQUEwQztnQkFDMUMsb0NBQW9DO2dCQUNwQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxFQUFFO29CQUNsRCwrREFBK0Q7b0JBQy9ELHFDQUFxQztvQkFDckMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDbEQ7YUFDRjtZQUVELDJFQUEyRTtZQUMzRSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7Z0JBQ25ELHNCQUFzQixFQUFFLElBQUk7Z0JBQzVCLHlCQUF5QixFQUFFLElBQUk7YUFDaEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxjQUFjLEdBQVUsS0FBSyxDQUFDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEksSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsRUFBRTtvQkFDekMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2lCQUM5RDthQUNGO1lBRUQsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RSxDQUFDO0tBQUE7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhY2UgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2Vzc2lvbiB9IGZyb20gJy4uL25hdmlnYXRpb24vc2Vzc2lvbi9uYXZpZ2F0aW9uLXNlc3Npb24nO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4uL3Zpc2l0JztcblxuZXhwb3J0IGNsYXNzIFZpc2l0U2FuaXRpc2VyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuYXZpZ2F0aW9uU2Vzc2lvbjogTmF2aWdhdGlvblNlc3Npb24sIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnksIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG5cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIHNhbml0aXNlKHZpc2l0OiBWaXNpdCk6IFByb21pc2U8VmlzaXQ+IHtcbiAgICBjb25zdCBwbGFjZURlZiA9IHZpc2l0LnBsYWNlRGVmaW5pdGlvbjtcbiAgICBpZiAocGxhY2VEZWYuaGFzUm91dGVJZCgpKSB7XG4gICAgICBjb25zdCByb3V0ZUlkRGVmID0gcGxhY2VEZWYuZ2V0Um91dGVJZFBhcmFtZXRlckRlZigpO1xuICAgICAgY29uc3Qgcm91dGVJZCA9IHZpc2l0LmdldFJvdXRlSWQoKTtcbiAgICAgIGNvbnN0IHNhbml0aXNlZFZhbHVlID0gYXdhaXQgcm91dGVJZERlZi5zYW5pdGlzZShyb3V0ZUlkLCB2aXNpdCwgdGhpcy5wbGFjZUhpc3RvcnksIHRoaXMuaW5qZWN0b3IsIHRoaXMubmF2aWdhdGlvblNlc3Npb24uaXNQb3BTdGF0ZSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh7cm91dGVJZCwgc2FuaXRpc2VkVmFsdWV9KTtcbiAgICAgIC8vICMjIy0tLS0tLS0gRUFSTFkgRVhJVCAtLS0tLS0tLSMjI1xuICAgICAgaWYgKHJvdXRlSWREZWYuaGFzQ2hhbmdlZChyb3V0ZUlkLCBzYW5pdGlzZWRWYWx1ZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIHJvdXRlIGlkIGhhcyBjaGFuZ2VkIHdlIHJlZGlyZWN0IGltbWVkaWF0ZWx5IGFzIG90aGVyXG4gICAgICAgIC8vIHBhcmFtZXRlciBzYW5pdGlzZXJzIG1pZ2h0IHVzZSBpdC5cbiAgICAgICAgcmV0dXJuIHZpc2l0LnJlcGxhY2Uocm91dGVJZERlZiwgc2FuaXRpc2VkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGRpZG4ndCByZXBsYWNlIHRoZSByb3V0ZUlkIHdlIGNvbnRpbnVlIHRoZSB1cmwgcHJlc2VudCBwYXJhbWV0ZXJzLlxuICAgIGNvbnN0IHBhcmFtZXRlckRlZnMgPSBwbGFjZURlZi5nZXRWaXNpdFBhcmFtZXRlckRlZnMoe1xuICAgICAgaW5jbHVkZVJvdXRlUGFyYW1ldGVyczogdHJ1ZSxcbiAgICAgIGluY2x1ZGVOb25Sb3V0ZVBhcmFtZXRlcnM6IHRydWVcbiAgICB9KTtcbiAgICBsZXQgc2FuaXRpc2VkVmlzaXQ6IFZpc2l0ID0gdmlzaXQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJEZWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkZWYgPSBwYXJhbWV0ZXJEZWZzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSB2aXNpdC5nZXRQYXJhbWV0ZXJWYWx1ZShkZWYpO1xuICAgICAgY29uc3Qgc2FuaXRpc2VkVmFsdWUgPSBhd2FpdCBkZWYuc2FuaXRpc2UodmFsdWUsIHNhbml0aXNlZFZpc2l0LCB0aGlzLnBsYWNlSGlzdG9yeSwgdGhpcy5pbmplY3RvciwgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi5pc1BvcFN0YXRlKTtcbiAgICAgIGlmIChkZWYuaGFzQ2hhbmdlZCh2YWx1ZSwgc2FuaXRpc2VkVmFsdWUpKSB7XG4gICAgICAgIHNhbml0aXNlZFZpc2l0ID0gc2FuaXRpc2VkVmlzaXQucmVwbGFjZShkZWYsIHNhbml0aXNlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2FuaXRpc2VkVmlzaXQuaGFzQ2hhbmdlZEZyb20odmlzaXQpID8gc2FuaXRpc2VkVmlzaXQgOiB2aXNpdDtcbiAgfVxuXG59XG4iXX0=