@scion/workbench 18.0.0-beta.9 → 19.0.0-beta.1

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 (253) hide show
  1. package/design/_workbench-view-global-styles.scss +0 -1
  2. package/fesm2022/scion-workbench.mjs +8556 -8622
  3. package/fesm2022/scion-workbench.mjs.map +1 -1
  4. package/lib/common/css-class.util.d.ts +5 -0
  5. package/lib/common/math.util.d.ts +7 -0
  6. package/lib/common/objects.util.d.ts +1 -1
  7. package/lib/dialog/workbench-dialog.component.d.ts +1 -2
  8. package/lib/layout/migration/model/workbench-layout-migration-v6.model.d.ts +35 -0
  9. package/lib/layout/migration/workbench-layout-migration-v6.service.d.ts +12 -0
  10. package/lib/layout/workbench-layout.model.d.ts +0 -1
  11. package/lib/layout/workbench-layout.service.d.ts +10 -12
  12. package/lib/layout/workench-layout-serializer.service.d.ts +1 -2
  13. package/lib/part/part-action-bar/part-action-bar.component.d.ts +2 -6
  14. package/lib/part/part-bar/part-bar.component.d.ts +66 -48
  15. package/lib/part/view-tab/view-tab.component.d.ts +3 -3
  16. package/lib/public_api.d.ts +0 -2
  17. package/lib/routing/routing.util.d.ts +2 -2
  18. package/lib/view/view-move-handler.service.d.ts +16 -14
  19. package/lib/view/view.component.d.ts +1 -2
  20. package/lib/view//311/265workbench-view.model.d.ts +1 -9
  21. package/lib/view-dnd/grid-drop-targets.util.d.ts +1 -1
  22. package/lib/view-dnd/view-drag.service.d.ts +72 -49
  23. package/lib/view-dnd/view-tab-drag-image-renderer.service.d.ts +11 -36
  24. package/package.json +8 -10
  25. package/esm2022/lib/activation-instant.provider.mjs +0 -29
  26. package/esm2022/lib/common/animation-frame.observable.mjs +0 -37
  27. package/esm2022/lib/common/asserts.util.mjs +0 -31
  28. package/esm2022/lib/common/class-list.mjs +0 -99
  29. package/esm2022/lib/common/coerce-observable.pipe.mjs +0 -28
  30. package/esm2022/lib/common/disposable.mjs +0 -11
  31. package/esm2022/lib/common/dom.util.mjs +0 -100
  32. package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +0 -32
  33. package/esm2022/lib/common/instanceof.pipe.mjs +0 -26
  34. package/esm2022/lib/common/map-coerce.pipe.mjs +0 -28
  35. package/esm2022/lib/common/null-if-empty.pipe.mjs +0 -38
  36. package/esm2022/lib/common/objects.util.mjs +0 -40
  37. package/esm2022/lib/common/observables.mjs +0 -72
  38. package/esm2022/lib/common/operators.mjs +0 -27
  39. package/esm2022/lib/common/public_api.mjs +0 -11
  40. package/esm2022/lib/common/stringify-error.util.mjs +0 -19
  41. package/esm2022/lib/common/throw-error.util.mjs +0 -16
  42. package/esm2022/lib/common/typeof.pipe.mjs +0 -26
  43. package/esm2022/lib/common/uid.util.mjs +0 -22
  44. package/esm2022/lib/common//311/265destroy-ref.mjs +0 -36
  45. package/esm2022/lib/communication/workbench-broadcast-channel.mjs +0 -38
  46. package/esm2022/lib/content-projection/content-as-overlay.component.mjs +0 -114
  47. package/esm2022/lib/content-projection/workbench-element-references.mjs +0 -32
  48. package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +0 -26
  49. package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +0 -34
  50. package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +0 -51
  51. package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +0 -46
  52. package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +0 -33
  53. package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +0 -46
  54. package/esm2022/lib/dialog/movable.directive.mjs +0 -126
  55. package/esm2022/lib/dialog/public_api.mjs +0 -15
  56. package/esm2022/lib/dialog/resizable.directive.mjs +0 -392
  57. package/esm2022/lib/dialog/workbench-dialog.component.mjs +0 -250
  58. package/esm2022/lib/dialog/workbench-dialog.mjs +0 -79
  59. package/esm2022/lib/dialog/workbench-dialog.options.mjs +0 -11
  60. package/esm2022/lib/dialog/workbench-dialog.registry.mjs +0 -73
  61. package/esm2022/lib/dialog/workbench-dialog.service.mjs +0 -96
  62. package/esm2022/lib/dialog//311/265workbench-dialog.mjs +0 -310
  63. package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +0 -98
  64. package/esm2022/lib/executor/latest-task-executor.mjs +0 -55
  65. package/esm2022/lib/executor/single-task-executor.mjs +0 -72
  66. package/esm2022/lib/filter-field/filter-field.component.mjs +0 -130
  67. package/esm2022/lib/glass-pane/blockable.mjs +0 -11
  68. package/esm2022/lib/glass-pane/blocking.mjs +0 -11
  69. package/esm2022/lib/glass-pane/glass-pane.directive.mjs +0 -120
  70. package/esm2022/lib/layout/grid-element/grid-element.component.mjs +0 -111
  71. package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +0 -97
  72. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v2.model.mjs +0 -11
  73. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v3.model.mjs +0 -11
  74. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v4.model.mjs +0 -11
  75. package/esm2022/lib/layout/migration/model/workbench-layout-migration-v5.model.mjs +0 -11
  76. package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +0 -117
  77. package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +0 -57
  78. package/esm2022/lib/layout/migration/workbench-layout-migration-v5.service.mjs +0 -67
  79. package/esm2022/lib/layout/public_api.mjs +0 -12
  80. package/esm2022/lib/layout/stringifier.mjs +0 -70
  81. package/esm2022/lib/layout/workbench-layout.component.mjs +0 -90
  82. package/esm2022/lib/layout/workbench-layout.factory.mjs +0 -24
  83. package/esm2022/lib/layout/workbench-layout.mjs +0 -16
  84. package/esm2022/lib/layout/workbench-layout.model.mjs +0 -62
  85. package/esm2022/lib/layout/workbench-layout.service.mjs +0 -68
  86. package/esm2022/lib/layout/workbench-layouts.util.mjs +0 -58
  87. package/esm2022/lib/layout/workench-layout-serializer.service.mjs +0 -109
  88. package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +0 -54
  89. package/esm2022/lib/layout//311/265workbench-layout.mjs +0 -876
  90. package/esm2022/lib/logging/console-appender.service.mjs +0 -46
  91. package/esm2022/lib/logging/index.mjs +0 -15
  92. package/esm2022/lib/logging/logger-names.mjs +0 -32
  93. package/esm2022/lib/logging/logger.mjs +0 -36
  94. package/esm2022/lib/logging/logging-support.mjs +0 -26
  95. package/esm2022/lib/logging/logging.model.mjs +0 -45
  96. package/esm2022/lib/logging/public_api.mjs +0 -12
  97. package/esm2022/lib/logging//311/265logger.mjs +0 -73
  98. package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +0 -69
  99. package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +0 -28
  100. package/esm2022/lib/message-box/public_api.mjs +0 -11
  101. package/esm2022/lib/message-box/workbench-message-box.component.mjs +0 -102
  102. package/esm2022/lib/message-box/workbench-message-box.options.mjs +0 -2
  103. package/esm2022/lib/message-box/workbench-message-box.service.mjs +0 -39
  104. package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +0 -45
  105. package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +0 -71
  106. package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +0 -126
  107. package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +0 -36
  108. package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +0 -84
  109. package/esm2022/lib/microfrontend-platform/manifest-object-cache.service.mjs +0 -63
  110. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +0 -54
  111. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +0 -85
  112. package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +0 -140
  113. package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +0 -133
  114. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/microfrontend-host-message-box.component.mjs +0 -113
  115. package/esm2022/lib/microfrontend-platform/microfrontend-host-message-box/text-message/text-message.component.mjs +0 -43
  116. package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +0 -101
  117. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor.mjs +0 -35
  118. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor.mjs +0 -88
  119. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-legacy-intent-translator.interceptor.mjs +0 -32
  120. package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box.component.mjs +0 -121
  121. package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +0 -45
  122. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-capability-validator.interceptor.mjs +0 -39
  123. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-installer.service.mjs +0 -120
  124. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/microfrontend-perspective-intent-handler.interceptor.mjs +0 -55
  125. package/esm2022/lib/microfrontend-platform/microfrontend-perspective/workbench-perspective-data.mjs +0 -19
  126. package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +0 -13
  127. package/esm2022/lib/microfrontend-platform/microfrontend-platform.config.mjs +0 -11
  128. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +0 -31
  129. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +0 -132
  130. package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +0 -115
  131. package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +0 -21
  132. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +0 -112
  133. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +0 -313
  134. package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-workbench-view.model.mjs +0 -23
  135. package/esm2022/lib/microfrontend-platform/public_api.mjs +0 -13
  136. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +0 -31
  137. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +0 -127
  138. package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +0 -125
  139. package/esm2022/lib/microfrontend-platform/stable-capability-id-assigner.interceptor.mjs +0 -32
  140. package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +0 -191
  141. package/esm2022/lib/migration/workbench-migration.mjs +0 -11
  142. package/esm2022/lib/migration/workbench-migrator.mjs +0 -38
  143. package/esm2022/lib/notification/notification-css-classes.pipe.mjs +0 -24
  144. package/esm2022/lib/notification/notification-list.component.mjs +0 -51
  145. package/esm2022/lib/notification/notification.component.mjs +0 -109
  146. package/esm2022/lib/notification/notification.config.mjs +0 -11
  147. package/esm2022/lib/notification/notification.mjs +0 -19
  148. package/esm2022/lib/notification/notification.service.mjs +0 -134
  149. package/esm2022/lib/notification/public_api.mjs +0 -12
  150. package/esm2022/lib/notification/text-notification.component.mjs +0 -23
  151. package/esm2022/lib/notification//311/265notification.mjs +0 -42
  152. package/esm2022/lib/page-not-found/page-not-found.component.mjs +0 -26
  153. package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +0 -31
  154. package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +0 -77
  155. package/esm2022/lib/part/part-bar/part-bar.component.mjs +0 -444
  156. package/esm2022/lib/part/part-portal.pipe.mjs +0 -35
  157. package/esm2022/lib/part/part.component.mjs +0 -135
  158. package/esm2022/lib/part/public_api.mjs +0 -13
  159. package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +0 -31
  160. package/esm2022/lib/part/view-context-menu/text.component.mjs +0 -38
  161. package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +0 -89
  162. package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +0 -76
  163. package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +0 -340
  164. package/esm2022/lib/part/view-list/view-list.component.mjs +0 -117
  165. package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +0 -82
  166. package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +0 -60
  167. package/esm2022/lib/part/view-tab/view-tab.component.mjs +0 -218
  168. package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +0 -29
  169. package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +0 -81
  170. package/esm2022/lib/part/workbench-part-action.registry.mjs +0 -23
  171. package/esm2022/lib/part/workbench-part.model.mjs +0 -19
  172. package/esm2022/lib/part/workbench-part.registry.mjs +0 -23
  173. package/esm2022/lib/part//311/265workbench-part.model.mjs +0 -146
  174. package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v1.model.mjs +0 -11
  175. package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v2.model.mjs +0 -11
  176. package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +0 -57
  177. package/esm2022/lib/perspective/public_api.mjs +0 -11
  178. package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +0 -39
  179. package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +0 -72
  180. package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +0 -50
  181. package/esm2022/lib/perspective/workbench-perspective.model.mjs +0 -2
  182. package/esm2022/lib/perspective/workbench-perspective.registry.mjs +0 -23
  183. package/esm2022/lib/perspective/workbench-perspective.service.mjs +0 -180
  184. package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +0 -62
  185. package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +0 -210
  186. package/esm2022/lib/popup/popup.component.mjs +0 -124
  187. package/esm2022/lib/popup/popup.config.mjs +0 -100
  188. package/esm2022/lib/popup/popup.origin.mjs +0 -11
  189. package/esm2022/lib/popup/popup.service.mjs +0 -339
  190. package/esm2022/lib/popup/public_api.mjs +0 -12
  191. package/esm2022/lib/portal/wb-component-portal.mjs +0 -130
  192. package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +0 -68
  193. package/esm2022/lib/public_api.mjs +0 -32
  194. package/esm2022/lib/registry/workbench-object-registry.mjs +0 -104
  195. package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +0 -31
  196. package/esm2022/lib/routing/public_api.mjs +0 -14
  197. package/esm2022/lib/routing/routing.model.mjs +0 -11
  198. package/esm2022/lib/routing/routing.util.mjs +0 -215
  199. package/esm2022/lib/routing/url-segment-matcher.mjs +0 -46
  200. package/esm2022/lib/routing/workbench-auxiliary-route-installer.service.mjs +0 -110
  201. package/esm2022/lib/routing/workbench-dialog-differ.mjs +0 -51
  202. package/esm2022/lib/routing/workbench-layout-differ.mjs +0 -61
  203. package/esm2022/lib/routing/workbench-message-box-differ.mjs +0 -51
  204. package/esm2022/lib/routing/workbench-navigational-states.mjs +0 -33
  205. package/esm2022/lib/routing/workbench-popup-differ.mjs +0 -51
  206. package/esm2022/lib/routing/workbench-route-data.mjs +0 -39
  207. package/esm2022/lib/routing/workbench-route-guards.mjs +0 -57
  208. package/esm2022/lib/routing/workbench-router-link.directive.mjs +0 -124
  209. package/esm2022/lib/routing/workbench-router.service.mjs +0 -19
  210. package/esm2022/lib/routing/workbench-url-observer.service.mjs +0 -305
  211. package/esm2022/lib/routing/workbench-view-outlet-differ.mjs +0 -58
  212. package/esm2022/lib/routing//311/265location.mjs +0 -70
  213. package/esm2022/lib/routing//311/265workbench-router.service.mjs +0 -359
  214. package/esm2022/lib/startup/public_api.mjs +0 -12
  215. package/esm2022/lib/startup/splash/splash.component.mjs +0 -24
  216. package/esm2022/lib/startup/workbench-initializer.mjs +0 -96
  217. package/esm2022/lib/startup/workbench-launcher.service.mjs +0 -173
  218. package/esm2022/lib/storage/public_api.mjs +0 -11
  219. package/esm2022/lib/storage/workbench-storage.mjs +0 -37
  220. package/esm2022/lib/testing/public_api.mjs +0 -12
  221. package/esm2022/lib/testing/workbench-testing.module.mjs +0 -49
  222. package/esm2022/lib/testing/workbench.provider.mjs +0 -60
  223. package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +0 -72
  224. package/esm2022/lib/view/public_api.mjs +0 -11
  225. package/esm2022/lib/view/view-context-provider.mjs +0 -31
  226. package/esm2022/lib/view/view-move-handler.service.mjs +0 -145
  227. package/esm2022/lib/view/view-portal.pipe.mjs +0 -33
  228. package/esm2022/lib/view/view.component.mjs +0 -128
  229. package/esm2022/lib/view/workbench-view.model.mjs +0 -12
  230. package/esm2022/lib/view/workbench-view.registry.mjs +0 -23
  231. package/esm2022/lib/view//311/265workbench-view.model.mjs +0 -375
  232. package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +0 -49
  233. package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +0 -58
  234. package/esm2022/lib/view-dnd/view-drag.service.mjs +0 -213
  235. package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +0 -89
  236. package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +0 -183
  237. package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +0 -224
  238. package/esm2022/lib/workbench-config.mjs +0 -15
  239. package/esm2022/lib/workbench-id.mjs +0 -21
  240. package/esm2022/lib/workbench.component.mjs +0 -146
  241. package/esm2022/lib/workbench.constants.mjs +0 -41
  242. package/esm2022/lib/workbench.model.mjs +0 -11
  243. package/esm2022/lib/workbench.module.mjs +0 -101
  244. package/esm2022/lib/workbench.provider.mjs +0 -111
  245. package/esm2022/lib/workbench.service.mjs +0 -29
  246. package/esm2022/lib//311/265workbench.service.mjs +0 -102
  247. package/esm2022/public-api.mjs +0 -14
  248. package/esm2022/scion-workbench.mjs +0 -5
  249. package/lib/common/animation-frame.observable.d.ts +0 -10
  250. package/lib/testing/public_api.d.ts +0 -2
  251. package/lib/testing/workbench-testing.module.d.ts +0 -40
  252. package/lib/testing/workbench.provider.d.ts +0 -31
  253. package/lib/workbench.module.d.ts +0 -65
@@ -1,313 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2022 Swiss Federal Railways
3
- *
4
- * This program and the accompanying materials are made
5
- * available under the terms of the Eclipse Public License 2.0
6
- * which is available at https://www.eclipse.org/legal/epl-2.0/
7
- *
8
- * SPDX-License-Identifier: EPL-2.0
9
- */
10
- import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, effect, ElementRef, inject, Injector, runInInjectionContext, untracked, viewChild } from '@angular/core';
11
- import { ActivatedRoute } from '@angular/router';
12
- import { combineLatest, firstValueFrom, of, Subject, switchMap } from 'rxjs';
13
- import { first, map, takeUntil } from 'rxjs/operators';
14
- import { ManifestService, mapToBody, MessageClient, MessageHeaders, MicrofrontendPlatformConfig, OutletRouter, ResponseStatusCodes } from '@scion/microfrontend-platform';
15
- import { ManifestObjectCache } from '../manifest-object-cache.service';
16
- import { ɵMicrofrontendRouteParams, ɵVIEW_ID_CONTEXT_KEY, ɵWorkbenchCommands } from '@scion/workbench-client';
17
- import { Dictionaries, Maps } from '@scion/toolkit/util';
18
- import { Logger, LoggerNames } from '../../logging';
19
- import { IFRAME_OVERLAY_HOST } from '../../content-projection/workbench-element-references';
20
- import { serializeExecution } from '../../common/operators';
21
- import { ɵWorkbenchView } from '../../view/ɵworkbench-view.model';
22
- import { filterArray, mapArray } from '@scion/toolkit/operators';
23
- import { ViewMenuService } from '../../part/view-context-menu/view-menu.service';
24
- import { WorkbenchRouter } from '../../routing/workbench-router.service';
25
- import { stringifyError } from '../../common/stringify-error.util';
26
- import { MicrofrontendViewRoutes } from '../routing/microfrontend-view-routes';
27
- import { AsyncPipe, NgClass, NgComponentOutlet } from '@angular/common';
28
- import { ContentAsOverlayComponent } from '../../content-projection/content-as-overlay.component';
29
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
30
- import { WorkbenchLayoutService } from '../../layout/workbench-layout.service';
31
- import { MicrofrontendSplashComponent } from '../microfrontend-splash/microfrontend-splash.component';
32
- import { GLASS_PANE_BLOCKABLE, GLASS_PANE_OPTIONS, GlassPaneDirective } from '../../glass-pane/glass-pane.directive';
33
- import { MicrofrontendWorkbenchView } from './microfrontend-workbench-view.model';
34
- import { Microfrontends } from '../common/microfrontend.util';
35
- import { Objects } from '../../common/objects.util';
36
- import { WorkbenchView } from '../../view/workbench-view.model';
37
- import * as i0 from "@angular/core";
38
- /**
39
- * Embeds the microfrontend of a view capability.
40
- */
41
- export class MicrofrontendViewComponent {
42
- constructor() {
43
- this._host = inject((ElementRef));
44
- this._route = inject(ActivatedRoute);
45
- this._outletRouter = inject(OutletRouter);
46
- this._manifestService = inject(ManifestService);
47
- this._manifestObjectCache = inject(ManifestObjectCache);
48
- this._messageClient = inject(MessageClient);
49
- this._logger = inject(Logger);
50
- this._viewContextMenuService = inject(ViewMenuService);
51
- this._workbenchLayoutService = inject(WorkbenchLayoutService);
52
- this._workbenchRouter = inject(WorkbenchRouter);
53
- this._injector = inject(Injector);
54
- this._changeDetectorRef = inject(ChangeDetectorRef);
55
- this._destroyRef = inject(DestroyRef);
56
- this._routerOutletElement = viewChild.required('router_outlet');
57
- this._unsubscribeParamsUpdater$ = new Subject();
58
- this._universalKeystrokes = [
59
- 'keydown.escape', // allows closing notifications
60
- ];
61
- this.view = inject(ɵWorkbenchView);
62
- this.capability = null;
63
- /** Splash to display until the microfrontend signals readiness. */
64
- this.splash = inject(MicrofrontendPlatformConfig).splash ?? MicrofrontendSplashComponent;
65
- /** Indicates whether a workbench drag operation is in progress, such as when dragging a view or moving a sash. */
66
- this.isWorkbenchDrag = false;
67
- /** Configures iframe projection. */
68
- this.overlayConfig = {
69
- location: inject(IFRAME_OVERLAY_HOST),
70
- visible: this.view.portal.attached,
71
- };
72
- this._logger.debug(() => `Constructing MicrofrontendViewComponent. [viewId=${this.view.id}]`, LoggerNames.MICROFRONTEND_ROUTING);
73
- this.keystrokesToBubble$ = combineLatest([this.viewContextMenuKeystrokes$(), of(this._universalKeystrokes)])
74
- .pipe(map(keystrokes => new Array().concat(...keystrokes)));
75
- this.installWorkbenchDragDetector();
76
- this.installViewActivePublisher();
77
- this.installPartIdPublisher();
78
- this.installCanCloseGuard(ɵWorkbenchCommands.canCloseTopic(this.view.id));
79
- this.installCanCloseGuard(ɵWorkbenchCommands.viewClosingTopic(this.view.id));
80
- }
81
- ngOnInit() {
82
- this._routerOutletElement().nativeElement.setContextValue(ɵVIEW_ID_CONTEXT_KEY, this.view.id);
83
- this.propagateWorkbenchTheme();
84
- this.installMenuItemAccelerators$();
85
- this.installNavigator();
86
- }
87
- installNavigator() {
88
- this._route.params
89
- .pipe(switchMap(params => this.fetchCapability$(params[ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]).pipe(map(capability => ({ capability, params })))), serializeExecution(({ capability, params }) => this.onNavigate(this.capability, capability, params)), takeUntilDestroyed(this._destroyRef))
90
- .subscribe();
91
- }
92
- async onNavigate(prevCapability, capability, params) {
93
- if (!capability) {
94
- this._logger.warn(() => `[NullCapabilityError] No application found to provide a view capability of id '${params[ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]}'. Maybe, the requested view is not public API or the providing application not available.`, LoggerNames.MICROFRONTEND_ROUTING);
95
- this.unload();
96
- return;
97
- }
98
- this.capability = capability;
99
- this.view.registerAdapter(MicrofrontendWorkbenchView, new MicrofrontendWorkbenchView(capability, params));
100
- // Check if navigating to a new microfrontend.
101
- if (!prevCapability || prevCapability.metadata.id !== capability.metadata.id) {
102
- this.setViewProperties(capability, params);
103
- this.installParamsUpdater(capability);
104
- }
105
- // Signal the currently loaded application to unload.
106
- if (prevCapability && prevCapability.metadata.appSymbolicName !== capability.metadata.appSymbolicName) {
107
- await this._messageClient.publish(ɵWorkbenchCommands.viewUnloadingTopic(this.view.id));
108
- }
109
- // Pass parameters to the microfrontend.
110
- await this._messageClient.publish(ɵWorkbenchCommands.viewParamsTopic(this.view.id), Maps.coerce(params), { retain: true });
111
- // When navigating to another view capability of the same app, wait until transported the params to the microfrontend before loading the
112
- // new microfrontend into the iframe, allowing the currently loaded microfrontend to clean up subscriptions.
113
- if (prevCapability
114
- && prevCapability.metadata.appSymbolicName === capability.metadata.appSymbolicName
115
- && prevCapability.metadata.id !== capability.metadata.id) {
116
- await this.waitForCapabilityParam(capability.metadata.id);
117
- }
118
- // Navigate to the microfrontend.
119
- const application = this._manifestService.getApplication(capability.metadata.appSymbolicName);
120
- this._logger.debug(() => `Loading microfrontend into workbench view [viewId=${this.view.id}, app=${capability.metadata.appSymbolicName}, baseUrl=${application.baseUrl}, path=${(capability.properties.path)}].`, LoggerNames.MICROFRONTEND_ROUTING, params, capability);
121
- await this._outletRouter.navigate(capability.properties.path, {
122
- outlet: this.view.id,
123
- relativeTo: application.baseUrl,
124
- params: params,
125
- pushStateToSessionHistoryStack: false,
126
- showSplash: capability.properties.showSplash,
127
- ɵcapabilityId: capability.metadata.id,
128
- });
129
- // Inactive views are not checked for changes since detached from the Angular component tree.
130
- // So, we manually trigger change detection to update attributes on the `sci-router-outlet`.
131
- if (!this.view.active()) {
132
- this._changeDetectorRef.detectChanges();
133
- }
134
- }
135
- fetchCapability$(capabilityId) {
136
- return this._manifestObjectCache.observeCapability$(capabilityId);
137
- }
138
- installMenuItemAccelerators$() {
139
- // Since the iframe is added at a top-level location in the DOM, that is, not as a child element of this component,
140
- // the workbench view misses keyboard events from embedded content. As a result, menu item accelerators of the context
141
- // menu of this view do not work, so we install the accelerators on the router outlet as well.
142
- this._viewContextMenuService.installMenuItemAccelerators$(this._routerOutletElement().nativeElement, this.view)
143
- .pipe(takeUntilDestroyed(this._destroyRef))
144
- .subscribe();
145
- }
146
- /**
147
- * Subscribes to requests from the currently loaded microfrontend to update its parameters.
148
- */
149
- installParamsUpdater(viewCapability) {
150
- this._unsubscribeParamsUpdater$.next();
151
- const subscription = this._messageClient.observe$(ɵWorkbenchCommands.viewParamsUpdateTopic(this.view.id, viewCapability.metadata.id))
152
- .pipe(takeUntil(this._unsubscribeParamsUpdater$), takeUntilDestroyed(this._destroyRef))
153
- .subscribe(async (request) => {
154
- // We DO NOT navigate if the subscription was closed, e.g., because closed the view or navigated to another capability.
155
- const replyTo = request.headers.get(MessageHeaders.ReplyTo);
156
- try {
157
- const success = await this._workbenchRouter.navigate(layout => {
158
- // Cancel pending navigation if the subscription was closed, e.g., because closed the view or navigated to another capability
159
- if (subscription.closed) {
160
- return null;
161
- }
162
- const paramsHandling = request.body.paramsHandling;
163
- const currentParams = this._route.snapshot.params;
164
- const newParams = Dictionaries.coerce(request.body.params); // coerce params for backward compatibility
165
- const mergedParams = Objects.withoutUndefinedEntries(paramsHandling === 'merge' ? { ...currentParams, ...newParams } : newParams);
166
- const { urlParams, transientParams } = MicrofrontendViewRoutes.splitParams(mergedParams, viewCapability);
167
- return layout.navigateView(this.view.id, [urlParams], {
168
- relativeTo: this._route,
169
- state: Objects.withoutUndefinedEntries({
170
- [MicrofrontendViewRoutes.STATE_TRANSIENT_PARAMS]: transientParams,
171
- }),
172
- });
173
- });
174
- await this._messageClient.publish(replyTo, success, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
175
- }
176
- catch (error) {
177
- await this._messageClient.publish(replyTo, stringifyError(error), { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.ERROR) });
178
- }
179
- });
180
- }
181
- /**
182
- * Updates the properties of this view, such as the view title, as defined by the capability.
183
- */
184
- setViewProperties(viewCapability, params) {
185
- this.view.title = Microfrontends.substituteNamedParameters(viewCapability.properties.title, Maps.coerce(params)) ?? null;
186
- this.view.heading = Microfrontends.substituteNamedParameters(viewCapability.properties.heading, Maps.coerce(params)) ?? null;
187
- this.view.classList.application = viewCapability.properties.cssClass;
188
- this.view.closable = viewCapability.properties.closable ?? true;
189
- this.view.dirty = false;
190
- }
191
- installViewActivePublisher() {
192
- effect(() => {
193
- const active = this.view.active();
194
- untracked(() => {
195
- const commandTopic = ɵWorkbenchCommands.viewActiveTopic(this.view.id);
196
- this._messageClient.publish(commandTopic, active, { retain: true }).then();
197
- });
198
- });
199
- }
200
- installPartIdPublisher() {
201
- effect(() => {
202
- const part = this.view.part();
203
- untracked(() => {
204
- const commandTopic = ɵWorkbenchCommands.viewPartIdTopic(this.view.id);
205
- this._messageClient.publish(commandTopic, part.id, { retain: true }).then();
206
- });
207
- });
208
- }
209
- /**
210
- * Promise that resolves once params contain the given capability id.
211
- */
212
- async waitForCapabilityParam(viewCapabilityId) {
213
- const viewParams$ = this._messageClient.observe$(ɵWorkbenchCommands.viewParamsTopic(this.view.id))
214
- .pipe(mapToBody(), first(params => params.get(ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID) === viewCapabilityId));
215
- await firstValueFrom(viewParams$);
216
- }
217
- installCanCloseGuard(canCloseTopic) {
218
- let canCloseRef;
219
- this._messageClient.subscriberCount$(canCloseTopic)
220
- .pipe(map(count => count > 0), takeUntilDestroyed())
221
- .subscribe(confirmClosing => {
222
- if (confirmClosing) {
223
- canCloseRef = this.view.canClose(() => this._messageClient.request$(canCloseTopic).pipe(mapToBody()));
224
- }
225
- else {
226
- canCloseRef?.dispose();
227
- }
228
- });
229
- }
230
- onFocusWithin(event) {
231
- const { detail: focusWithin } = event;
232
- if (focusWithin) {
233
- this._host.nativeElement.dispatchEvent(new CustomEvent('sci-microfrontend-focusin', { bubbles: true }));
234
- }
235
- }
236
- /**
237
- * Upon subscription, emits the keystrokes registered with menu items of this view's context menu,
238
- * and then continuously when they change. The observable never completes.
239
- */
240
- viewContextMenuKeystrokes$() {
241
- return this.view.menuItems$
242
- .pipe(filterArray(menuItem => !!menuItem.accelerator), mapArray(menuItem => menuItem.accelerator.map(accelerator => {
243
- // Normalize keystrokes according to `SciRouterOutletElement#keystrokes`
244
- switch (accelerator) {
245
- case 'ctrl':
246
- return 'control';
247
- case '.':
248
- return 'dot';
249
- case ' ':
250
- return 'space';
251
- default:
252
- return accelerator;
253
- }
254
- })), mapArray(accelerator => ['keydown'].concat(accelerator).join('.')));
255
- }
256
- /**
257
- * Sets the {@link isWorkbenchDrag} property when a workbench drag operation is detected,
258
- * such as when dragging a view or moving a sash.
259
- */
260
- installWorkbenchDragDetector() {
261
- this._workbenchLayoutService.dragging$
262
- .pipe(takeUntilDestroyed())
263
- .subscribe(event => {
264
- this.isWorkbenchDrag = (event === 'start');
265
- });
266
- }
267
- propagateWorkbenchTheme() {
268
- runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this._routerOutletElement().nativeElement));
269
- }
270
- unload() {
271
- // Delete retained messages to free resources.
272
- this._messageClient.publish(ɵWorkbenchCommands.viewActiveTopic(this.view.id), undefined, { retain: true }).then();
273
- this._messageClient.publish(ɵWorkbenchCommands.viewParamsTopic(this.view.id), undefined, { retain: true }).then();
274
- this._messageClient.publish(ɵWorkbenchCommands.viewPartIdTopic(this.view.id), undefined, { retain: true }).then();
275
- this._outletRouter.navigate(null, { outlet: this.view.id }).then();
276
- this.view.unregisterAdapter(MicrofrontendWorkbenchView);
277
- }
278
- ngOnDestroy() {
279
- this.unload();
280
- }
281
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
282
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.2", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "_routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, isSignal: true }], ngImport: i0, template: "<wb-content-as-overlay [config]=\"overlayConfig\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"isWorkbenchDrag\"\n [attr.data-viewid]=\"view.id\"\n wbGlassPane>\n <sci-router-outlet #router_outlet\n [name]=\"view.id\"\n [attr.data-capabilityid]=\"capability?.metadata!.id\"\n [attr.data-app]=\"capability?.metadata!.appSymbolicName\"\n [ngClass]=\"view.classList.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"/>\n </sci-router-outlet>\n </div>\n</wb-content-as-overlay>\n", styles: [":host{display:grid}div.microfrontend-view{display:grid}div.microfrontend-view.workbench-drag{pointer-events:none}div.microfrontend-view>sci-router-outlet::part(splash){display:grid}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ContentAsOverlayComponent, selector: "wb-content-as-overlay", inputs: ["config"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
283
- configureMicrofrontendGlassPane(),
284
- ] }); }
285
- }
286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
287
- type: Component,
288
- args: [{ selector: 'wb-microfrontend-view', standalone: true, imports: [
289
- NgClass,
290
- AsyncPipe,
291
- ContentAsOverlayComponent,
292
- NgComponentOutlet,
293
- GlassPaneDirective,
294
- ], viewProviders: [
295
- configureMicrofrontendGlassPane(),
296
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [config]=\"overlayConfig\">\n <div class=\"microfrontend-view\"\n [class.workbench-drag]=\"isWorkbenchDrag\"\n [attr.data-viewid]=\"view.id\"\n wbGlassPane>\n <sci-router-outlet #router_outlet\n [name]=\"view.id\"\n [attr.data-capabilityid]=\"capability?.metadata!.id\"\n [attr.data-app]=\"capability?.metadata!.appSymbolicName\"\n [ngClass]=\"view.classList.asList()\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"/>\n </sci-router-outlet>\n </div>\n</wb-content-as-overlay>\n", styles: [":host{display:grid}div.microfrontend-view{display:grid}div.microfrontend-view.workbench-drag{pointer-events:none}div.microfrontend-view>sci-router-outlet::part(splash){display:grid}\n"] }]
297
- }], ctorParameters: () => [] });
298
- /**
299
- * Blocks the microfrontend outlet when dialog(s) overlay this view.
300
- */
301
- function configureMicrofrontendGlassPane() {
302
- return [
303
- {
304
- provide: GLASS_PANE_BLOCKABLE,
305
- useExisting: ɵWorkbenchView,
306
- },
307
- {
308
- provide: GLASS_PANE_OPTIONS,
309
- useFactory: () => ({ attributes: { 'data-viewid': inject(WorkbenchView).id } }),
310
- },
311
- ];
312
- }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQStCLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL00sT0FBTyxFQUFDLGNBQWMsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUF1QyxNQUFNLCtCQUErQixDQUFDO0FBQzlNLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBMEIseUJBQXlCLEVBQUUs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O1lBQzdCLFdBQVcsRUFBRSxjQUFjO1NBQzVCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLFVBQVUsRUFBRSxHQUFxQixFQUFFLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxFQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQztTQUM5RjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIERlc3Ryb3lSZWYsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFByb3ZpZGVyLCBydW5JbkluamVjdGlvbkNvbnRleHQsIHVudHJhY2tlZCwgdmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaXJzdCwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWFuaWZlc3RTZXJ2aWNlLCBtYXBUb0JvZHksIE1lc3NhZ2VDbGllbnQsIE1lc3NhZ2VIZWFkZXJzLCBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWcsIE91dGxldFJvdXRlciwgUmVzcG9uc2VTdGF0dXNDb2RlcywgU2NpUm91dGVyT3V0bGV0RWxlbWVudCwgVG9waWNNZXNzYWdlfSBmcm9tICdAc2Npb24vbWljcm9mcm9udGVuZC1wbGF0Zm9ybSc7XG5pbXBvcnQge01hbmlmZXN0T2JqZWN0Q2FjaGV9IGZyb20gJy4uL21hbmlmZXN0LW9iamVjdC1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7V29ya2JlbmNoVmlld0NhcGFiaWxpdHksIMm1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLCDJtVZJRVdfSURfQ09OVEVYVF9LRVksIMm1Vmlld1BhcmFtc1VwZGF0ZUNvbW1hbmQsIMm1V29ya2JlbmNoQ29tbWFuZHN9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7RGljdGlvbmFyaWVzLCBNYXBzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcbmltcG9ydCB7TG9nZ2VyLCBMb2dnZXJOYW1lc30gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQge0NhbkNsb3NlUmVmfSBmcm9tICcuLi8uLi93b3JrYmVuY2gubW9kZWwnO1xuaW1wb3J0IHtJRlJBTUVfT1ZFUkxBWV9IT1NUfSBmcm9tICcuLi8uLi9jb250ZW50LXByb2plY3Rpb24vd29ya2JlbmNoLWVsZW1lbnQtcmVmZXJlbmNlcyc7XG5pbXBvcnQge3NlcmlhbGl6ZUV4ZWN1dGlvbn0gZnJvbSAnLi4vLi4vY29tbW9uL29wZXJhdG9ycyc7XG5pbXBvcnQge8m1V29ya2JlbmNoVmlld30gZnJvbSAnLi4vLi4vdmlldy/JtXdvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7ZmlsdGVyQXJyYXksIG1hcEFycmF5fSBmcm9tICdAc2Npb24vdG9vbGtpdC9vcGVyYXRvcnMnO1xuaW1wb3J0IHtWaWV3TWVudVNlcnZpY2V9IGZyb20gJy4uLy4uL3BhcnQvdmlldy1jb250ZXh0LW1lbnUvdmlldy1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtXb3JrYmVuY2hSb3V0ZXJ9IGZyb20gJy4uLy4uL3JvdXRpbmcvd29ya2JlbmNoLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7c3RyaW5naWZ5RXJyb3J9IGZyb20gJy4uLy4uL2NvbW1vbi9zdHJpbmdpZnktZXJyb3IudXRpbCc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRWaWV3Um91dGVzfSBmcm9tICcuLi9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1yb3V0ZXMnO1xuaW1wb3J0IHtBc3luY1BpcGUsIE5nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb250ZW50QXNPdmVybGF5Q29tcG9uZW50LCBDb250ZW50QXNPdmVybGF5Q29uZmlnfSBmcm9tICcuLi8uLi9jb250ZW50LXByb2plY3Rpb24vY29udGVudC1hcy1vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFNwbGFzaENvbXBvbmVudH0gZnJvbSAnLi4vbWljcm9mcm9udGVuZC1zcGxhc2gvbWljcm9mcm9udGVuZC1zcGxhc2guY29tcG9uZW50JztcbmltcG9ydCB7R0xBU1NfUEFORV9CTE9DS0FCTEUsIEdMQVNTX1BBTkVfT1BUSU9OUywgR2xhc3NQYW5lRGlyZWN0aXZlLCBHbGFzc1BhbmVPcHRpb25zfSBmcm9tICcuLi8uLi9nbGFzcy1wYW5lL2dsYXNzLXBhbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXd9IGZyb20gJy4vbWljcm9mcm9udGVuZC13b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRzfSBmcm9tICcuLi9jb21tb24vbWljcm9mcm9udGVuZC51dGlsJztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vY29tbW9uL29iamVjdHMudXRpbCc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXd9IGZyb20gJy4uLy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuXG4vKipcbiAqIEVtYmVkcyB0aGUgbWljcm9mcm9udGVuZCBvZiBhIHZpZXcgY2FwYWJpbGl0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2ItbWljcm9mcm9udGVuZC12aWV3JyxcbiAgc3R5bGVVcmxzOiBbJy4vbWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQ29udGVudEFzT3ZlcmxheUNvbXBvbmVudCxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBHbGFzc1BhbmVEaXJlY3RpdmUsXG4gIF0sXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICBjb25maWd1cmVNaWNyb2Zyb250ZW5kR2xhc3NQYW5lKCksXG4gIF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSwgLy8gcmVxdWlyZWQgYmVjYXVzZSA8c2NpLXJvdXRlci1vdXRsZXQ+IGlzIGEgY3VzdG9tIGVsZW1lbnRcbn0pXG5leHBvcnQgY2xhc3MgTWljcm9mcm9udGVuZFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfaG9zdCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gIHByaXZhdGUgX3JvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBfb3V0bGV0Um91dGVyID0gaW5qZWN0KE91dGxldFJvdXRlcik7XG4gIHByaXZhdGUgX21hbmlmZXN0U2VydmljZSA9IGluamVjdChNYW5pZmVzdFNlcnZpY2UpO1xuICBwcml2YXRlIF9tYW5pZmVzdE9iamVjdENhY2hlID0gaW5qZWN0KE1hbmlmZXN0T2JqZWN0Q2FjaGUpO1xuICBwcml2YXRlIF9tZXNzYWdlQ2xpZW50ID0gaW5qZWN0KE1lc3NhZ2VDbGllbnQpO1xuICBwcml2YXRlIF9sb2dnZXIgPSBpbmplY3QoTG9nZ2VyKTtcbiAgcHJpdmF0ZSBfdmlld0NvbnRleHRNZW51U2VydmljZSA9IGluamVjdChWaWV3TWVudVNlcnZpY2UpO1xuICBwcml2YXRlIF93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlID0gaW5qZWN0KFdvcmtiZW5jaExheW91dFNlcnZpY2UpO1xuICBwcml2YXRlIF93b3JrYmVuY2hSb3V0ZXIgPSBpbmplY3QoV29ya2JlbmNoUm91dGVyKTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcHJpdmF0ZSBfcm91dGVyT3V0bGV0RWxlbWVudCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPFNjaVJvdXRlck91dGxldEVsZW1lbnQ+Pigncm91dGVyX291dGxldCcpO1xuICBwcml2YXRlIF91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfdW5pdmVyc2FsS2V5c3Ryb2tlcyA9IFtcbiAgICAna2V5ZG93bi5lc2NhcGUnLCAvLyBhbGxvd3MgY2xvc2luZyBub3RpZmljYXRpb25zXG4gIF07XG5cbiAgcHJvdGVjdGVkIHZpZXcgPSBpbmplY3QoybVXb3JrYmVuY2hWaWV3KTtcbiAgcHJvdGVjdGVkIGNhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTcGxhc2ggdG8gZGlzcGxheSB1bnRpbCB0aGUgbWljcm9mcm9udGVuZCBzaWduYWxzIHJlYWRpbmVzcy4gKi9cbiAgcHJvdGVjdGVkIHNwbGFzaCA9IGluamVjdChNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWcpLnNwbGFzaCA/PyBNaWNyb2Zyb250ZW5kU3BsYXNoQ29tcG9uZW50O1xuICAvKiogS2V5c3Ryb2tlcyB3aGljaCB0byBidWJibGUgYWNyb3NzIGlmcmFtZSBib3VuZGFyaWVzIGZyb20gZW1iZWRkZWQgY29udGVudC4gKi9cbiAgcHJvdGVjdGVkIGtleXN0cm9rZXNUb0J1YmJsZSQ6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgYSB3b3JrYmVuY2ggZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHN1Y2ggYXMgd2hlbiBkcmFnZ2luZyBhIHZpZXcgb3IgbW92aW5nIGEgc2FzaC4gKi9cbiAgcHJvdGVjdGVkIGlzV29ya2JlbmNoRHJhZyA9IGZhbHNlO1xuICAvKiogQ29uZmlndXJlcyBpZnJhbWUgcHJvamVjdGlvbi4gKi9cbiAgcHJvdGVjdGVkIG92ZXJsYXlDb25maWc6IENvbnRlbnRBc092ZXJsYXlDb25maWcgPSB7XG4gICAgbG9jYXRpb246IGluamVjdChJRlJBTUVfT1ZFUkxBWV9IT1NUKSxcbiAgICB2aXNpYmxlOiB0aGlzLnZpZXcucG9ydGFsLmF0dGFjaGVkLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgQ29uc3RydWN0aW5nIE1pY3JvZnJvbnRlbmRWaWV3Q29tcG9uZW50LiBbdmlld0lkPSR7dGhpcy52aWV3LmlkfV1gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcpO1xuICAgIHRoaXMua2V5c3Ryb2tlc1RvQnViYmxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMudmlld0NvbnRleHRNZW51S2V5c3Ryb2tlcyQoKSwgb2YodGhpcy5fdW5pdmVyc2FsS2V5c3Ryb2tlcyldKVxuICAgICAgLnBpcGUobWFwKGtleXN0cm9rZXMgPT4gbmV3IEFycmF5PHN0cmluZz4oKS5jb25jYXQoLi4ua2V5c3Ryb2tlcykpKTtcbiAgICB0aGlzLmluc3RhbGxXb3JrYmVuY2hEcmFnRGV0ZWN0b3IoKTtcbiAgICB0aGlzLmluc3RhbGxWaWV3QWN0aXZlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbnN0YWxsUGFydElkUHVibGlzaGVyKCk7XG4gICAgdGhpcy5pbnN0YWxsQ2FuQ2xvc2VHdWFyZCjJtVdvcmtiZW5jaENvbW1hbmRzLmNhbkNsb3NlVG9waWModGhpcy52aWV3LmlkKSk7XG4gICAgdGhpcy5pbnN0YWxsQ2FuQ2xvc2VHdWFyZCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdDbG9zaW5nVG9waWModGhpcy52aWV3LmlkKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGVyT3V0bGV0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuc2V0Q29udGV4dFZhbHVlKMm1VklFV19JRF9DT05URVhUX0tFWSwgdGhpcy52aWV3LmlkKTtcbiAgICB0aGlzLnByb3BhZ2F0ZVdvcmtiZW5jaFRoZW1lKCk7XG4gICAgdGhpcy5pbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKCk7XG4gICAgdGhpcy5pbnN0YWxsTmF2aWdhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxOYXZpZ2F0b3IoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGUucGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PiB0aGlzLmZldGNoQ2FwYWJpbGl0eSQocGFyYW1zW8m1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEXSkucGlwZShtYXAoY2FwYWJpbGl0eSA9PiAoe2NhcGFiaWxpdHksIHBhcmFtc30pKSkpLFxuICAgICAgICBzZXJpYWxpemVFeGVjdXRpb24oKHtjYXBhYmlsaXR5LCBwYXJhbXN9KSA9PiB0aGlzLm9uTmF2aWdhdGUodGhpcy5jYXBhYmlsaXR5LCBjYXBhYmlsaXR5LCBwYXJhbXMpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbk5hdmlnYXRlKHByZXZDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IG51bGwsIGNhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgbnVsbCwgcGFyYW1zOiBQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNhcGFiaWxpdHkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCgpID0+IGBbTnVsbENhcGFiaWxpdHlFcnJvcl0gTm8gYXBwbGljYXRpb24gZm91bmQgdG8gcHJvdmlkZSBhIHZpZXcgY2FwYWJpbGl0eSBvZiBpZCAnJHtwYXJhbXNbybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSURdfScuIE1heWJlLCB0aGUgcmVxdWVzdGVkIHZpZXcgaXMgbm90IHB1YmxpYyBBUEkgb3IgdGhlIHByb3ZpZGluZyBhcHBsaWNhdGlvbiBub3QgYXZhaWxhYmxlLmAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORyk7XG4gICAgICB0aGlzLnVubG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7XG4gICAgdGhpcy52aWV3LnJlZ2lzdGVyQWRhcHRlcihNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldywgbmV3IE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3KGNhcGFiaWxpdHksIHBhcmFtcykpO1xuXG4gICAgLy8gQ2hlY2sgaWYgbmF2aWdhdGluZyB0byBhIG5ldyBtaWNyb2Zyb250ZW5kLlxuICAgIGlmICghcHJldkNhcGFiaWxpdHkgfHwgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgdGhpcy5zZXRWaWV3UHJvcGVydGllcyhjYXBhYmlsaXR5LCBwYXJhbXMpO1xuICAgICAgdGhpcy5pbnN0YWxsUGFyYW1zVXBkYXRlcihjYXBhYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBTaWduYWwgdGhlIGN1cnJlbnRseSBsb2FkZWQgYXBwbGljYXRpb24gdG8gdW5sb2FkLlxuICAgIGlmIChwcmV2Q2FwYWJpbGl0eSAmJiBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdVbmxvYWRpbmdUb3BpYyh0aGlzLnZpZXcuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBQYXNzIHBhcmFtZXRlcnMgdG8gdGhlIG1pY3JvZnJvbnRlbmQuXG4gICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCksIE1hcHMuY29lcmNlKHBhcmFtcyksIHtyZXRhaW46IHRydWV9KTtcblxuICAgIC8vIFdoZW4gbmF2aWdhdGluZyB0byBhbm90aGVyIHZpZXcgY2FwYWJpbGl0eSBvZiB0aGUgc2FtZSBhcHAsIHdhaXQgdW50aWwgdHJhbnNwb3J0ZWQgdGhlIHBhcmFtcyB0byB0aGUgbWljcm9mcm9udGVuZCBiZWZvcmUgbG9hZGluZyB0aGVcbiAgICAvLyBuZXcgbWljcm9mcm9udGVuZCBpbnRvIHRoZSBpZnJhbWUsIGFsbG93aW5nIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1pY3JvZnJvbnRlbmQgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucy5cbiAgICBpZiAocHJldkNhcGFiaWxpdHlcbiAgICAgICYmIHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUgPT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZVxuICAgICAgJiYgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQ2FwYWJpbGl0eVBhcmFtKGNhcGFiaWxpdHkubWV0YWRhdGEhLmlkKTtcbiAgICB9XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgbWljcm9mcm9udGVuZC5cbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IHRoaXMuX21hbmlmZXN0U2VydmljZS5nZXRBcHBsaWNhdGlvbihjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUpO1xuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgTG9hZGluZyBtaWNyb2Zyb250ZW5kIGludG8gd29ya2JlbmNoIHZpZXcgW3ZpZXdJZD0ke3RoaXMudmlldy5pZH0sIGFwcD0ke2NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZX0sIGJhc2VVcmw9JHthcHBsaWNhdGlvbi5iYXNlVXJsfSwgcGF0aD0keyhjYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aCl9XS5gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcsIHBhcmFtcywgY2FwYWJpbGl0eSk7XG4gICAgYXdhaXQgdGhpcy5fb3V0bGV0Um91dGVyLm5hdmlnYXRlKGNhcGFiaWxpdHkucHJvcGVydGllcy5wYXRoLCB7XG4gICAgICBvdXRsZXQ6IHRoaXMudmlldy5pZCxcbiAgICAgIHJlbGF0aXZlVG86IGFwcGxpY2F0aW9uLmJhc2VVcmwsXG4gICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIHB1c2hTdGF0ZVRvU2Vzc2lvbkhpc3RvcnlTdGFjazogZmFsc2UsXG4gICAgICBzaG93U3BsYXNoOiBjYXBhYmlsaXR5LnByb3BlcnRpZXMuc2hvd1NwbGFzaCxcbiAgICAgIMm1Y2FwYWJpbGl0eUlkOiBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCxcbiAgICB9KTtcblxuICAgIC8vIEluYWN0aXZlIHZpZXdzIGFyZSBub3QgY2hlY2tlZCBmb3IgY2hhbmdlcyBzaW5jZSBkZXRhY2hlZCBmcm9tIHRoZSBBbmd1bGFyIGNvbXBvbmVudCB0cmVlLlxuICAgIC8vIFNvLCB3ZSBtYW51YWxseSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gdG8gdXBkYXRlIGF0dHJpYnV0ZXMgb24gdGhlIGBzY2ktcm91dGVyLW91dGxldGAuXG4gICAgaWYgKCF0aGlzLnZpZXcuYWN0aXZlKCkpIHtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoQ2FwYWJpbGl0eSQoY2FwYWJpbGl0eUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdE9iamVjdENhY2hlLm9ic2VydmVDYXBhYmlsaXR5JChjYXBhYmlsaXR5SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKCk6IHZvaWQge1xuICAgIC8vIFNpbmNlIHRoZSBpZnJhbWUgaXMgYWRkZWQgYXQgYSB0b3AtbGV2ZWwgbG9jYXRpb24gaW4gdGhlIERPTSwgdGhhdCBpcywgbm90IGFzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzIGNvbXBvbmVudCxcbiAgICAvLyB0aGUgd29ya2JlbmNoIHZpZXcgbWlzc2VzIGtleWJvYXJkIGV2ZW50cyBmcm9tIGVtYmVkZGVkIGNvbnRlbnQuIEFzIGEgcmVzdWx0LCBtZW51IGl0ZW0gYWNjZWxlcmF0b3JzIG9mIHRoZSBjb250ZXh0XG4gICAgLy8gbWVudSBvZiB0aGlzIHZpZXcgZG8gbm90IHdvcmssIHNvIHdlIGluc3RhbGwgdGhlIGFjY2VsZXJhdG9ycyBvbiB0aGUgcm91dGVyIG91dGxldCBhcyB3ZWxsLlxuICAgIHRoaXMuX3ZpZXdDb250ZXh0TWVudVNlcnZpY2UuaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCh0aGlzLl9yb3V0ZXJPdXRsZXRFbGVtZW50KCkubmF0aXZlRWxlbWVudCwgdGhpcy52aWV3KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gcmVxdWVzdHMgZnJvbSB0aGUgY3VycmVudGx5IGxvYWRlZCBtaWNyb2Zyb250ZW5kIHRvIHVwZGF0ZSBpdHMgcGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFBhcmFtc1VwZGF0ZXIodmlld0NhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5KTogdm9pZCB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmVQYXJhbXNVcGRhdGVyJC5uZXh0KCk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fbWVzc2FnZUNsaWVudC5vYnNlcnZlJDzJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kPijJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNVcGRhdGVUb3BpYyh0aGlzLnZpZXcuaWQsIHZpZXdDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVQYXJhbXNVcGRhdGVyJCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJlcXVlc3Q6IFRvcGljTWVzc2FnZTzJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kPikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJ4anMvbm8tYXN5bmMtc3Vic2NyaWJlXG4gICAgICAgIC8vIFdlIERPIE5PVCBuYXZpZ2F0ZSBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhcyBjbG9zZWQsIGUuZy4sIGJlY2F1c2UgY2xvc2VkIHRoZSB2aWV3IG9yIG5hdmlnYXRlZCB0byBhbm90aGVyIGNhcGFiaWxpdHkuXG4gICAgICAgIGNvbnN0IHJlcGx5VG8gPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KE1lc3NhZ2VIZWFkZXJzLlJlcGx5VG8pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHRoaXMuX3dvcmtiZW5jaFJvdXRlci5uYXZpZ2F0ZShsYXlvdXQgPT4ge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHBlbmRpbmcgbmF2aWdhdGlvbiBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhcyBjbG9zZWQsIGUuZy4sIGJlY2F1c2UgY2xvc2VkIHRoZSB2aWV3IG9yIG5hdmlnYXRlZCB0byBhbm90aGVyIGNhcGFiaWxpdHlcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXNIYW5kbGluZyA9IHJlcXVlc3QuYm9keSEucGFyYW1zSGFuZGxpbmc7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy5fcm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgICAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gRGljdGlvbmFyaWVzLmNvZXJjZShyZXF1ZXN0LmJvZHkhLnBhcmFtcyk7IC8vIGNvZXJjZSBwYXJhbXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZFBhcmFtcyA9IE9iamVjdHMud2l0aG91dFVuZGVmaW5lZEVudHJpZXMocGFyYW1zSGFuZGxpbmcgPT09ICdtZXJnZScgPyB7Li4uY3VycmVudFBhcmFtcywgLi4ubmV3UGFyYW1zfSA6IG5ld1BhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCB7dXJsUGFyYW1zLCB0cmFuc2llbnRQYXJhbXN9ID0gTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuc3BsaXRQYXJhbXMobWVyZ2VkUGFyYW1zLCB2aWV3Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYXlvdXQubmF2aWdhdGVWaWV3KHRoaXMudmlldy5pZCwgW3VybFBhcmFtc10sIHtcbiAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fcm91dGUsXG4gICAgICAgICAgICAgIHN0YXRlOiBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHtcbiAgICAgICAgICAgICAgICBbTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuU1RBVEVfVFJBTlNJRU5UX1BBUkFNU106IHRyYW5zaWVudFBhcmFtcyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChyZXBseVRvLCBzdWNjZXNzLCB7aGVhZGVyczogbmV3IE1hcCgpLnNldChNZXNzYWdlSGVhZGVycy5TdGF0dXMsIFJlc3BvbnNlU3RhdHVzQ29kZXMuVEVSTUlOQUwpfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKHJlcGx5VG8sIHN0cmluZ2lmeUVycm9yKGVycm9yKSwge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLkVSUk9SKX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgdmlldywgc3VjaCBhcyB0aGUgdmlldyB0aXRsZSwgYXMgZGVmaW5lZCBieSB0aGUgY2FwYWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgc2V0Vmlld1Byb3BlcnRpZXModmlld0NhcGFiaWxpdHk6IFdvcmtiZW5jaFZpZXdDYXBhYmlsaXR5LCBwYXJhbXM6IFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMudmlldy50aXRsZSA9IE1pY3JvZnJvbnRlbmRzLnN1YnN0aXR1dGVOYW1lZFBhcmFtZXRlcnModmlld0NhcGFiaWxpdHkucHJvcGVydGllcy50aXRsZSwgTWFwcy5jb2VyY2UocGFyYW1zKSkgPz8gbnVsbDtcbiAgICB0aGlzLnZpZXcuaGVhZGluZyA9IE1pY3JvZnJvbnRlbmRzLnN1YnN0aXR1dGVOYW1lZFBhcmFtZXRlcnModmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5oZWFkaW5nLCBNYXBzLmNvZXJjZShwYXJhbXMpKSA/PyBudWxsO1xuICAgIHRoaXMudmlldy5jbGFzc0xpc3QuYXBwbGljYXRpb24gPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNzc0NsYXNzO1xuICAgIHRoaXMudmlldy5jbG9zYWJsZSA9IHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuY2xvc2FibGUgPz8gdHJ1ZTtcbiAgICB0aGlzLnZpZXcuZGlydHkgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbFZpZXdBY3RpdmVQdWJsaXNoZXIoKTogdm9pZCB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMudmlldy5hY3RpdmUoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRUb3BpYyA9IMm1V29ya2JlbmNoQ29tbWFuZHMudmlld0FjdGl2ZVRvcGljKHRoaXMudmlldy5pZCk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChjb21tYW5kVG9waWMsIGFjdGl2ZSwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsUGFydElkUHVibGlzaGVyKCk6IHZvaWQge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0ID0gdGhpcy52aWV3LnBhcnQoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRUb3BpYyA9IMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcnRJZFRvcGljKHRoaXMudmlldy5pZCk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChjb21tYW5kVG9waWMsIHBhcnQuaWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSBwYXJhbXMgY29udGFpbiB0aGUgZ2l2ZW4gY2FwYWJpbGl0eSBpZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckNhcGFiaWxpdHlQYXJhbSh2aWV3Q2FwYWJpbGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWV3UGFyYW1zJCA9IHRoaXMuX21lc3NhZ2VDbGllbnQub2JzZXJ2ZSQ8TWFwPHN0cmluZywgc3RyaW5nPj4oybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXBUb0JvZHkoKSxcbiAgICAgICAgZmlyc3QocGFyYW1zID0+IHBhcmFtcy5nZXQoybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSUQpID09PSB2aWV3Q2FwYWJpbGl0eUlkKSxcbiAgICAgICk7XG4gICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odmlld1BhcmFtcyQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsQ2FuQ2xvc2VHdWFyZChjYW5DbG9zZVRvcGljOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgY2FuQ2xvc2VSZWY6IENhbkNsb3NlUmVmIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQuc3Vic2NyaWJlckNvdW50JChjYW5DbG9zZVRvcGljKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChjb3VudCA9PiBjb3VudCA+IDApLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoY29uZmlybUNsb3NpbmcgPT4ge1xuICAgICAgICBpZiAoY29uZmlybUNsb3NpbmcpIHtcbiAgICAgICAgICBjYW5DbG9zZVJlZiA9IHRoaXMudmlldy5jYW5DbG9zZSgoKSA9PiB0aGlzLl9tZXNzYWdlQ2xpZW50LnJlcXVlc3QkPGJvb2xlYW4+KGNhbkNsb3NlVG9waWMpLnBpcGUobWFwVG9Cb2R5KCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjYW5DbG9zZVJlZj8uZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkZvY3VzV2l0aGluKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHtkZXRhaWw6IGZvY3VzV2l0aGlufSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PGJvb2xlYW4+O1xuICAgIGlmIChmb2N1c1dpdGhpbikge1xuICAgICAgdGhpcy5faG9zdC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdzY2ktbWljcm9mcm9udGVuZC1mb2N1c2luJywge2J1YmJsZXM6IHRydWV9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwb24gc3Vic2NyaXB0aW9uLCBlbWl0cyB0aGUga2V5c3Ryb2tlcyByZWdpc3RlcmVkIHdpdGggbWVudSBpdGVtcyBvZiB0aGlzIHZpZXcncyBjb250ZXh0IG1lbnUsXG4gICAqIGFuZCB0aGVuIGNvbnRpbnVvdXNseSB3aGVuIHRoZXkgY2hhbmdlLiBUaGUgb2JzZXJ2YWJsZSBuZXZlciBjb21wbGV0ZXMuXG4gICAqL1xuICBwcml2YXRlIHZpZXdDb250ZXh0TWVudUtleXN0cm9rZXMkKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy52aWV3Lm1lbnVJdGVtcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXJBcnJheShtZW51SXRlbSA9PiAhIW1lbnVJdGVtLmFjY2VsZXJhdG9yKSxcbiAgICAgICAgbWFwQXJyYXkobWVudUl0ZW0gPT4gbWVudUl0ZW0uYWNjZWxlcmF0b3IhLm1hcChhY2NlbGVyYXRvciA9PiB7XG4gICAgICAgICAgLy8gTm9ybWFsaXplIGtleXN0cm9rZXMgYWNjb3JkaW5nIHRvIGBTY2lSb3V0ZXJPdXRsZXRFbGVtZW50I2tleXN0cm9rZXNgXG4gICAgICAgICAgc3dpdGNoIChhY2NlbGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSAnY3RybCc6XG4gICAgICAgICAgICAgIHJldHVybiAnY29udHJvbCc7XG4gICAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgICAgcmV0dXJuICdkb3QnO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgIHJldHVybiAnc3BhY2UnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY2VsZXJhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpLFxuICAgICAgICBtYXBBcnJheShhY2NlbGVyYXRvciA9PiBbJ2tleWRvd24nXS5jb25jYXQoYWNjZWxlcmF0b3IpLmpvaW4oJy4nKSksXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHtAbGluayBpc1dvcmtiZW5jaERyYWd9IHByb3BlcnR5IHdoZW4gYSB3b3JrYmVuY2ggZHJhZyBvcGVyYXRpb24gaXMgZGV0ZWN0ZWQsXG4gICAqIHN1Y2ggYXMgd2hlbiBkcmFnZ2luZyBhIHZpZXcgb3IgbW92aW5nIGEgc2FzaC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFdvcmtiZW5jaERyYWdEZXRlY3RvcigpOiB2b2lkIHtcbiAgICB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmRyYWdnaW5nJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtiZW5jaERyYWcgPSAoZXZlbnQgPT09ICdzdGFydCcpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb3BhZ2F0ZVdvcmtiZW5jaFRoZW1lKCk6IHZvaWQge1xuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLl9pbmplY3RvciwgKCkgPT4gTWljcm9mcm9udGVuZHMucHJvcGFnYXRlVGhlbWUodGhpcy5fcm91dGVyT3V0bGV0RWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIERlbGV0ZSByZXRhaW5lZCBtZXNzYWdlcyB0byBmcmVlIHJlc291cmNlcy5cbiAgICB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3QWN0aXZlVG9waWModGhpcy52aWV3LmlkKSwgdW5kZWZpbmVkLCB7cmV0YWluOiB0cnVlfSkudGhlbigpO1xuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNUb3BpYyh0aGlzLnZpZXcuaWQpLCB1bmRlZmluZWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcnRJZFRvcGljKHRoaXMudmlldy5pZCksIHVuZGVmaW5lZCwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICB0aGlzLl9vdXRsZXRSb3V0ZXIubmF2aWdhdGUobnVsbCwge291dGxldDogdGhpcy52aWV3LmlkfSkudGhlbigpO1xuICAgIHRoaXMudmlldy51bnJlZ2lzdGVyQWRhcHRlcihNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIEJsb2NrcyB0aGUgbWljcm9mcm9udGVuZCBvdXRsZXQgd2hlbiBkaWFsb2cocykgb3ZlcmxheSB0aGlzIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZU1pY3JvZnJvbnRlbmRHbGFzc1BhbmUoKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogR0xBU1NfUEFORV9CTE9DS0FCTEUsXG4gICAgICB1c2VFeGlzdGluZzogybVXb3JrYmVuY2hWaWV3LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogR0xBU1NfUEFORV9PUFRJT05TLFxuICAgICAgdXNlRmFjdG9yeTogKCk6IEdsYXNzUGFuZU9wdGlvbnMgPT4gKHthdHRyaWJ1dGVzOiB7J2RhdGEtdmlld2lkJzogaW5qZWN0KFdvcmtiZW5jaFZpZXcpLmlkfX0pLFxuICAgIH0sXG4gIF07XG59XG4iLCI8d2ItY29udGVudC1hcy1vdmVybGF5IFtjb25maWddPVwib3ZlcmxheUNvbmZpZ1wiPlxuICA8ZGl2IGNsYXNzPVwibWljcm9mcm9udGVuZC12aWV3XCJcbiAgICAgICBbY2xhc3Mud29ya2JlbmNoLWRyYWddPVwiaXNXb3JrYmVuY2hEcmFnXCJcbiAgICAgICBbYXR0ci5kYXRhLXZpZXdpZF09XCJ2aWV3LmlkXCJcbiAgICAgICB3YkdsYXNzUGFuZT5cbiAgICA8c2NpLXJvdXRlci1vdXRsZXQgI3JvdXRlcl9vdXRsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwidmlldy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2FwYWJpbGl0eWlkXT1cImNhcGFiaWxpdHk/Lm1ldGFkYXRhIS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXBwXT1cImNhcGFiaWxpdHk/Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ2aWV3LmNsYXNzTGlzdC5hc0xpc3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChmb2N1c3dpdGhpbik9XCJvbkZvY3VzV2l0aGluKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICBba2V5c3Ryb2tlc109XCJrZXlzdHJva2VzVG9CdWJibGUkIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwic3BsYXNoXCIvPlxuICAgIDwvc2NpLXJvdXRlci1vdXRsZXQ+XG4gIDwvZGl2PlxuPC93Yi1jb250ZW50LWFzLW92ZXJsYXk+XG4iXX0=
@@ -1,23 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2024 Swiss Federal Railways
3
- *
4
- * This program and the accompanying materials are made
5
- * available under the terms of the Eclipse Public License 2.0
6
- * which is available at https://www.eclipse.org/legal/epl-2.0/
7
- *
8
- * SPDX-License-Identifier: EPL-2.0
9
- */
10
- /**
11
- * Represents a view that displays a microfrontend.
12
- *
13
- * This type is registered as adapter in {@link ɵWorkbenchView}, allowing adaptation of views displaying a microfrontend.
14
- *
15
- * @see ɵWorkbenchView.adapt
16
- */
17
- export class MicrofrontendWorkbenchView {
18
- constructor(capability, params) {
19
- this.capability = capability;
20
- this.params = params;
21
- }
22
- }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC13b3JrYmVuY2gtdmlldy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtd29ya2JlbmNoLXZpZXcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFLSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLFlBQTRCLFVBQW1DLEVBQWtCLE1BQWM7UUFBbkUsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFBa0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUMvRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjQgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7V29ya2JlbmNoVmlld0NhcGFiaWxpdHl9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB2aWV3IHRoYXQgZGlzcGxheXMgYSBtaWNyb2Zyb250ZW5kLlxuICpcbiAqIFRoaXMgdHlwZSBpcyByZWdpc3RlcmVkIGFzIGFkYXB0ZXIgaW4ge0BsaW5rIMm1V29ya2JlbmNoVmlld30sIGFsbG93aW5nIGFkYXB0YXRpb24gb2Ygdmlld3MgZGlzcGxheWluZyBhIG1pY3JvZnJvbnRlbmQuXG4gKlxuICogQHNlZSDJtVdvcmtiZW5jaFZpZXcuYWRhcHRcbiAqL1xuZXhwb3J0IGNsYXNzIE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3IHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHksIHB1YmxpYyByZWFkb25seSBwYXJhbXM6IFBhcmFtcykge1xuICB9XG59XG4iXX0=
@@ -1,13 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2023 Swiss Federal Railways
3
- *
4
- * This program and the accompanying materials are made
5
- * available under the terms of the Eclipse Public License 2.0
6
- * which is available at https://www.eclipse.org/legal/epl-2.0/
7
- *
8
- * SPDX-License-Identifier: EPL-2.0
9
- */
10
- export { MicrofrontendPlatformConfigLoader } from './microfrontend-platform-config-loader';
11
- export { WorkbenchPerspectiveData } from './microfrontend-perspective/workbench-perspective-data';
12
- export * from './microfrontend-platform.config';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ2hHLGNBQWMsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmV4cG9ydCB7TWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0tY29uZmlnLWxvYWRlcic7XG5leHBvcnQge1dvcmtiZW5jaFBlcnNwZWN0aXZlRGF0YX0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBlcnNwZWN0aXZlL3dvcmtiZW5jaC1wZXJzcGVjdGl2ZS1kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vbWljcm9mcm9udGVuZC1wbGF0Zm9ybS5jb25maWcnO1xuIl19
@@ -1,31 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { WorkbenchCapabilities } from '@scion/workbench-client';
3
- import { Objects } from '../../common/objects.util';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Asserts view capabilities to have required properties.
7
- */
8
- export class MicrofrontendViewCapabilityValidator {
9
- async intercept(capability) {
10
- if (capability.type !== WorkbenchCapabilities.View) {
11
- return capability;
12
- }
13
- const viewCapability = capability;
14
- // Assert the view capability to have a qualifier set.
15
- if (!Object.keys(viewCapability.qualifier ?? {}).length) {
16
- throw Error(`[NullQualifierError] View capability requires a qualifier [capability=${JSON.stringify(viewCapability)}]`);
17
- }
18
- // Assert the view capability to have a path set.
19
- const path = viewCapability.properties?.path;
20
- if (path === undefined || path === null) {
21
- throw Error(`[NullPathError] View capability requires a path to the microfrontend in its properties [application="${viewCapability.metadata.appSymbolicName}", capability="${Objects.toMatrixNotation(viewCapability.qualifier)}"]`);
22
- }
23
- return capability;
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
26
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator }); }
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: MicrofrontendViewCapabilityValidator, decorators: [{
29
- type: Injectable
30
- }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbWljcm9mcm9udGVuZC1wbGF0Zm9ybS9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRWxEOztHQUVHO0FBRUgsTUFBTSxPQUFPLG9DQUFvQztJQUV4QyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQXNCO1FBQzNDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsVUFBcUMsQ0FBQztRQUM3RCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxNQUFNLEtBQUssQ0FBQyx5RUFBeUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUgsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxDQUFDLHdHQUF3RyxjQUFjLENBQUMsUUFBUyxDQUFDLGVBQWUsa0JBQWtCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hPLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzhHQXBCVSxvQ0FBb0M7a0hBQXBDLG9DQUFvQzs7MkZBQXBDLG9DQUFvQztrQkFEaEQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDYXBhYmlsaXR5LCBDYXBhYmlsaXR5SW50ZXJjZXB0b3J9IGZyb20gJ0BzY2lvbi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dvcmtiZW5jaENhcGFiaWxpdGllcywgV29ya2JlbmNoVmlld0NhcGFiaWxpdHl9IGZyb20gJ0BzY2lvbi93b3JrYmVuY2gtY2xpZW50JztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vY29tbW9uL29iamVjdHMudXRpbCc7XG5cbi8qKlxuICogQXNzZXJ0cyB2aWV3IGNhcGFiaWxpdGllcyB0byBoYXZlIHJlcXVpcmVkIHByb3BlcnRpZXMuXG4gKi9cbkBJbmplY3RhYmxlKC8qIERPIE5PVCBQUk9WSURFIHZpYSAncHJvdmlkZWRJbicgbWV0YWRhdGEgYXMgb25seSByZWdpc3RlcmVkIGlmIG1pY3JvZnJvbnRlbmQgc3VwcG9ydCBpcyBlbmFibGVkLiAqLylcbmV4cG9ydCBjbGFzcyBNaWNyb2Zyb250ZW5kVmlld0NhcGFiaWxpdHlWYWxpZGF0b3IgaW1wbGVtZW50cyBDYXBhYmlsaXR5SW50ZXJjZXB0b3Ige1xuXG4gIHB1YmxpYyBhc3luYyBpbnRlcmNlcHQoY2FwYWJpbGl0eTogQ2FwYWJpbGl0eSk6IFByb21pc2U8Q2FwYWJpbGl0eT4ge1xuICAgIGlmIChjYXBhYmlsaXR5LnR5cGUgIT09IFdvcmtiZW5jaENhcGFiaWxpdGllcy5WaWV3KSB7XG4gICAgICByZXR1cm4gY2FwYWJpbGl0eTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3Q2FwYWJpbGl0eSA9IGNhcGFiaWxpdHkgYXMgV29ya2JlbmNoVmlld0NhcGFiaWxpdHk7XG4gICAgLy8gQXNzZXJ0IHRoZSB2aWV3IGNhcGFiaWxpdHkgdG8gaGF2ZSBhIHF1YWxpZmllciBzZXQuXG4gICAgaWYgKCFPYmplY3Qua2V5cyh2aWV3Q2FwYWJpbGl0eS5xdWFsaWZpZXIgPz8ge30pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUXVhbGlmaWVyRXJyb3JdIFZpZXcgY2FwYWJpbGl0eSByZXF1aXJlcyBhIHF1YWxpZmllciBbY2FwYWJpbGl0eT0ke0pTT04uc3RyaW5naWZ5KHZpZXdDYXBhYmlsaXR5KX1dYCk7XG4gICAgfVxuXG4gICAgLy8gQXNzZXJ0IHRoZSB2aWV3IGNhcGFiaWxpdHkgdG8gaGF2ZSBhIHBhdGggc2V0LlxuICAgIGNvbnN0IHBhdGggPSB2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzPy5wYXRoO1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQgfHwgcGF0aCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUGF0aEVycm9yXSBWaWV3IGNhcGFiaWxpdHkgcmVxdWlyZXMgYSBwYXRoIHRvIHRoZSBtaWNyb2Zyb250ZW5kIGluIGl0cyBwcm9wZXJ0aWVzIFthcHBsaWNhdGlvbj1cIiR7dmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZX1cIiwgY2FwYWJpbGl0eT1cIiR7T2JqZWN0cy50b01hdHJpeE5vdGF0aW9uKHZpZXdDYXBhYmlsaXR5LnF1YWxpZmllcil9XCJdYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gIH1cbn1cbiJdfQ==