@scion/workbench 17.0.0-beta.6 → 17.0.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/esm2022/lib/activation-instant.provider.mjs +3 -3
- package/esm2022/lib/common/asserts.util.mjs +2 -2
- package/esm2022/lib/common/class-list.mjs +61 -0
- package/esm2022/lib/common/coerce-observable.pipe.mjs +3 -3
- package/esm2022/lib/common/filter-by-predicate.pipe.mjs +3 -3
- package/esm2022/lib/common/filter-by-text.pipe.mjs +3 -3
- package/esm2022/lib/common/grid-element-if-visible.pipe.mjs +6 -6
- package/esm2022/lib/common/instanceof.pipe.mjs +3 -3
- package/esm2022/lib/common/map-coerce.pipe.mjs +3 -3
- package/esm2022/lib/common/null-if-empty.pipe.mjs +3 -3
- package/esm2022/lib/common/objects.util.mjs +34 -0
- package/esm2022/lib/common/typeof.pipe.mjs +3 -3
- package/esm2022/lib/common/uuid.util.mjs +17 -0
- package/esm2022/lib/content-projection/content-as-overlay.component.mjs +3 -3
- package/esm2022/lib/content-projection/content-projection.directive.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/dialog-action-filter.pipe.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/dialog-footer.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-action.directive.mjs +3 -3
- package/esm2022/lib/dialog/dialog-footer/workbench-dialog-footer.directive.mjs +3 -3
- package/esm2022/lib/dialog/dialog-header/dialog-header.component.mjs +3 -3
- package/esm2022/lib/dialog/dialog-header/workbench-dialog-header.directive.mjs +3 -3
- package/esm2022/lib/dialog/movable.directive.mjs +3 -3
- package/esm2022/lib/dialog/resizable.directive.mjs +3 -3
- package/esm2022/lib/dialog/workbench-dialog.component.mjs +3 -3
- package/esm2022/lib/dialog/workbench-dialog.mjs +1 -1
- package/esm2022/lib/dialog/workbench-dialog.options.mjs +1 -1
- package/esm2022/lib/dialog/workbench-dialog.registry.mjs +4 -4
- package/esm2022/lib/dialog/workbench-dialog.service.mjs +5 -5
- package/esm2022/lib/dialog//311/265workbench-dialog.mjs +8 -26
- package/esm2022/lib/dialog//311/265workbench-dialog.service.mjs +3 -3
- package/esm2022/lib/filter-field/filter-field.component.mjs +6 -6
- package/esm2022/lib/glass-pane/glass-pane.directive.mjs +3 -3
- package/esm2022/lib/layout/grid-element/grid-element.component.mjs +10 -10
- package/esm2022/lib/layout/main-area-layout/main-area-layout.component.mjs +7 -4
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v1.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v2.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v3.model.mjs +11 -0
- package/esm2022/lib/layout/migration/model/workbench-layout-migration-v4.model.mjs +11 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v2.service.mjs +59 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v3.service.mjs +117 -0
- package/esm2022/lib/layout/migration/workbench-layout-migration-v4.service.mjs +57 -0
- package/esm2022/lib/layout/workbench-layout.component.mjs +7 -4
- package/esm2022/lib/layout/workbench-layout.factory.mjs +4 -4
- package/esm2022/lib/layout/workbench-layout.mjs +1 -1
- package/esm2022/lib/layout/workbench-layout.model.mjs +5 -6
- package/esm2022/lib/layout/workbench-layout.service.mjs +3 -3
- package/esm2022/lib/layout/workbench-layouts.util.mjs +53 -16
- package/esm2022/lib/layout/workench-layout-serializer.service.mjs +53 -21
- package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +8 -5
- package/esm2022/lib/layout//311/265workbench-layout.mjs +382 -195
- package/esm2022/lib/logging/console-appender.service.mjs +3 -3
- package/esm2022/lib/logging/logger-names.mjs +8 -9
- package/esm2022/lib/logging/logger.mjs +3 -3
- package/esm2022/lib/logging/logging-support.mjs +4 -4
- package/esm2022/lib/logging/logging.model.mjs +3 -3
- package/esm2022/lib/logging//311/265logger.mjs +3 -3
- package/esm2022/lib/message-box/message-box-footer/message-box-footer.component.mjs +18 -20
- package/esm2022/lib/message-box/message-box-header/message-box-header.component.mjs +3 -3
- package/esm2022/lib/message-box/workbench-message-box.component.mjs +3 -3
- package/esm2022/lib/message-box/workbench-message-box.options.mjs +1 -1
- package/esm2022/lib/message-box/workbench-message-box.service.mjs +5 -5
- package/esm2022/lib/message-box//311/265workbench-message-box.service.mjs +5 -5
- package/esm2022/lib/microfrontend-platform/common/microfrontend.util.mjs +55 -0
- package/esm2022/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.mjs +34 -22
- package/esm2022/lib/microfrontend-platform/initialization/ng-zone-observable-decorator.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/initialization/workbench-host-manifest-interceptor.service.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.mjs +53 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.mjs +85 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.mjs +140 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.mjs +122 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.mjs +11 -10
- package/esm2022/lib/microfrontend-platform/microfrontend-message-box/microfrontend-message-box-intent-handler.service.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-notification/microfrontend-notification-intent-handler.service.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-platform-config-loader.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-validator.interceptor.mjs +30 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-handler.interceptor.mjs +130 -0
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.mjs +18 -30
- package/esm2022/lib/microfrontend-platform/microfrontend-splash/microfrontend-splash.component.mjs +3 -3
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.mjs +9 -31
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs +88 -144
- package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-workbench-view.model.mjs +23 -0
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.mjs +41 -0
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-validator.interceptor.mjs +30 -0
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-handler.interceptor.mjs +125 -0
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-routes.mjs +103 -0
- package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +45 -47
- package/esm2022/lib/migration/workbench-migration.mjs +11 -0
- package/esm2022/lib/migration/workbench-migrator.mjs +38 -0
- package/esm2022/lib/notification/notification-css-classes.pipe.mjs +3 -3
- package/esm2022/lib/notification/notification-list.component.mjs +3 -3
- package/esm2022/lib/notification/notification.component.mjs +3 -3
- package/esm2022/lib/notification/notification.config.mjs +1 -1
- package/esm2022/lib/notification/notification.mjs +1 -1
- package/esm2022/lib/notification/notification.service.mjs +9 -9
- package/esm2022/lib/notification/text-notification.component.mjs +3 -3
- package/esm2022/lib/page-not-found/format-url.pipe.mjs +26 -0
- package/esm2022/lib/page-not-found/page-not-found.component.mjs +28 -0
- package/esm2022/lib/part/part-action-bar/part-action-bar.component.mjs +3 -3
- package/esm2022/lib/part/part-action-bar/part-action-filter.pipe.mjs +3 -3
- package/esm2022/lib/part/part-action-bar/part-action.directive.mjs +4 -4
- package/esm2022/lib/part/part-bar/part-bar.component.mjs +11 -8
- package/esm2022/lib/part/part-portal.pipe.mjs +3 -3
- package/esm2022/lib/part/part.component.mjs +7 -4
- package/esm2022/lib/part/view-context-menu/accelerator-format.pipe.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/text.component.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/view-menu.component.mjs +3 -3
- package/esm2022/lib/part/view-context-menu/view-menu.directive.mjs +4 -4
- package/esm2022/lib/part/view-context-menu/view-menu.service.mjs +19 -19
- package/esm2022/lib/part/view-list/view-list.component.mjs +3 -3
- package/esm2022/lib/part/view-list-button/view-list-button.component.mjs +3 -3
- package/esm2022/lib/part/view-list-item/view-list-item.component.mjs +9 -9
- package/esm2022/lib/part/view-tab/view-tab.component.mjs +16 -13
- package/esm2022/lib/part/view-tab-content/view-tab-content.component.mjs +5 -5
- package/esm2022/lib/part/view-tab-drag-image/view-tab-drag-image.component.mjs +9 -9
- package/esm2022/lib/part/workbench-part-action.registry.mjs +3 -3
- package/esm2022/lib/part/workbench-part.model.mjs +1 -1
- package/esm2022/lib/part/workbench-part.registry.mjs +3 -3
- package/esm2022/lib/part//311/265workbench-part.model.mjs +3 -3
- package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v1.model.mjs +11 -0
- package/esm2022/lib/perspective/migration/model/workbench-perspective-migration-v2.model.mjs +11 -0
- package/esm2022/lib/perspective/migration/workbench-perspective-migration-v2.service.mjs +57 -0
- package/esm2022/lib/perspective/workbench-grid-merger.service.mjs +19 -51
- package/esm2022/lib/perspective/workbench-perspective-storage.service.mjs +23 -18
- package/esm2022/lib/perspective/workbench-perspective-view-conflict-resolver.service.mjs +27 -42
- package/esm2022/lib/perspective/workbench-perspective.model.mjs +1 -1
- package/esm2022/lib/perspective/workbench-perspective.registry.mjs +3 -3
- package/esm2022/lib/perspective/workbench-perspective.service.mjs +15 -10
- package/esm2022/lib/perspective/workench-perspective-serializer.service.mjs +62 -0
- package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +98 -78
- package/esm2022/lib/popup/popup.component.mjs +3 -3
- package/esm2022/lib/popup/popup.config.mjs +1 -1
- package/esm2022/lib/popup/popup.service.mjs +3 -3
- package/esm2022/lib/portal/workbench-portal-outlet.directive.mjs +6 -6
- package/esm2022/lib/public_api.mjs +3 -2
- package/esm2022/lib/registry/workbench-object-registry.mjs +3 -3
- package/esm2022/lib/routing/empty-outlet/empty-outlet.component.mjs +31 -0
- package/esm2022/lib/routing/public_api.mjs +1 -1
- package/esm2022/lib/routing/router.util.mjs +96 -71
- package/esm2022/lib/routing/routing.model.mjs +11 -0
- package/esm2022/lib/routing/url-segment-matcher.mjs +46 -0
- package/esm2022/lib/routing/workbench-auxiliary-routes-registrator.service.mjs +58 -50
- package/esm2022/lib/routing/workbench-dialog-differ.mjs +51 -0
- package/esm2022/lib/routing/workbench-layout-differ.mjs +14 -17
- package/esm2022/lib/routing/workbench-navigational-states.mjs +11 -25
- package/esm2022/lib/routing/workbench-popup-differ.mjs +6 -6
- package/esm2022/lib/routing/workbench-route-data.mjs +15 -14
- package/esm2022/lib/routing/workbench-router-link.directive.mjs +24 -33
- package/esm2022/lib/routing/workbench-router.service.mjs +13 -378
- package/esm2022/lib/routing/workbench-url-observer.service.mjs +65 -36
- package/esm2022/lib/routing//311/265location.mjs +3 -3
- package/esm2022/lib/routing//311/265workbench-router.service.mjs +317 -0
- package/esm2022/lib/startup/splash/splash.component.mjs +3 -3
- package/esm2022/lib/startup/workbench-launcher.service.mjs +11 -11
- package/esm2022/lib/storage/workbench-storage.mjs +3 -3
- package/esm2022/lib/testing/public_api.mjs +2 -1
- package/esm2022/lib/testing/workbench-testing.module.mjs +13 -39
- package/esm2022/lib/testing/workbench.provider.mjs +60 -0
- package/esm2022/lib/theme/workbench-theme-switcher.service.mjs +3 -3
- package/esm2022/lib/view/public_api.mjs +2 -1
- package/esm2022/lib/view/view-move-handler.service.mjs +42 -62
- package/esm2022/lib/view/view-portal.pipe.mjs +4 -4
- package/esm2022/lib/view/view.component.mjs +8 -38
- package/esm2022/lib/view/workbench-view-route-guards.mjs +47 -0
- package/esm2022/lib/view/workbench-view.model.mjs +6 -4
- package/esm2022/lib/view/workbench-view.registry.mjs +4 -4
- package/esm2022/lib/view//311/265workbench-view.model.mjs +135 -28
- package/esm2022/lib/view-dnd/grid-drop-targets.util.mjs +33 -32
- package/esm2022/lib/view-dnd/requires-drop-zone.pipe.mjs +7 -7
- package/esm2022/lib/view-dnd/view-drag.service.mjs +6 -6
- package/esm2022/lib/view-dnd/view-drop-placeholder-renderer.service.mjs +3 -3
- package/esm2022/lib/view-dnd/view-drop-zone.directive.mjs +4 -4
- package/esm2022/lib/view-dnd/view-tab-drag-image-renderer.service.mjs +11 -9
- package/esm2022/lib/workbench-config.mjs +15 -0
- package/esm2022/lib/workbench-id.mjs +3 -3
- package/esm2022/lib/workbench.component.mjs +14 -10
- package/esm2022/lib/workbench.constants.mjs +8 -10
- package/esm2022/lib/workbench.model.mjs +1 -1
- package/esm2022/lib/workbench.module.mjs +15 -86
- package/esm2022/lib/workbench.provider.mjs +117 -0
- package/esm2022/lib/workbench.service.mjs +5 -5
- package/esm2022/lib//311/265workbench.service.mjs +15 -21
- package/fesm2022/scion-workbench.mjs +5527 -4289
- package/fesm2022/scion-workbench.mjs.map +1 -1
- package/lib/common/class-list.d.ts +51 -0
- package/lib/common/objects.util.d.ts +17 -0
- package/lib/common/uuid.util.d.ts +8 -0
- package/lib/dialog/workbench-dialog.d.ts +3 -7
- package/lib/dialog/workbench-dialog.options.d.ts +5 -4
- package/lib/dialog/workbench-dialog.registry.d.ts +4 -3
- package/lib/dialog/workbench-dialog.service.d.ts +1 -1
- package/lib/dialog//311/265workbench-dialog.d.ts +4 -6
- package/lib/filter-field/filter-field.component.d.ts +1 -1
- package/lib/layout/grid-element/grid-element.component.d.ts +2 -2
- package/lib/layout/migration/model/workbench-layout-migration-v1.model.d.ts +16 -0
- package/lib/layout/migration/model/workbench-layout-migration-v2.model.d.ts +22 -0
- package/lib/layout/migration/model/workbench-layout-migration-v3.model.d.ts +30 -0
- package/lib/layout/migration/model/workbench-layout-migration-v4.model.d.ts +31 -0
- package/lib/layout/migration/workbench-layout-migration-v2.service.d.ts +13 -0
- package/lib/layout/migration/workbench-layout-migration-v3.service.d.ts +16 -0
- package/lib/layout/migration/workbench-layout-migration-v4.service.d.ts +12 -0
- package/lib/layout/workbench-layout.d.ts +61 -7
- package/lib/layout/workbench-layout.factory.d.ts +1 -1
- package/lib/layout/workbench-layout.model.d.ts +19 -9
- package/lib/layout/workbench-layouts.util.d.ts +22 -6
- package/lib/layout/workench-layout-serializer.service.d.ts +28 -7
- package/lib/layout//311/265workbench-layout.d.ts +172 -98
- package/lib/layout//311/265workbench-layout.factory.d.ts +4 -0
- package/lib/logging/logger-names.d.ts +7 -7
- package/lib/logging/logging-support.d.ts +2 -2
- package/lib/message-box/workbench-message-box.options.d.ts +4 -3
- package/lib/message-box/workbench-message-box.service.d.ts +1 -1
- package/lib/microfrontend-platform/common/microfrontend.util.d.ts +22 -0
- package/lib/microfrontend-platform/initialization/microfrontend-platform-initializer.service.d.ts +15 -9
- package/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-capability-validator.interceptor.d.ts +11 -0
- package/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog-intent-handler.interceptor.d.ts +28 -0
- package/lib/microfrontend-platform/microfrontend-dialog/microfrontend-dialog.component.d.ts +52 -0
- package/lib/microfrontend-platform/microfrontend-host-dialog/microfrontend-host-dialog.component.d.ts +37 -0
- package/lib/microfrontend-platform/microfrontend-host-popup/microfrontend-host-popup.component.d.ts +2 -1
- package/lib/microfrontend-platform/microfrontend-popup/{microfrontend-popup-capability-interceptor.service.d.ts → microfrontend-popup-capability-validator.interceptor.d.ts} +3 -3
- package/lib/microfrontend-platform/microfrontend-popup/{microfrontend-popup-intent-interceptor.service.d.ts → microfrontend-popup-intent-handler.interceptor.d.ts} +9 -6
- package/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup.component.d.ts +7 -10
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-view-command-handler.service.d.ts +2 -9
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.d.ts +12 -23
- package/lib/microfrontend-platform/microfrontend-view/microfrontend-workbench-view.model.d.ts +14 -0
- package/lib/microfrontend-platform/routing/microfrontend-view-capability-id-assigner.interceptor.d.ts +10 -0
- package/lib/microfrontend-platform/routing/{microfrontend-view-capability-interceptor.service.d.ts → microfrontend-view-capability-validator.interceptor.d.ts} +3 -3
- package/lib/microfrontend-platform/routing/{microfrontend-view-intent-interceptor.service.d.ts → microfrontend-view-intent-handler.interceptor.d.ts} +6 -5
- package/lib/microfrontend-platform/routing/microfrontend-view-routes.d.ts +49 -0
- package/lib/microfrontend-platform/workbench-microfrontend-support.d.ts +3 -2
- package/lib/migration/workbench-migration.d.ts +9 -0
- package/lib/migration/workbench-migrator.d.ts +18 -0
- package/lib/notification/notification.config.d.ts +1 -1
- package/lib/notification/notification.d.ts +1 -3
- package/lib/page-not-found/format-url.pipe.d.ts +11 -0
- package/lib/page-not-found/page-not-found.component.d.ts +8 -0
- package/lib/part/part-action-bar/part-action.directive.d.ts +1 -1
- package/lib/part/part-bar/part-bar.component.d.ts +4 -3
- package/lib/part/view-context-menu/view-menu.directive.d.ts +1 -1
- package/lib/part/view-context-menu/view-menu.service.d.ts +5 -4
- package/lib/part/view-list-item/view-list-item.component.d.ts +5 -4
- package/lib/part/view-tab/view-tab.component.d.ts +6 -5
- package/lib/part/view-tab-drag-image/view-tab-drag-image.component.d.ts +3 -3
- package/lib/part/workbench-part.model.d.ts +5 -4
- package/lib/part//311/265workbench-part.model.d.ts +5 -4
- package/lib/perspective/migration/model/workbench-perspective-migration-v1.model.d.ts +8 -0
- package/lib/perspective/migration/model/workbench-perspective-migration-v2.model.d.ts +10 -0
- package/lib/perspective/migration/workbench-perspective-migration-v2.service.d.ts +13 -0
- package/lib/perspective/workbench-grid-merger.service.d.ts +9 -16
- package/lib/perspective/workbench-perspective-storage.service.d.ts +10 -28
- package/lib/perspective/workbench-perspective-view-conflict-resolver.service.d.ts +8 -25
- package/lib/perspective/workbench-perspective.model.d.ts +123 -14
- package/lib/perspective/workbench-perspective.service.d.ts +10 -3
- package/lib/perspective/workench-perspective-serializer.service.d.ts +26 -0
- package/lib/perspective//311/265workbench-perspective.model.d.ts +16 -14
- package/lib/popup/popup.config.d.ts +4 -3
- package/lib/portal/workbench-portal-outlet.directive.d.ts +2 -2
- package/lib/public_api.d.ts +4 -3
- package/lib/registry/workbench-object-registry.d.ts +2 -2
- package/lib/routing/empty-outlet/empty-outlet.component.d.ts +15 -0
- package/lib/routing/public_api.d.ts +2 -1
- package/lib/routing/router.util.d.ts +45 -31
- package/lib/routing/routing.model.d.ts +129 -0
- package/lib/routing/url-segment-matcher.d.ts +20 -0
- package/lib/routing/workbench-auxiliary-routes-registrator.service.d.ts +25 -16
- package/lib/routing/workbench-dialog-differ.d.ts +25 -0
- package/lib/routing/workbench-layout-differ.d.ts +4 -7
- package/lib/routing/workbench-navigational-states.d.ts +11 -21
- package/lib/routing/workbench-route-data.d.ts +14 -12
- package/lib/routing/workbench-router-link.directive.d.ts +22 -7
- package/lib/routing/workbench-router.service.d.ts +42 -157
- package/lib/routing/workbench-url-observer.service.d.ts +18 -6
- package/lib/routing//311/265workbench-router.service.d.ts +75 -0
- package/lib/startup/workbench-launcher.service.d.ts +4 -4
- package/lib/testing/public_api.d.ts +1 -0
- package/lib/testing/workbench-testing.module.d.ts +7 -6
- package/lib/testing/workbench.provider.d.ts +29 -0
- package/lib/view/public_api.d.ts +2 -1
- package/lib/view/view-move-handler.service.d.ts +2 -4
- package/lib/view/view-portal.pipe.d.ts +2 -1
- package/lib/view/view.component.d.ts +1 -11
- package/lib/view/workbench-view-route-guards.d.ts +36 -0
- package/lib/view/workbench-view.model.d.ts +46 -13
- package/lib/view/workbench-view.registry.d.ts +4 -3
- package/lib/view//311/265workbench-view.model.d.ts +79 -14
- package/lib/view-dnd/grid-drop-targets.util.d.ts +15 -17
- package/lib/view-dnd/view-drag.service.d.ts +12 -4
- package/lib/view-dnd/view-drop-zone.directive.d.ts +1 -1
- package/lib/{workbench-module-config.d.ts → workbench-config.d.ts} +29 -71
- package/lib/workbench.component.d.ts +2 -2
- package/lib/workbench.constants.d.ts +6 -8
- package/lib/workbench.model.d.ts +20 -8
- package/lib/workbench.module.d.ts +12 -7
- package/lib/workbench.provider.d.ts +38 -0
- package/lib/workbench.service.d.ts +32 -8
- package/lib//311/265workbench.service.d.ts +9 -3
- package/package.json +8 -8
- package/esm2022/lib/layout/migration/workbench-layout-migrator.service.mjs +0 -38
- package/esm2022/lib/layout/migration/workbench-layout-v1-migrator.service.mjs +0 -59
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-capability-interceptor.service.mjs +0 -30
- package/esm2022/lib/microfrontend-platform/microfrontend-popup/microfrontend-popup-intent-interceptor.service.mjs +0 -130
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-navigational-states.mjs +0 -22
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-routes.mjs +0 -71
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-capability-interceptor.service.mjs +0 -54
- package/esm2022/lib/microfrontend-platform/routing/microfrontend-view-intent-interceptor.service.mjs +0 -123
- package/esm2022/lib/routing/navigation-state.resolver.mjs +0 -54
- package/esm2022/lib/view/workbench-view-pre-destroy.guard.mjs +0 -36
- package/esm2022/lib/workbench-module-config.mjs +0 -15
- package/lib/layout/migration/workbench-layout-migrator.service.d.ts +0 -15
- package/lib/layout/migration/workbench-layout-v1-migrator.service.d.ts +0 -12
- package/lib/microfrontend-platform/routing/microfrontend-navigational-states.d.ts +0 -11
- package/lib/microfrontend-platform/routing/microfrontend-routes.d.ts +0 -38
- package/lib/routing/navigation-state.resolver.d.ts +0 -12
- package/lib/view/workbench-view-pre-destroy.guard.d.ts +0 -5
package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-view.component.mjs
CHANGED
|
@@ -7,29 +7,27 @@
|
|
|
7
7
|
*
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
*/
|
|
10
|
-
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Inject, ViewChild } from '@angular/core';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { ɵMicrofrontendRouteParams, ɵ
|
|
15
|
-
import {
|
|
10
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Inject, runInInjectionContext, ViewChild } from '@angular/core';
|
|
11
|
+
import { combineLatest, firstValueFrom, of, Subject, switchMap } from 'rxjs';
|
|
12
|
+
import { first, map, takeUntil } from 'rxjs/operators';
|
|
13
|
+
import { mapToBody, MessageHeaders, MicrofrontendPlatformConfig, ResponseStatusCodes } from '@scion/microfrontend-platform';
|
|
14
|
+
import { ɵMicrofrontendRouteParams, ɵVIEW_ID_CONTEXT_KEY, ɵWorkbenchCommands } from '@scion/workbench-client';
|
|
15
|
+
import { Dictionaries, Maps } from '@scion/toolkit/util';
|
|
16
16
|
import { LoggerNames } from '../../logging';
|
|
17
17
|
import { IFRAME_HOST } from '../../content-projection/view-container.reference';
|
|
18
18
|
import { serializeExecution } from '../../common/operators';
|
|
19
19
|
import { ɵWorkbenchView } from '../../view/ɵworkbench-view.model';
|
|
20
20
|
import { filterArray, mapArray } from '@scion/toolkit/operators';
|
|
21
21
|
import { stringifyError } from '../../common/stringify-error.util';
|
|
22
|
-
import { MicrofrontendViewRoutes } from '../routing/microfrontend-routes';
|
|
23
|
-
import { WorkbenchRouteData } from '../../routing/workbench-route-data';
|
|
24
|
-
import { WorkbenchNavigationalViewStates } from '../../routing/workbench-navigational-states';
|
|
25
|
-
import { MicrofrontendNavigationalStates } from '../routing/microfrontend-navigational-states';
|
|
26
|
-
import { Beans } from '@scion/toolkit/bean-manager';
|
|
22
|
+
import { MicrofrontendViewRoutes } from '../routing/microfrontend-view-routes';
|
|
27
23
|
import { AsyncPipe, NgClass, NgComponentOutlet } from '@angular/common';
|
|
28
24
|
import { ContentAsOverlayComponent } from '../../content-projection/content-as-overlay.component';
|
|
29
25
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
30
26
|
import { MicrofrontendSplashComponent } from '../microfrontend-splash/microfrontend-splash.component';
|
|
31
|
-
import '../microfrontend-platform.config';
|
|
32
27
|
import { GLASS_PANE_BLOCKABLE, GlassPaneDirective } from '../../glass-pane/glass-pane.directive';
|
|
28
|
+
import { MicrofrontendWorkbenchView } from './microfrontend-workbench-view.model';
|
|
29
|
+
import { Microfrontends } from '../common/microfrontend.util';
|
|
30
|
+
import { Objects } from '../../common/objects.util';
|
|
33
31
|
import * as i0 from "@angular/core";
|
|
34
32
|
import * as i1 from "@angular/router";
|
|
35
33
|
import * as i2 from "@scion/microfrontend-platform";
|
|
@@ -37,14 +35,13 @@ import * as i3 from "../../logging";
|
|
|
37
35
|
import * as i4 from "../../part/view-context-menu/view-menu.service";
|
|
38
36
|
import * as i5 from "../../layout/workbench-layout.service";
|
|
39
37
|
import * as i6 from "../../routing/workbench-router.service";
|
|
40
|
-
import * as i7 from "../../
|
|
41
|
-
import * as i8 from "../../view
|
|
42
|
-
import * as i9 from "../../content-projection/view-container.reference";
|
|
38
|
+
import * as i7 from "../../view/\u0275workbench-view.model";
|
|
39
|
+
import * as i8 from "../../content-projection/view-container.reference";
|
|
43
40
|
/**
|
|
44
41
|
* Embeds the microfrontend of a view capability.
|
|
45
42
|
*/
|
|
46
43
|
export class MicrofrontendViewComponent {
|
|
47
|
-
constructor(_host, _route, _outletRouter, _manifestService, _messageClient, _destroyRef, _logger, _viewContextMenuService, _workbenchLayoutService, _workbenchRouter,
|
|
44
|
+
constructor(_host, _route, _outletRouter, _manifestService, _messageClient, _destroyRef, _logger, _viewContextMenuService, _workbenchLayoutService, _workbenchRouter, _injector, _cd, view, iframeHostRef) {
|
|
48
45
|
this._host = _host;
|
|
49
46
|
this._route = _route;
|
|
50
47
|
this._outletRouter = _outletRouter;
|
|
@@ -55,7 +52,7 @@ export class MicrofrontendViewComponent {
|
|
|
55
52
|
this._viewContextMenuService = _viewContextMenuService;
|
|
56
53
|
this._workbenchLayoutService = _workbenchLayoutService;
|
|
57
54
|
this._workbenchRouter = _workbenchRouter;
|
|
58
|
-
this.
|
|
55
|
+
this._injector = _injector;
|
|
59
56
|
this._cd = _cd;
|
|
60
57
|
this.view = view;
|
|
61
58
|
this.iframeHostRef = iframeHostRef;
|
|
@@ -74,67 +71,52 @@ export class MicrofrontendViewComponent {
|
|
|
74
71
|
this.splash = inject(MicrofrontendPlatformConfig).splash ?? MicrofrontendSplashComponent;
|
|
75
72
|
}
|
|
76
73
|
ngOnInit() {
|
|
77
|
-
// Construct the view context, allowing embedded content to interact with this view.
|
|
78
74
|
this.routerOutletElement.nativeElement.setContextValue(ɵVIEW_ID_CONTEXT_KEY, this.view.id);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
.pipe(debounceTime(0, asapScheduler), // wait until the Angular router completed updating the route, similar to `ngOnChanges` in a component to wait for all input properties to be set
|
|
87
|
-
map(() => this._route.snapshot), mapToMicrofrontendRouteSnapshot(), startWith(undefined), // initialize 'pairwise' operator
|
|
88
|
-
pairwise(), serializeExecution(([prev, curr]) => this.onNavigate(prev, curr)), catchError((error, caught) => {
|
|
89
|
-
this._logger.error(() => '[MicrofrontendLoadError] An unexpected error occurred.', LoggerNames.MICROFRONTEND_ROUTING, error);
|
|
90
|
-
return caught; // re-subscribe to the params Observable
|
|
91
|
-
}), takeUntilDestroyed(this._destroyRef))
|
|
75
|
+
this.propagateWorkbenchTheme();
|
|
76
|
+
this.installMenuItemAccelerators$();
|
|
77
|
+
this.installNavigator();
|
|
78
|
+
}
|
|
79
|
+
installNavigator() {
|
|
80
|
+
this._route.params
|
|
81
|
+
.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))
|
|
92
82
|
.subscribe();
|
|
93
|
-
this.installThemePropagator();
|
|
94
83
|
}
|
|
95
|
-
async onNavigate(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (!viewCapability) {
|
|
99
|
-
this._logger.warn(() => `[NullViewError] No application found to provide a view of id '${params[ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]}'. Maybe, the requested view is not public API or the providing application not available.`, LoggerNames.MICROFRONTEND_ROUTING);
|
|
100
|
-
await this.view.close();
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
const application = this.lookupApplication(viewCapability.metadata.appSymbolicName);
|
|
104
|
-
if (!application) {
|
|
105
|
-
this._logger.error(() => `[NullApplicationError] Unexpected. Cannot resolve application '${viewCapability.metadata.appSymbolicName}'.`, LoggerNames.MICROFRONTEND_ROUTING, viewCapability);
|
|
84
|
+
async onNavigate(prevCapability, capability, params) {
|
|
85
|
+
if (!capability) {
|
|
86
|
+
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);
|
|
106
87
|
await this.view.close();
|
|
107
88
|
return;
|
|
108
89
|
}
|
|
90
|
+
this.capability = capability;
|
|
91
|
+
this.view.registerAdapter(MicrofrontendWorkbenchView, new MicrofrontendWorkbenchView(capability, params));
|
|
109
92
|
// Check if navigating to a new microfrontend.
|
|
110
|
-
if (!
|
|
111
|
-
this.
|
|
112
|
-
this.
|
|
113
|
-
this.installParamsUpdater(viewCapability);
|
|
93
|
+
if (!prevCapability || prevCapability.metadata.id !== capability.metadata.id) {
|
|
94
|
+
this.setViewProperties(capability, params);
|
|
95
|
+
this.installParamsUpdater(capability);
|
|
114
96
|
}
|
|
115
|
-
// Signal
|
|
116
|
-
if (
|
|
97
|
+
// Signal the currently loaded application to unload.
|
|
98
|
+
if (prevCapability && prevCapability.metadata.appSymbolicName !== capability.metadata.appSymbolicName) {
|
|
117
99
|
await this._messageClient.publish(ɵWorkbenchCommands.viewUnloadingTopic(this.view.id));
|
|
118
100
|
}
|
|
119
|
-
//
|
|
101
|
+
// Pass parameters to the microfrontend.
|
|
120
102
|
await this._messageClient.publish(ɵWorkbenchCommands.viewParamsTopic(this.view.id), Maps.coerce(params), { retain: true });
|
|
121
|
-
// When navigating to another view capability of the same app, wait until transported the params to
|
|
122
|
-
// new microfrontend into the iframe, allowing the currently loaded microfrontend to
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
&&
|
|
126
|
-
|
|
127
|
-
await this.waitForCapabilityParam(viewCapability.metadata.id);
|
|
103
|
+
// When navigating to another view capability of the same app, wait until transported the params to the microfrontend before loading the
|
|
104
|
+
// new microfrontend into the iframe, allowing the currently loaded microfrontend to clean up subscriptions.
|
|
105
|
+
if (prevCapability
|
|
106
|
+
&& prevCapability.metadata.appSymbolicName === capability.metadata.appSymbolicName
|
|
107
|
+
&& prevCapability.metadata.id !== capability.metadata.id) {
|
|
108
|
+
await this.waitForCapabilityParam(capability.metadata.id);
|
|
128
109
|
}
|
|
129
110
|
// Navigate to the microfrontend.
|
|
130
|
-
this.
|
|
131
|
-
|
|
111
|
+
const application = this._manifestService.applications.find(app => app.symbolicName === capability.metadata.appSymbolicName);
|
|
112
|
+
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);
|
|
113
|
+
await this._outletRouter.navigate(capability.properties.path, {
|
|
132
114
|
outlet: this.view.id,
|
|
133
115
|
relativeTo: application.baseUrl,
|
|
134
116
|
params: params,
|
|
135
117
|
pushStateToSessionHistoryStack: false,
|
|
136
|
-
showSplash:
|
|
137
|
-
ɵcapabilityId:
|
|
118
|
+
showSplash: capability.properties.showSplash,
|
|
119
|
+
ɵcapabilityId: capability.metadata.id,
|
|
138
120
|
});
|
|
139
121
|
// Inactive views are detached from the Angular change detection tree.
|
|
140
122
|
// Therefore, manually detect this component for changes for updating attributes on the `sci-router-outlet`.
|
|
@@ -142,6 +124,17 @@ export class MicrofrontendViewComponent {
|
|
|
142
124
|
this._cd.detectChanges();
|
|
143
125
|
}
|
|
144
126
|
}
|
|
127
|
+
fetchCapability$(capabilityId) {
|
|
128
|
+
return this._manifestService.lookupCapabilities$({ id: capabilityId }).pipe(map(capabilities => capabilities.at(0)));
|
|
129
|
+
}
|
|
130
|
+
installMenuItemAccelerators$() {
|
|
131
|
+
// Since the iframe is added at a top-level location in the DOM, that is, not as a child element of this component,
|
|
132
|
+
// the workbench view misses keyboard events from embedded content. As a result, menu item accelerators of the context
|
|
133
|
+
// menu of this view do not work, so we install the accelerators on the router outlet as well.
|
|
134
|
+
this._viewContextMenuService.installMenuItemAccelerators$(this.routerOutletElement.nativeElement, this.view)
|
|
135
|
+
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
136
|
+
.subscribe();
|
|
137
|
+
}
|
|
145
138
|
/**
|
|
146
139
|
* Subscribes to requests from the currently loaded microfrontend to update its parameters.
|
|
147
140
|
*/
|
|
@@ -153,23 +146,23 @@ export class MicrofrontendViewComponent {
|
|
|
153
146
|
// We DO NOT navigate if the subscription was closed, e.g., because closed the view or navigated to another capability.
|
|
154
147
|
const replyTo = request.headers.get(MessageHeaders.ReplyTo);
|
|
155
148
|
try {
|
|
156
|
-
const success = await this._workbenchRouter
|
|
149
|
+
const success = await this._workbenchRouter.navigate(layout => {
|
|
157
150
|
// Cancel pending navigation if the subscription was closed, e.g., because closed the view or navigated to another capability
|
|
158
151
|
if (subscription.closed) {
|
|
159
152
|
return null;
|
|
160
153
|
}
|
|
161
|
-
const
|
|
162
|
-
const currentParams =
|
|
163
|
-
const
|
|
164
|
-
const
|
|
165
|
-
const mergedParams = Dictionaries.withoutUndefinedEntries(paramsUpdateCommand.paramsHandling === 'merge' ? { ...currentParams, ...newParams } : newParams);
|
|
154
|
+
const paramsHandling = request.body.paramsHandling;
|
|
155
|
+
const currentParams = this._route.snapshot.params;
|
|
156
|
+
const newParams = Dictionaries.coerce(request.body.params); // coerce params for backward compatibility
|
|
157
|
+
const mergedParams = Objects.withoutUndefinedEntries(paramsHandling === 'merge' ? { ...currentParams, ...newParams } : newParams);
|
|
166
158
|
const { urlParams, transientParams } = MicrofrontendViewRoutes.splitParams(mergedParams, viewCapability);
|
|
167
|
-
return {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
159
|
+
return layout.navigateView(this.view.id, [urlParams], {
|
|
160
|
+
relativeTo: this._route,
|
|
161
|
+
state: Objects.withoutUndefinedEntries({
|
|
162
|
+
[MicrofrontendViewRoutes.STATE_TRANSIENT_PARAMS]: transientParams,
|
|
163
|
+
}),
|
|
164
|
+
});
|
|
165
|
+
});
|
|
173
166
|
await this._messageClient.publish(replyTo, success, { headers: new Map().set(MessageHeaders.Status, ResponseStatusCodes.TERMINAL) });
|
|
174
167
|
}
|
|
175
168
|
catch (error) {
|
|
@@ -180,21 +173,13 @@ export class MicrofrontendViewComponent {
|
|
|
180
173
|
/**
|
|
181
174
|
* Updates the properties of this view, such as the view title, as defined by the capability.
|
|
182
175
|
*/
|
|
183
|
-
setViewProperties(viewCapability,
|
|
184
|
-
this.view.title = substituteNamedParameters(viewCapability.properties.title, params) ?? null;
|
|
185
|
-
this.view.heading = substituteNamedParameters(viewCapability.properties.heading, params) ?? null;
|
|
186
|
-
this.view.cssClass
|
|
187
|
-
.concat(Arrays.coerce(viewCapability.properties.cssClass))
|
|
188
|
-
.concat(Arrays.coerce(activatedRoute.data[WorkbenchRouteData.state]?.[WorkbenchNavigationalViewStates.cssClass]));
|
|
176
|
+
setViewProperties(viewCapability, params) {
|
|
177
|
+
this.view.title = Microfrontends.substituteNamedParameters(viewCapability.properties.title, Maps.coerce(params)) ?? null;
|
|
178
|
+
this.view.heading = Microfrontends.substituteNamedParameters(viewCapability.properties.heading, Maps.coerce(params)) ?? null;
|
|
179
|
+
this.view.classList.set(viewCapability.properties.cssClass, { scope: 'application' });
|
|
189
180
|
this.view.closable = viewCapability.properties.closable ?? true;
|
|
190
181
|
this.view.dirty = false;
|
|
191
182
|
}
|
|
192
|
-
/**
|
|
193
|
-
* Looks up the application registered under the given symbolic name. Returns `undefined` if not found.
|
|
194
|
-
*/
|
|
195
|
-
lookupApplication(symbolicName) {
|
|
196
|
-
return this._manifestService.applications.find(app => app.symbolicName === symbolicName);
|
|
197
|
-
}
|
|
198
183
|
/**
|
|
199
184
|
* Promise that resolves once params contain the given capability id.
|
|
200
185
|
*/
|
|
@@ -203,21 +188,17 @@ export class MicrofrontendViewComponent {
|
|
|
203
188
|
.pipe(mapToBody(), first(params => params.get(ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID) === viewCapabilityId));
|
|
204
189
|
await firstValueFrom(viewParams$);
|
|
205
190
|
}
|
|
206
|
-
/**
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
// Allow the microfrontend to prevent this view from closing.
|
|
215
|
-
const count = await firstValueFrom(this._messageClient.subscriberCount$(closingTopic));
|
|
216
|
-
if (count === 0) {
|
|
191
|
+
/** @inheritDoc */
|
|
192
|
+
async canClose() {
|
|
193
|
+
const canCloseTopic = ɵWorkbenchCommands.canCloseTopic(this.view.id);
|
|
194
|
+
const legacyCanCloseTopic = ɵWorkbenchCommands.viewClosingTopic(this.view.id);
|
|
195
|
+
// Initiate a request-response communication only if the embedded microfrontend implements `CanClose` guard.
|
|
196
|
+
const hasCanCloseGuard = await firstValueFrom(this._messageClient.subscriberCount$(canCloseTopic)) > 0;
|
|
197
|
+
const hasLegacyCanCloseGuard = await firstValueFrom(this._messageClient.subscriberCount$(legacyCanCloseTopic)) > 0;
|
|
198
|
+
if (!hasCanCloseGuard && !hasLegacyCanCloseGuard) {
|
|
217
199
|
return true;
|
|
218
200
|
}
|
|
219
|
-
|
|
220
|
-
return firstValueFrom(doit, { defaultValue: true });
|
|
201
|
+
return firstValueFrom(this._messageClient.request$(hasCanCloseGuard ? canCloseTopic : legacyCanCloseTopic).pipe(mapToBody()), { defaultValue: true });
|
|
221
202
|
}
|
|
222
203
|
onFocusWithin(event) {
|
|
223
204
|
const { detail: focusWithin } = event;
|
|
@@ -256,35 +237,22 @@ export class MicrofrontendViewComponent {
|
|
|
256
237
|
this.isWorkbenchDrag = (event === 'start');
|
|
257
238
|
});
|
|
258
239
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
*/
|
|
262
|
-
installThemePropagator() {
|
|
263
|
-
this._workbenchService.theme$
|
|
264
|
-
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
265
|
-
.subscribe(theme => {
|
|
266
|
-
if (theme) {
|
|
267
|
-
this.routerOutletElement.nativeElement.setContextValue(ɵTHEME_CONTEXT_KEY, theme);
|
|
268
|
-
this.routerOutletElement.nativeElement.setContextValue('color-scheme', theme.colorScheme);
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
this.routerOutletElement.nativeElement.removeContextValue(ɵTHEME_CONTEXT_KEY);
|
|
272
|
-
this.routerOutletElement.nativeElement.removeContextValue('color-scheme');
|
|
273
|
-
}
|
|
274
|
-
});
|
|
240
|
+
propagateWorkbenchTheme() {
|
|
241
|
+
runInInjectionContext(this._injector, () => Microfrontends.propagateTheme(this.routerOutletElement.nativeElement));
|
|
275
242
|
}
|
|
276
243
|
ngOnDestroy() {
|
|
277
244
|
// Instruct the message broker to delete retained messages to free resources.
|
|
278
245
|
this._messageClient.publish(ɵWorkbenchCommands.viewActiveTopic(this.view.id), undefined, { retain: true }).then();
|
|
279
246
|
this._messageClient.publish(ɵWorkbenchCommands.viewParamsTopic(this.view.id), undefined, { retain: true }).then();
|
|
280
247
|
this._outletRouter.navigate(null, { outlet: this.view.id }).then();
|
|
248
|
+
this.view.unregisterAdapter(MicrofrontendWorkbenchView);
|
|
281
249
|
}
|
|
282
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.
|
|
283
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.
|
|
250
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewComponent, deps: [{ token: i0.ElementRef }, { token: i1.ActivatedRoute }, { token: i2.OutletRouter }, { token: i2.ManifestService }, { token: i2.MessageClient }, { token: i0.DestroyRef }, { token: i3.Logger }, { token: i4.ViewMenuService }, { token: i5.WorkbenchLayoutService }, { token: i6.WorkbenchRouter }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i7.ɵWorkbenchView }, { token: IFRAME_HOST }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
251
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MicrofrontendViewComponent, isStandalone: true, selector: "wb-microfrontend-view", viewQueries: [{ propertyName: "routerOutletElement", first: true, predicate: ["router_outlet"], descendants: true, static: true }], ngImport: i0, template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\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.value\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\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: ["overlayHost"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: GlassPaneDirective, selector: "[wbGlassPane]" }], viewProviders: [
|
|
284
252
|
configureMicrofrontendGlassPane(),
|
|
285
253
|
] }); }
|
|
286
254
|
}
|
|
287
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.
|
|
255
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MicrofrontendViewComponent, decorators: [{
|
|
288
256
|
type: Component,
|
|
289
257
|
args: [{ selector: 'wb-microfrontend-view', standalone: true, imports: [
|
|
290
258
|
NgClass,
|
|
@@ -294,38 +262,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
|
|
|
294
262
|
GlassPaneDirective,
|
|
295
263
|
], viewProviders: [
|
|
296
264
|
configureMicrofrontendGlassPane(),
|
|
297
|
-
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\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]=\"
|
|
298
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.OutletRouter }, { type: i2.ManifestService }, { type: i2.MessageClient }, { type: i0.DestroyRef }, { type: i3.Logger }, { type: i4.ViewMenuService }, { type: i5.WorkbenchLayoutService }, { type: i6.WorkbenchRouter }, { type:
|
|
265
|
+
], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<wb-content-as-overlay [overlayHost]=\"iframeHostRef.ref$ | async\">\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.value\"\n (focuswithin)=\"onFocusWithin($event)\"\n [keystrokes]=\"keystrokesToBubble$ | async\">\n <ng-container *ngComponentOutlet=\"splash\"></ng-container>\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"] }]
|
|
266
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.OutletRouter }, { type: i2.ManifestService }, { type: i2.MessageClient }, { type: i0.DestroyRef }, { type: i3.Logger }, { type: i4.ViewMenuService }, { type: i5.WorkbenchLayoutService }, { type: i6.WorkbenchRouter }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i7.ɵWorkbenchView }, { type: i8.ViewContainerReference, decorators: [{
|
|
299
267
|
type: Inject,
|
|
300
268
|
args: [IFRAME_HOST]
|
|
301
269
|
}] }], propDecorators: { routerOutletElement: [{
|
|
302
270
|
type: ViewChild,
|
|
303
271
|
args: ['router_outlet', { static: true }]
|
|
304
272
|
}] } });
|
|
305
|
-
/**
|
|
306
|
-
* Maps the passed {@link ActivatedRouteSnapshot} to a {@link ActivatedMicrofrontendRouteSnapshot} with resolved params and capability.
|
|
307
|
-
*/
|
|
308
|
-
function mapToMicrofrontendRouteSnapshot() {
|
|
309
|
-
return switchMap((activatedRoute) => {
|
|
310
|
-
const { viewCapabilityId, urlParams, transientParams, qualifier } = MicrofrontendViewRoutes.parseParams(activatedRoute);
|
|
311
|
-
return Beans.get(ManifestService).lookupCapabilities$({ id: viewCapabilityId }).pipe(map(capabilities => ({
|
|
312
|
-
activatedRoute,
|
|
313
|
-
params: {
|
|
314
|
-
...urlParams,
|
|
315
|
-
...transientParams,
|
|
316
|
-
...qualifier,
|
|
317
|
-
[ɵMicrofrontendRouteParams.ɵVIEW_CAPABILITY_ID]: viewCapabilityId, // capability ID cannot be overwritten.
|
|
318
|
-
},
|
|
319
|
-
viewCapability: capabilities[0],
|
|
320
|
-
})));
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Replaces named parameters with values of the contained {@link Params}.
|
|
325
|
-
*/
|
|
326
|
-
function substituteNamedParameters(value, params) {
|
|
327
|
-
return value?.replace(/:(\w+)/g, (match, paramName) => params[paramName] ?? match) || null;
|
|
328
|
-
}
|
|
329
273
|
/**
|
|
330
274
|
* Blocks the microfrontend outlet when dialog(s) overlay this view.
|
|
331
275
|
*/
|
|
@@ -335,4 +279,4 @@ function configureMicrofrontendGlassPane() {
|
|
|
335
279
|
useExisting: ɵWorkbenchView,
|
|
336
280
|
};
|
|
337
281
|
}
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBK0IsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5LLE9BQU8sRUFBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQWMsRUFBRSxFQUFvQixPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEgsT0FBTyxFQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRyxPQUFPLEVBQWMsZUFBZSxFQUFFLFNBQVMsRUFBaUIsY0FBYyxFQUFFLDJCQUEyQixFQUFnQixtQkFBbUIsRUFBdUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzTixPQUFPLEVBQTBCLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUE0QixrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ25MLE9BQU8sRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBQyxNQUFNLHFC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QyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM3RixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLCtCQUErQjtJQUN0QyxPQUFPO1FBQ0wsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixXQUFXLEVBQUUsY0FBYztLQUM1QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMiBTd2lzcyBGZWRlcmFsIFJhaWx3YXlzXG4gKlxuICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZVxuICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjBcbiAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wL1xuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFByb3ZpZGVyLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHthc2FwU2NoZWR1bGVyLCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mLCBPcGVyYXRvckZ1bmN0aW9uLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBmaXJzdCwgbWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBcHBsaWNhdGlvbiwgTWFuaWZlc3RTZXJ2aWNlLCBtYXBUb0JvZHksIE1lc3NhZ2VDbGllbnQsIE1lc3NhZ2VIZWFkZXJzLCBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWcsIE91dGxldFJvdXRlciwgUmVzcG9uc2VTdGF0dXNDb2RlcywgU2NpUm91dGVyT3V0bGV0RWxlbWVudCwgVG9waWNNZXNzYWdlfSBmcm9tICdAc2Npb24vbWljcm9mcm9udGVuZC1wbGF0Zm9ybSc7XG5pbXBvcnQge1dvcmtiZW5jaFZpZXdDYXBhYmlsaXR5LCDJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcywgybVUSEVNRV9DT05URVhUX0tFWSwgybVWSUVXX0lEX0NPTlRFWFRfS0VZLCDJtVZpZXdQYXJhbXNVcGRhdGVDb21tYW5kLCDJtVdvcmtiZW5jaENvbW1hbmRzfSBmcm9tICdAc2Npb24vd29ya2JlbmNoLWNsaWVudCc7XG5pbXBvcnQge0FycmF5cywgRGljdGlvbmFyaWVzLCBNYXBzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcbmltcG9ydCB7TG9nZ2VyLCBMb2dnZXJOYW1lc30gZnJvbSAnLi4vLi4vbG9nZ2luZyc7XG5pbXBvcnQge1dvcmtiZW5jaFRoZW1lLCBXb3JrYmVuY2hWaWV3UHJlRGVzdHJveX0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLm1vZGVsJztcbmltcG9ydCB7SUZSQU1FX0hPU1QsIFZpZXdDb250YWluZXJSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2NvbnRlbnQtcHJvamVjdGlvbi92aWV3LWNvbnRhaW5lci5yZWZlcmVuY2UnO1xuaW1wb3J0IHtzZXJpYWxpemVFeGVjdXRpb259IGZyb20gJy4uLy4uL2NvbW1vbi9vcGVyYXRvcnMnO1xuaW1wb3J0IHvJtVdvcmtiZW5jaFZpZXd9IGZyb20gJy4uLy4uL3ZpZXcvybV3b3JrYmVuY2gtdmlldy5tb2RlbCc7XG5pbXBvcnQge2ZpbHRlckFycmF5LCBtYXBBcnJheX0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld01lbnVTZXJ2aWNlfSBmcm9tICcuLi8uLi9wYXJ0L3ZpZXctY29udGV4dC1tZW51L3ZpZXctbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7V29ya2JlbmNoUm91dGVyfSBmcm9tICcuLi8uLi9yb3V0aW5nL3dvcmtiZW5jaC1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQge3N0cmluZ2lmeUVycm9yfSBmcm9tICcuLi8uLi9jb21tb24vc3RyaW5naWZ5LWVycm9yLnV0aWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld1JvdXRlc30gZnJvbSAnLi4vcm91dGluZy9taWNyb2Zyb250ZW5kLXJvdXRlcyc7XG5pbXBvcnQge1dvcmtiZW5jaFJvdXRlRGF0YX0gZnJvbSAnLi4vLi4vcm91dGluZy93b3JrYmVuY2gtcm91dGUtZGF0YSc7XG5pbXBvcnQge1dvcmtiZW5jaE5hdmlnYXRpb25hbFZpZXdTdGF0ZXN9IGZyb20gJy4uLy4uL3JvdXRpbmcvd29ya2JlbmNoLW5hdmlnYXRpb25hbC1zdGF0ZXMnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kTmF2aWdhdGlvbmFsU3RhdGVzfSBmcm9tICcuLi9yb3V0aW5nL21pY3JvZnJvbnRlbmQtbmF2aWdhdGlvbmFsLXN0YXRlcyc7XG5pbXBvcnQge0JlYW5zfSBmcm9tICdAc2Npb24vdG9vbGtpdC9iZWFuLW1hbmFnZXInO1xuaW1wb3J0IHtBc3luY1BpcGUsIE5nQ2xhc3MsIE5nQ29tcG9uZW50T3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb250ZW50QXNPdmVybGF5Q29tcG9uZW50fSBmcm9tICcuLi8uLi9jb250ZW50LXByb2plY3Rpb24vY29udGVudC1hcy1vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi9sYXlvdXQvd29ya2JlbmNoLWxheW91dC5zZXJ2aWNlJztcbmltcG9ydCB7V29ya2JlbmNoU2VydmljZX0gZnJvbSAnLi4vLi4vd29ya2JlbmNoLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFNwbGFzaENvbXBvbmVudH0gZnJvbSAnLi4vbWljcm9mcm9udGVuZC1zcGxhc2gvbWljcm9mcm9udGVuZC1zcGxhc2guY29tcG9uZW50JztcbmltcG9ydCAnLi4vbWljcm9mcm9udGVuZC1wbGF0Zm9ybS5jb25maWcnO1xuaW1wb3J0IHtHTEFTU19QQU5FX0JMT0NLQUJMRSwgR2xhc3NQYW5lRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9nbGFzcy1wYW5lL2dsYXNzLXBhbmUuZGlyZWN0aXZlJztcblxuLyoqXG4gKiBFbWJlZHMgdGhlIG1pY3JvZnJvbnRlbmQgb2YgYSB2aWV3IGNhcGFiaWxpdHkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3diLW1pY3JvZnJvbnRlbmQtdmlldycsXG4gIHN0eWxlVXJsczogWycuL21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIENvbnRlbnRBc092ZXJsYXlDb21wb25lbnQsXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gICAgR2xhc3NQYW5lRGlyZWN0aXZlLFxuICBdLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgY29uZmlndXJlTWljcm9mcm9udGVuZEdsYXNzUGFuZSgpLFxuICBdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sIC8vIHJlcXVpcmVkIGJlY2F1c2UgPHNjaS1yb3V0ZXItb3V0bGV0PiBpcyBhIGN1c3RvbSBlbGVtZW50XG59KVxuZXhwb3J0IGNsYXNzIE1pY3JvZnJvbnRlbmRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFdvcmtiZW5jaFZpZXdQcmVEZXN0cm95IHtcblxuICBwcml2YXRlIF91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfdW5pdmVyc2FsS2V5c3Ryb2tlcyA9IFtcbiAgICAna2V5ZG93bi5lc2NhcGUnLCAvLyBhbGxvd3MgY2xvc2luZyBub3RpZmljYXRpb25zXG4gIF07XG5cbiAgcHVibGljIHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BsYXNoIHRvIGRpc3BsYXkgdW50aWwgdGhlIG1pY3JvZnJvbnRlbmQgc2lnbmFscyByZWFkaW5lc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3BsYXNoOiBDb21wb25lbnRUeXBlPHVua25vd24+O1xuXG4gIEBWaWV3Q2hpbGQoJ3JvdXRlcl9vdXRsZXQnLCB7c3RhdGljOiB0cnVlfSlcbiAgcHVibGljIHJvdXRlck91dGxldEVsZW1lbnQhOiBFbGVtZW50UmVmPFNjaVJvdXRlck91dGxldEVsZW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBLZXlzdHJva2VzIHdoaWNoIHRvIGJ1YmJsZSBhY3Jvc3MgaWZyYW1lIGJvdW5kYXJpZXMgb2YgZW1iZWRkZWQgY29udGVudC5cbiAgICovXG4gIHB1YmxpYyBrZXlzdHJva2VzVG9CdWJibGUkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYSB3b3JrYmVuY2ggZHJhZyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHN1Y2ggYXMgd2hlbiBkcmFnZ2luZyBhIHZpZXcgb3IgbW92aW5nIGEgc2FzaC5cbiAgICovXG4gIHB1YmxpYyBpc1dvcmtiZW5jaERyYWcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9ob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9vdXRsZXRSb3V0ZXI6IE91dGxldFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21lc3NhZ2VDbGllbnQ6IE1lc3NhZ2VDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Rlc3Ryb3lSZWY6IERlc3Ryb3lSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvZ2dlcjogTG9nZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGV4dE1lbnVTZXJ2aWNlOiBWaWV3TWVudVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3dvcmtiZW5jaExheW91dFNlcnZpY2U6IFdvcmtiZW5jaExheW91dFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3dvcmtiZW5jaFJvdXRlcjogV29ya2JlbmNoUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hTZXJ2aWNlOiBXb3JrYmVuY2hTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHB1YmxpYyB2aWV3OiDJtVdvcmtiZW5jaFZpZXcsXG4gICAgICAgICAgICAgIEBJbmplY3QoSUZSQU1FX0hPU1QpIHByb3RlY3RlZCBpZnJhbWVIb3N0UmVmOiBWaWV3Q29udGFpbmVyUmVmZXJlbmNlKSB7XG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBDb25zdHJ1Y3RpbmcgTWljcm9mcm9udGVuZFZpZXdDb21wb25lbnQuIFt2aWV3SWQ9JHt0aGlzLnZpZXcuaWR9XWAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORyk7XG4gICAgdGhpcy5rZXlzdHJva2VzVG9CdWJibGUkID0gY29tYmluZUxhdGVzdChbdGhpcy52aWV3Q29udGV4dE1lbnVLZXlzdHJva2VzJCgpLCBvZih0aGlzLl91bml2ZXJzYWxLZXlzdHJva2VzKV0pXG4gICAgICAucGlwZShtYXAoa2V5c3Ryb2tlcyA9PiBuZXcgQXJyYXk8c3RyaW5nPigpLmNvbmNhdCguLi5rZXlzdHJva2VzKSkpO1xuICAgIHRoaXMuaW5zdGFsbFdvcmtiZW5jaERyYWdEZXRlY3RvcigpO1xuICAgIHRoaXMuc3BsYXNoID0gaW5qZWN0KE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZykuc3BsYXNoID8/IE1pY3JvZnJvbnRlbmRTcGxhc2hDb21wb25lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQ29uc3RydWN0IHRoZSB2aWV3IGNvbnRleHQsIGFsbG93aW5nIGVtYmVkZGVkIGNvbnRlbnQgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIHZpZXcuXG4gICAgdGhpcy5yb3V0ZXJPdXRsZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2V0Q29udGV4dFZhbHVlKMm1VklFV19JRF9DT05URVhUX0tFWSwgdGhpcy52aWV3LmlkKTtcblxuICAgIC8vIFNpbmNlIHRoZSBpZnJhbWUgaXMgYWRkZWQgYXQgYSB0b3AtbGV2ZWwgbG9jYXRpb24gaW4gdGhlIERPTSwgdGhhdCBpcywgbm90IGFzIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzIGNvbXBvbmVudCxcbiAgICAvLyB0aGUgd29ya2JlbmNoIHZpZXcgbWlzc2VzIGtleWJvYXJkIGV2ZW50cyBmcm9tIGVtYmVkZGVkIGNvbnRlbnQuIEFzIGEgcmVzdWx0LCBtZW51IGl0ZW0gYWNjZWxlcmF0b3JzIG9mIHRoZSBjb250ZXh0XG4gICAgLy8gbWVudSBvZiB0aGlzIHZpZXcgZG8gbm90IHdvcmssIHNvIHdlIGluc3RhbGwgdGhlIGFjY2VsZXJhdG9ycyBvbiB0aGUgcm91dGVyIG91dGxldCBhcyB3ZWxsLlxuICAgIHRoaXMuX3ZpZXdDb250ZXh0TWVudVNlcnZpY2UuaW5zdGFsbE1lbnVJdGVtQWNjZWxlcmF0b3JzJCh0aGlzLnJvdXRlck91dGxldEVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy52aWV3KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fcm91dGUucGFyYW1zLCB0aGlzLl9yb3V0ZS5kYXRhXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCwgYXNhcFNjaGVkdWxlciksIC8vIHdhaXQgdW50aWwgdGhlIEFuZ3VsYXIgcm91dGVyIGNvbXBsZXRlZCB1cGRhdGluZyB0aGUgcm91dGUsIHNpbWlsYXIgdG8gYG5nT25DaGFuZ2VzYCBpbiBhIGNvbXBvbmVudCB0byB3YWl0IGZvciBhbGwgaW5wdXQgcHJvcGVydGllcyB0byBiZSBzZXRcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuX3JvdXRlLnNuYXBzaG90KSxcbiAgICAgICAgbWFwVG9NaWNyb2Zyb250ZW5kUm91dGVTbmFwc2hvdCgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkISBhcyBBY3RpdmF0ZWRNaWNyb2Zyb250ZW5kUm91dGVTbmFwc2hvdCksIC8vIGluaXRpYWxpemUgJ3BhaXJ3aXNlJyBvcGVyYXRvclxuICAgICAgICBwYWlyd2lzZSgpLFxuICAgICAgICBzZXJpYWxpemVFeGVjdXRpb24oKFtwcmV2LCBjdXJyXSkgPT4gdGhpcy5vbk5hdmlnYXRlKHByZXYsIGN1cnIpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IsIGNhdWdodCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcigoKSA9PiAnW01pY3JvZnJvbnRlbmRMb2FkRXJyb3JdIEFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuJywgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HLCBlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIGNhdWdodDsgLy8gcmUtc3Vic2NyaWJlIHRvIHRoZSBwYXJhbXMgT2JzZXJ2YWJsZVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5pbnN0YWxsVGhlbWVQcm9wYWdhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uTmF2aWdhdGUocHJldlJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZE1pY3JvZnJvbnRlbmRSb3V0ZVNuYXBzaG90IHwgdW5kZWZpbmVkLCBjdXJyUm91dGVTbmFwc2hvdDogQWN0aXZhdGVkTWljcm9mcm9udGVuZFJvdXRlU25hcHNob3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmV2Vmlld0NhcGFiaWxpdHkgPSBwcmV2Um91dGVTbmFwc2hvdD8udmlld0NhcGFiaWxpdHk7XG4gICAgY29uc3Qge3ZpZXdDYXBhYmlsaXR5LCBwYXJhbXMsIGFjdGl2YXRlZFJvdXRlfSA9IGN1cnJSb3V0ZVNuYXBzaG90O1xuXG4gICAgaWYgKCF2aWV3Q2FwYWJpbGl0eSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oKCkgPT4gYFtOdWxsVmlld0Vycm9yXSBObyBhcHBsaWNhdGlvbiBmb3VuZCB0byBwcm92aWRlIGEgdmlldyBvZiBpZCAnJHtwYXJhbXNbybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSURdfScuIE1heWJlLCB0aGUgcmVxdWVzdGVkIHZpZXcgaXMgbm90IHB1YmxpYyBBUEkgb3IgdGhlIHByb3ZpZGluZyBhcHBsaWNhdGlvbiBub3QgYXZhaWxhYmxlLmAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORyk7XG4gICAgICBhd2FpdCB0aGlzLnZpZXcuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IHRoaXMubG9va3VwQXBwbGljYXRpb24odmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSk7XG4gICAgaWYgKCFhcHBsaWNhdGlvbikge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCgpID0+IGBbTnVsbEFwcGxpY2F0aW9uRXJyb3JdIFVuZXhwZWN0ZWQuIENhbm5vdCByZXNvbHZlIGFwcGxpY2F0aW9uICcke3ZpZXdDYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWV9Jy5gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcsIHZpZXdDYXBhYmlsaXR5KTtcbiAgICAgIGF3YWl0IHRoaXMudmlldy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG5hdmlnYXRpbmcgdG8gYSBuZXcgbWljcm9mcm9udGVuZC5cbiAgICBpZiAoIXByZXZWaWV3Q2FwYWJpbGl0eSB8fCBwcmV2Vmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpIHtcbiAgICAgIHRoaXMudmlld0NhcGFiaWxpdHkgPSB2aWV3Q2FwYWJpbGl0eTtcbiAgICAgIHRoaXMuc2V0Vmlld1Byb3BlcnRpZXModmlld0NhcGFiaWxpdHksIGFjdGl2YXRlZFJvdXRlLCBwYXJhbXMpO1xuICAgICAgdGhpcy5pbnN0YWxsUGFyYW1zVXBkYXRlcih2aWV3Q2FwYWJpbGl0eSk7XG4gICAgfVxuXG4gICAgLy8gU2lnbmFsIHRoYXQgdGhlIGN1cnJlbnRseSBsb2FkZWQgbWljcm9mcm9udGVuZCwgaWYgYW55LCBpcyBhYm91dCB0byBiZSByZXBsYWNlZCBieSBhIG1pY3JvZnJvbnRlbmQgb2YgYW5vdGhlciBhcHBsaWNhdGlvbi5cbiAgICBpZiAocHJldlZpZXdDYXBhYmlsaXR5ICYmIHByZXZWaWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lICE9PSB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3VW5sb2FkaW5nVG9waWModGhpcy52aWV3LmlkKSk7XG4gICAgfVxuXG4gICAgLy8gUHJvdmlkZSByb3V0ZSBwYXJhbWV0ZXJzIGluY2x1ZGluZyBtYXRyaXggcGFyYW1ldGVycyBhbmQgcXVhbGlmaWVycyB0byB0aGUgbWljcm9mcm9udGVuZC5cbiAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSwgTWFwcy5jb2VyY2UocGFyYW1zKSwge3JldGFpbjogdHJ1ZX0pO1xuXG4gICAgLy8gV2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgdmlldyBjYXBhYmlsaXR5IG9mIHRoZSBzYW1lIGFwcCwgd2FpdCB1bnRpbCB0cmFuc3BvcnRlZCB0aGUgcGFyYW1zIHRvIGNvbnN1bWVycyBiZWZvcmUgbG9hZGluZyB0aGVcbiAgICAvLyBuZXcgbWljcm9mcm9udGVuZCBpbnRvIHRoZSBpZnJhbWUsIGFsbG93aW5nIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1pY3JvZnJvbnRlbmQgdG8gY2xlYW51cCBzdWJzY3JpcHRpb25zLiBQYXJhbXMgaW5jbHVkZSB0aGVcbiAgICAvLyBjYXBhYmlsaXR5IGlkLlxuICAgIGlmIChwcmV2Vmlld0NhcGFiaWxpdHlcbiAgICAgICYmIHByZXZWaWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lID09PSB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lXG4gICAgICAmJiBwcmV2Vmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmlkICE9PSB2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpIHtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckNhcGFiaWxpdHlQYXJhbSh2aWV3Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpO1xuICAgIH1cblxuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBtaWNyb2Zyb250ZW5kLlxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygoKSA9PiBgTG9hZGluZyBtaWNyb2Zyb250ZW5kIGludG8gd29ya2JlbmNoIHZpZXcgW3ZpZXdJZD0ke3RoaXMudmlldy5pZH0sIGFwcD0ke3ZpZXdDYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWV9LCBiYXNlVXJsPSR7YXBwbGljYXRpb24uYmFzZVVybH0sIHBhdGg9JHsodmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5wYXRoKX1dLmAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORywgcGFyYW1zLCB2aWV3Q2FwYWJpbGl0eSk7XG4gICAgYXdhaXQgdGhpcy5fb3V0bGV0Um91dGVyLm5hdmlnYXRlKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aCwge1xuICAgICAgb3V0bGV0OiB0aGlzLnZpZXcuaWQsXG4gICAgICByZWxhdGl2ZVRvOiBhcHBsaWNhdGlvbi5iYXNlVXJsLFxuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwdXNoU3RhdGVUb1Nlc3Npb25IaXN0b3J5U3RhY2s6IGZhbHNlLFxuICAgICAgc2hvd1NwbGFzaDogdmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5zaG93U3BsYXNoLFxuICAgICAgybVjYXBhYmlsaXR5SWQ6IHZpZXdDYXBhYmlsaXR5Lm1ldGFkYXRhIS5pZCxcbiAgICB9KTtcblxuICAgIC8vIEluYWN0aXZlIHZpZXdzIGFyZSBkZXRhY2hlZCBmcm9tIHRoZSBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gdHJlZS5cbiAgICAvLyBUaGVyZWZvcmUsIG1hbnVhbGx5IGRldGVjdCB0aGlzIGNvbXBvbmVudCBmb3IgY2hhbmdlcyBmb3IgdXBkYXRpbmcgYXR0cmlidXRlcyBvbiB0aGUgYHNjaS1yb3V0ZXItb3V0bGV0YC5cbiAgICBpZiAoIXRoaXMudmlldy5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byByZXF1ZXN0cyBmcm9tIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1pY3JvZnJvbnRlbmQgdG8gdXBkYXRlIGl0cyBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsUGFyYW1zVXBkYXRlcih2aWV3Q2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkpOiB2b2lkIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkLm5leHQoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9ic2VydmUkPMm1Vmlld1BhcmFtc1VwZGF0ZUNvbW1hbmQ+KMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1VwZGF0ZVRvcGljKHRoaXMudmlldy5pZCwgdmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmlkKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAocmVxdWVzdDogVG9waWNNZXNzYWdlPMm1Vmlld1BhcmFtc1VwZGF0ZUNvbW1hbmQ+KSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcnhqcy9uby1hc3luYy1zdWJzY3JpYmVcbiAgICAgICAgLy8gV2UgRE8gTk9UIG5hdmlnYXRlIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FzIGNsb3NlZCwgZS5nLiwgYmVjYXVzZSBjbG9zZWQgdGhlIHZpZXcgb3IgbmF2aWdhdGVkIHRvIGFub3RoZXIgY2FwYWJpbGl0eS5cbiAgICAgICAgY29uc3QgcmVwbHlUbyA9IHJlcXVlc3QuaGVhZGVycy5nZXQoTWVzc2FnZUhlYWRlcnMuUmVwbHlUbyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5fd29ya2JlbmNoUm91dGVyLsm1bmF2aWdhdGUobGF5b3V0ID0+IHtcbiAgICAgICAgICAgIC8vIENhbmNlbCBwZW5kaW5nIG5hdmlnYXRpb24gaWYgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY2xvc2VkLCBlLmcuLCBiZWNhdXNlIGNsb3NlZCB0aGUgdmlldyBvciBuYXZpZ2F0ZWQgdG8gYW5vdGhlciBjYXBhYmlsaXR5XG4gICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3VycmVudE1pY3JvZnJvbnRlbmRQYXJhbXMgPSBNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5wYXJzZVBhcmFtcyh0aGlzLl9yb3V0ZS5zbmFwc2hvdCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gey4uLmN1cnJlbnRNaWNyb2Zyb250ZW5kUGFyYW1zLnVybFBhcmFtcywgLi4uY3VycmVudE1pY3JvZnJvbnRlbmRQYXJhbXMudHJhbnNpZW50UGFyYW1zfTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW1zVXBkYXRlQ29tbWFuZDogybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZCA9IHJlcXVlc3QuYm9keSE7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXJhbXMgPSBEaWN0aW9uYXJpZXMuY29lcmNlKHBhcmFtc1VwZGF0ZUNvbW1hbmQucGFyYW1zKTsgLy8gY29lcmNlIHBhcmFtcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkUGFyYW1zID0gRGljdGlvbmFyaWVzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHBhcmFtc1VwZGF0ZUNvbW1hbmQucGFyYW1zSGFuZGxpbmcgPT09ICdtZXJnZScgPyB7Li4uY3VycmVudFBhcmFtcywgLi4ubmV3UGFyYW1zfSA6IG5ld1BhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCB7dXJsUGFyYW1zLCB0cmFuc2llbnRQYXJhbXN9ID0gTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuc3BsaXRQYXJhbXMobWVyZ2VkUGFyYW1zLCB2aWV3Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGxheW91dCxcbiAgICAgICAgICAgICAgdmlld091dGxldHM6IHtbdGhpcy52aWV3LmlkXTogW3VybFBhcmFtc119LFxuICAgICAgICAgICAgICB2aWV3U3RhdGVzOiB7W3RoaXMudmlldy5pZF06IHtbTWljcm9mcm9udGVuZE5hdmlnYXRpb25hbFN0YXRlcy50cmFuc2llbnRQYXJhbXNdOiB0cmFuc2llbnRQYXJhbXN9fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSwge3JlbGF0aXZlVG86IHRoaXMuX3JvdXRlfSk7XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2gocmVwbHlUbywgc3VjY2Vzcywge2hlYWRlcnM6IG5ldyBNYXAoKS5zZXQoTWVzc2FnZUhlYWRlcnMuU3RhdHVzLCBSZXNwb25zZVN0YXR1c0NvZGVzLlRFUk1JTkFMKX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaChyZXBseVRvLCBzdHJpbmdpZnlFcnJvcihlcnJvciksIHtoZWFkZXJzOiBuZXcgTWFwKCkuc2V0KE1lc3NhZ2VIZWFkZXJzLlN0YXR1cywgUmVzcG9uc2VTdGF0dXNDb2Rlcy5FUlJPUil9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiB0aGlzIHZpZXcsIHN1Y2ggYXMgdGhlIHZpZXcgdGl0bGUsIGFzIGRlZmluZWQgYnkgdGhlIGNhcGFiaWxpdHkuXG4gICAqL1xuICBwcml2YXRlIHNldFZpZXdQcm9wZXJ0aWVzKHZpZXdDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSwgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy52aWV3LnRpdGxlID0gc3Vic3RpdHV0ZU5hbWVkUGFyYW1ldGVycyh2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnRpdGxlLCBwYXJhbXMpID8/IG51bGw7XG4gICAgdGhpcy52aWV3LmhlYWRpbmcgPSBzdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuaGVhZGluZywgcGFyYW1zKSA/PyBudWxsO1xuICAgIHRoaXMudmlldy5jc3NDbGFzcyA9IG5ldyBBcnJheTxzdHJpbmc+KClcbiAgICAgIC5jb25jYXQoQXJyYXlzLmNvZXJjZSh2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmNzc0NsYXNzKSlcbiAgICAgIC5jb25jYXQoQXJyYXlzLmNvZXJjZShhY3RpdmF0ZWRSb3V0ZS5kYXRhW1dvcmtiZW5jaFJvdXRlRGF0YS5zdGF0ZV0/LltXb3JrYmVuY2hOYXZpZ2F0aW9uYWxWaWV3U3RhdGVzLmNzc0NsYXNzXSkpO1xuICAgIHRoaXMudmlldy5jbG9zYWJsZSA9IHZpZXdDYXBhYmlsaXR5LnByb3BlcnRpZXMuY2xvc2FibGUgPz8gdHJ1ZTtcbiAgICB0aGlzLnZpZXcuZGlydHkgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCB0aGUgYXBwbGljYXRpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUgZ2l2ZW4gc3ltYm9saWMgbmFtZS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwcml2YXRlIGxvb2t1cEFwcGxpY2F0aW9uKHN5bWJvbGljTmFtZTogc3RyaW5nKTogQXBwbGljYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFNlcnZpY2UuYXBwbGljYXRpb25zLmZpbmQoYXBwID0+IGFwcC5zeW1ib2xpY05hbWUgPT09IHN5bWJvbGljTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgcGFyYW1zIGNvbnRhaW4gdGhlIGdpdmVuIGNhcGFiaWxpdHkgaWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JDYXBhYmlsaXR5UGFyYW0odmlld0NhcGFiaWxpdHlJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgdmlld1BhcmFtcyQgPSB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9ic2VydmUkPE1hcDxzdHJpbmcsIHN0cmluZz4+KMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwVG9Cb2R5KCksXG4gICAgICAgIGZpcnN0KHBhcmFtcyA9PiBwYXJhbXMuZ2V0KMm1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEKSA9PT0gdmlld0NhcGFiaWxpdHlJZCksXG4gICAgICApO1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZpZXdQYXJhbXMkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgaW52b2tlZCBqdXN0IGJlZm9yZSBjbG9zaW5nIHRoaXMgdmlldy5cbiAgICpcbiAgICogSWYgdGhlIGVtYmVkZGVkIG1pY3JvZnJvbnRlbmQgaGFzIGEgbGlzdGVuZXIgaW5zdGFsbGVkIHRvIGJlIG5vdGlmaWVkIHdoZW4gY2xvc2luZyB0aGlzIHZpZXcsXG4gICAqIGluaXRpYXRlcyBhIHJlcXVlc3QtcmVwbHkgY29tbXVuaWNhdGlvbiwgYWxsb3dpbmcgdGhlIG1pY3JvZnJvbnRlbmQgdG8gcHJldmVudCB0aGlzIHZpZXcgZnJvbSBjbG9zaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG9uV29ya2JlbmNoVmlld1ByZURlc3Ryb3koKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2xvc2luZ1RvcGljID0gybVXb3JrYmVuY2hDb21tYW5kcy52aWV3Q2xvc2luZ1RvcGljKHRoaXMudmlldy5pZCk7XG5cbiAgICAvLyBBbGxvdyB0aGUgbWljcm9mcm9udGVuZCB0byBwcmV2ZW50IHRoaXMgdmlldyBmcm9tIGNsb3NpbmcuXG4gICAgY29uc3QgY291bnQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9tZXNzYWdlQ2xpZW50LnN1YnNjcmliZXJDb3VudCQoY2xvc2luZ1RvcGljKSk7XG4gICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2l0ID0gdGhpcy5fbWVzc2FnZUNsaWVudC5yZXF1ZXN0JDxib29sZWFuPihjbG9zaW5nVG9waWMpLnBpcGUobWFwVG9Cb2R5KCksIGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpKTtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oZG9pdCwge2RlZmF1bHRWYWx1ZTogdHJ1ZX0pO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXNXaXRoaW4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qge2RldGFpbDogZm9jdXNXaXRoaW59ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8Ym9vbGVhbj47XG4gICAgaWYgKGZvY3VzV2l0aGluKSB7XG4gICAgICB0aGlzLl9ob3N0Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3NjaS1taWNyb2Zyb250ZW5kLWZvY3VzaW4nLCB7YnViYmxlczogdHJ1ZX0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBvbiBzdWJzY3JpcHRpb24sIGVtaXRzIHRoZSBrZXlzdHJva2VzIHJlZ2lzdGVyZWQgd2l0aCBtZW51IGl0ZW1zIG9mIHRoaXMgdmlldydzIGNvbnRleHQgbWVudSxcbiAgICogYW5kIHRoZW4gY29udGludW91c2x5IHdoZW4gdGhleSBjaGFuZ2UuIFRoZSBvYnNlcnZhYmxlIG5ldmVyIGNvbXBsZXRlcy5cbiAgICovXG4gIHByaXZhdGUgdmlld0NvbnRleHRNZW51S2V5c3Ryb2tlcyQoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnZpZXcubWVudUl0ZW1zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlckFycmF5KG1lbnVJdGVtID0+ICEhbWVudUl0ZW0uYWNjZWxlcmF0b3IpLFxuICAgICAgICBtYXBBcnJheShtZW51SXRlbSA9PiBtZW51SXRlbS5hY2NlbGVyYXRvciEubWFwKGFjY2VsZXJhdG9yID0+IHtcbiAgICAgICAgICAvLyBOb3JtYWxpemUga2V5c3Ryb2tlcyBhY2NvcmRpbmcgdG8gYFNjaVJvdXRlck91dGxldEVsZW1lbnQja2V5c3Ryb2tlc2BcbiAgICAgICAgICBzd2l0Y2ggKGFjY2VsZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlICdjdHJsJzpcbiAgICAgICAgICAgICAgcmV0dXJuICdjb250cm9sJztcbiAgICAgICAgICAgIGNhc2UgJy4nOlxuICAgICAgICAgICAgICByZXR1cm4gJ2RvdCc7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgcmV0dXJuICdzcGFjZSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gYWNjZWxlcmF0b3I7XG4gICAgICAgICAgfVxuICAgICAgICB9KSksXG4gICAgICAgIG1hcEFycmF5KGFjY2VsZXJhdG9yID0+IFsna2V5ZG93biddLmNvbmNhdChhY2NlbGVyYXRvcikuam9pbignLicpKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUge0BsaW5rIGlzV29ya2JlbmNoRHJhZ30gcHJvcGVydHkgd2hlbiBhIHdvcmtiZW5jaCBkcmFnIG9wZXJhdGlvbiBpcyBkZXRlY3RlZCxcbiAgICogc3VjaCBhcyB3aGVuIGRyYWdnaW5nIGEgdmlldyBvciBtb3ZpbmcgYSBzYXNoLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsV29ya2JlbmNoRHJhZ0RldGVjdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuX3dvcmtiZW5jaExheW91dFNlcnZpY2UuZHJhZ2dpbmckXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLmlzV29ya2JlbmNoRHJhZyA9IChldmVudCA9PT0gJ3N0YXJ0Jyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9wYWdhdGVzIHRoZSBjdXJyZW50IHRoZW1lIGFuZCBjb2xvciBzY2hlbWUgdG8gZW1iZWRkZWQgY29udGVudC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFRoZW1lUHJvcGFnYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLl93b3JrYmVuY2hTZXJ2aWNlLnRoZW1lJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh0aGVtZSA9PiB7XG4gICAgICAgIGlmICh0aGVtZSkge1xuICAgICAgICAgIHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldENvbnRleHRWYWx1ZTxXb3JrYmVuY2hUaGVtZT4oybVUSEVNRV9DT05URVhUX0tFWSwgdGhlbWUpO1xuICAgICAgICAgIHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldENvbnRleHRWYWx1ZSgnY29sb3Itc2NoZW1lJywgdGhlbWUuY29sb3JTY2hlbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUNvbnRleHRWYWx1ZSjJtVRIRU1FX0NPTlRFWFRfS0VZKTtcbiAgICAgICAgICB0aGlzLnJvdXRlck91dGxldEVsZW1lbnQubmF0aXZlRWxlbWVudC5yZW1vdmVDb250ZXh0VmFsdWUoJ2NvbG9yLXNjaGVtZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBJbnN0cnVjdCB0aGUgbWVzc2FnZSBicm9rZXIgdG8gZGVsZXRlIHJldGFpbmVkIG1lc3NhZ2VzIHRvIGZyZWUgcmVzb3VyY2VzLlxuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdBY3RpdmVUb3BpYyh0aGlzLnZpZXcuaWQpLCB1bmRlZmluZWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCksIHVuZGVmaW5lZCwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICB0aGlzLl9vdXRsZXRSb3V0ZXIubmF2aWdhdGUobnVsbCwge291dGxldDogdGhpcy52aWV3LmlkfSkudGhlbigpO1xuICB9XG59XG5cbi8qKlxuICogTWFwcyB0aGUgcGFzc2VkIHtAbGluayBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90fSB0byBhIHtAbGluayBBY3RpdmF0ZWRNaWNyb2Zyb250ZW5kUm91dGVTbmFwc2hvdH0gd2l0aCByZXNvbHZlZCBwYXJhbXMgYW5kIGNhcGFiaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvTWljcm9mcm9udGVuZFJvdXRlU25hcHNob3QoKTogT3BlcmF0b3JGdW5jdGlvbjxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBBY3RpdmF0ZWRNaWNyb2Zyb250ZW5kUm91dGVTbmFwc2hvdD4ge1xuICByZXR1cm4gc3dpdGNoTWFwKChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IE9ic2VydmFibGU8QWN0aXZhdGVkTWljcm9mcm9udGVuZFJvdXRlU25hcHNob3Q+ID0+IHtcbiAgICBjb25zdCB7dmlld0NhcGFiaWxpdHlJZCwgdXJsUGFyYW1zLCB0cmFuc2llbnRQYXJhbXMsIHF1YWxpZmllcn0gPSBNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5wYXJzZVBhcmFtcyhhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmV0dXJuIEJlYW5zLmdldChNYW5pZmVzdFNlcnZpY2UpLmxvb2t1cENhcGFiaWxpdGllcyQ8V29ya2JlbmNoVmlld0NhcGFiaWxpdHk+KHtpZDogdmlld0NhcGFiaWxpdHlJZH0pLnBpcGUobWFwKGNhcGFiaWxpdGllcyA9PiAoe1xuICAgICAgYWN0aXZhdGVkUm91dGUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgLi4udXJsUGFyYW1zLFxuICAgICAgICAuLi50cmFuc2llbnRQYXJhbXMsXG4gICAgICAgIC4uLnF1YWxpZmllciwgLy8gcXVhbGlmaWVyIGVudHJpZXMgaGF2ZSBhIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gcGFyYW1ldGVyc1xuICAgICAgICBbybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMuybVWSUVXX0NBUEFCSUxJVFlfSURdOiB2aWV3Q2FwYWJpbGl0eUlkLCAvLyBjYXBhYmlsaXR5IElEIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5cbiAgICAgIH0sXG4gICAgICB2aWV3Q2FwYWJpbGl0eTogY2FwYWJpbGl0aWVzWzBdLFxuICAgIH0pKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIG1pY3JvZnJvbnRlbmQgcm91dGUgYXQgYSBwYXJ0aWN1bGFyIG1vbWVudCBpbiB0aW1lLlxuICovXG5pbnRlcmZhY2UgQWN0aXZhdGVkTWljcm9mcm9udGVuZFJvdXRlU25hcHNob3Qge1xuICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgcGFyYW1zOiBQYXJhbXM7XG4gIHZpZXdDYXBhYmlsaXR5PzogV29ya2JlbmNoVmlld0NhcGFiaWxpdHk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgbmFtZWQgcGFyYW1ldGVycyB3aXRoIHZhbHVlcyBvZiB0aGUgY29udGFpbmVkIHtAbGluayBQYXJhbXN9LlxuICovXG5mdW5jdGlvbiBzdWJzdGl0dXRlTmFtZWRQYXJhbWV0ZXJzKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJhbXM6IFBhcmFtcyk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gdmFsdWU/LnJlcGxhY2UoLzooXFx3KykvZywgKG1hdGNoLCBwYXJhbU5hbWUpID0+IHBhcmFtc1twYXJhbU5hbWVdID8/IG1hdGNoKSB8fCBudWxsO1xufVxuXG4vKipcbiAqIEJsb2NrcyB0aGUgbWljcm9mcm9udGVuZCBvdXRsZXQgd2hlbiBkaWFsb2cocykgb3ZlcmxheSB0aGlzIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZU1pY3JvZnJvbnRlbmRHbGFzc1BhbmUoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEdMQVNTX1BBTkVfQkxPQ0tBQkxFLFxuICAgIHVzZUV4aXN0aW5nOiDJtVdvcmtiZW5jaFZpZXcsXG4gIH07XG59XG4iLCI8d2ItY29udGVudC1hcy1vdmVybGF5IFtvdmVybGF5SG9zdF09XCJpZnJhbWVIb3N0UmVmLnJlZiQgfCBhc3luY1wiPlxuICA8ZGl2IGNsYXNzPVwibWljcm9mcm9udGVuZC12aWV3XCJcbiAgICAgICBbY2xhc3Mud29ya2JlbmNoLWRyYWddPVwiaXNXb3JrYmVuY2hEcmFnXCJcbiAgICAgICBbYXR0ci5kYXRhLXZpZXdpZF09XCJ2aWV3LmlkXCJcbiAgICAgICB3YkdsYXNzUGFuZT5cbiAgICA8c2NpLXJvdXRlci1vdXRsZXQgI3JvdXRlcl9vdXRsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwidmlldy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2FwYWJpbGl0eWlkXT1cInZpZXdDYXBhYmlsaXR5Py5tZXRhZGF0YSEuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWFwcF09XCJ2aWV3Q2FwYWJpbGl0eT8ubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXcuY3NzQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIChmb2N1c3dpdGhpbik9XCJvbkZvY3VzV2l0aGluKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICBba2V5c3Ryb2tlc109XCJrZXlzdHJva2VzVG9CdWJibGUkIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwic3BsYXNoXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zY2ktcm91dGVyLW91dGxldD5cbiAgPC9kaXY+XG48L3diLWNvbnRlbnQtYXMtb3ZlcmxheT5cbiJdfQ==
|
|
282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9taWNyb2Zyb250ZW5kLXBsYXRmb3JtL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQW9CLFNBQVMsRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxFQUFFLE1BQU0sRUFBeUMscUJBQXFCLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXBNLE9BQU8sRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBa0IsU0FBUyxFQUFpQixjQUFjLEVBQUUsMkJBQTJCLEVBQWdCLG1CQUFtQixFQUF1QyxNQUFNLCtCQUErQixDQUFDO0FBQzlNLE9BQU8sRUFBMEIseUJBQXlCLEVBQUUsb0JBQW9CLEVBQTRCLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0osT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQVMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBQyxXQUFXLEVBQXlCLE1B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QUN6QixpQkFBaUIsb1BBQ2pCLGtCQUFrQiwrQ0FFTDtZQUNiLCtCQUErQixFQUFFO1NBQ2xDOzsyRkFHVSwwQkFBMEI7a0JBakJ0QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULHlCQUF5Qjt3QkFDekIsaUJBQWlCO3dCQUNqQixrQkFBa0I7cUJBQ25CLGlCQUNjO3dCQUNiLCtCQUErQixFQUFFO3FCQUNsQyxXQUNRLENBQUMsc0JBQXNCLENBQUM7OzBCQTBDcEIsTUFBTTsyQkFBQyxXQUFXO3lDQXpCeEIsbUJBQW1CO3NCQUR6QixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7O0FBeVA1Qzs7R0FFRztBQUNILFNBQVMsK0JBQStCO0lBQ3RDLE9BQU87UUFDTCxPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLFdBQVcsRUFBRSxjQUFjO0tBQzVCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIyIFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFByb3ZpZGVyLCBydW5JbkluamVjdGlvbkNvbnRleHQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3QsIG1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge01hbmlmZXN0U2VydmljZSwgbWFwVG9Cb2R5LCBNZXNzYWdlQ2xpZW50LCBNZXNzYWdlSGVhZGVycywgTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnLCBPdXRsZXRSb3V0ZXIsIFJlc3BvbnNlU3RhdHVzQ29kZXMsIFNjaVJvdXRlck91dGxldEVsZW1lbnQsIFRvcGljTWVzc2FnZX0gZnJvbSAnQHNjaW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0nO1xuaW1wb3J0IHtXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSwgybVNaWNyb2Zyb250ZW5kUm91dGVQYXJhbXMsIMm1VklFV19JRF9DT05URVhUX0tFWSwgybVWaWV3UGFyYW1zVXBkYXRlQ29tbWFuZCwgybVXb3JrYmVuY2hDb21tYW5kc30gZnJvbSAnQHNjaW9uL3dvcmtiZW5jaC1jbGllbnQnO1xuaW1wb3J0IHtEaWN0aW9uYXJpZXMsIE1hcHN9IGZyb20gJ0BzY2lvbi90b29sa2l0L3V0aWwnO1xuaW1wb3J0IHtMb2dnZXIsIExvZ2dlck5hbWVzfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7Q2FuQ2xvc2V9IGZyb20gJy4uLy4uL3dvcmtiZW5jaC5tb2RlbCc7XG5pbXBvcnQge0lGUkFNRV9IT1NULCBWaWV3Q29udGFpbmVyUmVmZXJlbmNlfSBmcm9tICcuLi8uLi9jb250ZW50LXByb2plY3Rpb24vdmlldy1jb250YWluZXIucmVmZXJlbmNlJztcbmltcG9ydCB7c2VyaWFsaXplRXhlY3V0aW9ufSBmcm9tICcuLi8uLi9jb21tb24vb3BlcmF0b3JzJztcbmltcG9ydCB7ybVXb3JrYmVuY2hWaWV3fSBmcm9tICcuLi8uLi92aWV3L8m1d29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtmaWx0ZXJBcnJheSwgbWFwQXJyYXl9IGZyb20gJ0BzY2lvbi90b29sa2l0L29wZXJhdG9ycyc7XG5pbXBvcnQge1ZpZXdNZW51U2VydmljZX0gZnJvbSAnLi4vLi4vcGFydC92aWV3LWNvbnRleHQtbWVudS92aWV3LW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1dvcmtiZW5jaFJvdXRlcn0gZnJvbSAnLi4vLi4vcm91dGluZy93b3JrYmVuY2gtcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtzdHJpbmdpZnlFcnJvcn0gZnJvbSAnLi4vLi4vY29tbW9uL3N0cmluZ2lmeS1lcnJvci51dGlsJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdSb3V0ZXN9IGZyb20gJy4uL3JvdXRpbmcvbWljcm9mcm9udGVuZC12aWV3LXJvdXRlcyc7XG5pbXBvcnQge0FzeW5jUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvbnRlbnRBc092ZXJsYXlDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbnRlbnQtcHJvamVjdGlvbi9jb250ZW50LWFzLW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1dvcmtiZW5jaExheW91dFNlcnZpY2V9IGZyb20gJy4uLy4uL2xheW91dC93b3JrYmVuY2gtbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFNwbGFzaENvbXBvbmVudH0gZnJvbSAnLi4vbWljcm9mcm9udGVuZC1zcGxhc2gvbWljcm9mcm9udGVuZC1zcGxhc2guY29tcG9uZW50JztcbmltcG9ydCB7R0xBU1NfUEFORV9CTE9DS0FCTEUsIEdsYXNzUGFuZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZ2xhc3MtcGFuZS9nbGFzcy1wYW5lLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3fSBmcm9tICcuL21pY3JvZnJvbnRlbmQtd29ya2JlbmNoLXZpZXcubW9kZWwnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kc30gZnJvbSAnLi4vY29tbW9uL21pY3JvZnJvbnRlbmQudXRpbCc7XG5pbXBvcnQge09iamVjdHN9IGZyb20gJy4uLy4uL2NvbW1vbi9vYmplY3RzLnV0aWwnO1xuXG4vKipcbiAqIEVtYmVkcyB0aGUgbWljcm9mcm9udGVuZCBvZiBhIHZpZXcgY2FwYWJpbGl0eS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2ItbWljcm9mcm9udGVuZC12aWV3JyxcbiAgc3R5bGVVcmxzOiBbJy4vbWljcm9mcm9udGVuZC12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9taWNyb2Zyb250ZW5kLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQ29udGVudEFzT3ZlcmxheUNvbXBvbmVudCxcbiAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBHbGFzc1BhbmVEaXJlY3RpdmUsXG4gIF0sXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICBjb25maWd1cmVNaWNyb2Zyb250ZW5kR2xhc3NQYW5lKCksXG4gIF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSwgLy8gcmVxdWlyZWQgYmVjYXVzZSA8c2NpLXJvdXRlci1vdXRsZXQ+IGlzIGEgY3VzdG9tIGVsZW1lbnRcbn0pXG5leHBvcnQgY2xhc3MgTWljcm9mcm9udGVuZFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ2FuQ2xvc2Uge1xuXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlUGFyYW1zVXBkYXRlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF91bml2ZXJzYWxLZXlzdHJva2VzID0gW1xuICAgICdrZXlkb3duLmVzY2FwZScsIC8vIGFsbG93cyBjbG9zaW5nIG5vdGlmaWNhdGlvbnNcbiAgXTtcblxuICBwcm90ZWN0ZWQgY2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNwbGFzaCB0byBkaXNwbGF5IHVudGlsIHRoZSBtaWNyb2Zyb250ZW5kIHNpZ25hbHMgcmVhZGluZXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNwbGFzaDogQ29tcG9uZW50VHlwZTx1bmtub3duPjtcblxuICBAVmlld0NoaWxkKCdyb3V0ZXJfb3V0bGV0Jywge3N0YXRpYzogdHJ1ZX0pXG4gIHB1YmxpYyByb3V0ZXJPdXRsZXRFbGVtZW50ITogRWxlbWVudFJlZjxTY2lSb3V0ZXJPdXRsZXRFbGVtZW50PjtcblxuICAvKipcbiAgICogS2V5c3Ryb2tlcyB3aGljaCB0byBidWJibGUgYWNyb3NzIGlmcmFtZSBib3VuZGFyaWVzIG9mIGVtYmVkZGVkIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMga2V5c3Ryb2tlc1RvQnViYmxlJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGEgd29ya2JlbmNoIGRyYWcgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLCBzdWNoIGFzIHdoZW4gZHJhZ2dpbmcgYSB2aWV3IG9yIG1vdmluZyBhIHNhc2guXG4gICAqL1xuICBwdWJsaWMgaXNXb3JrYmVuY2hEcmFnID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfb3V0bGV0Um91dGVyOiBPdXRsZXRSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21hbmlmZXN0U2VydmljZTogTWFuaWZlc3RTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tZXNzYWdlQ2xpZW50OiBNZXNzYWdlQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIF9kZXN0cm95UmVmOiBEZXN0cm95UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2dnZXI6IExvZ2dlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRleHRNZW51U2VydmljZTogVmlld01lbnVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlOiBXb3JrYmVuY2hMYXlvdXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF93b3JrYmVuY2hSb3V0ZXI6IFdvcmtiZW5jaFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHB1YmxpYyB2aWV3OiDJtVdvcmtiZW5jaFZpZXcsXG4gICAgICAgICAgICAgIEBJbmplY3QoSUZSQU1FX0hPU1QpIHByb3RlY3RlZCBpZnJhbWVIb3N0UmVmOiBWaWV3Q29udGFpbmVyUmVmZXJlbmNlKSB7XG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCgpID0+IGBDb25zdHJ1Y3RpbmcgTWljcm9mcm9udGVuZFZpZXdDb21wb25lbnQuIFt2aWV3SWQ9JHt0aGlzLnZpZXcuaWR9XWAsIExvZ2dlck5hbWVzLk1JQ1JPRlJPTlRFTkRfUk9VVElORyk7XG4gICAgdGhpcy5rZXlzdHJva2VzVG9CdWJibGUkID0gY29tYmluZUxhdGVzdChbdGhpcy52aWV3Q29udGV4dE1lbnVLZXlzdHJva2VzJCgpLCBvZih0aGlzLl91bml2ZXJzYWxLZXlzdHJva2VzKV0pXG4gICAgICAucGlwZShtYXAoa2V5c3Ryb2tlcyA9PiBuZXcgQXJyYXk8c3RyaW5nPigpLmNvbmNhdCguLi5rZXlzdHJva2VzKSkpO1xuICAgIHRoaXMuaW5zdGFsbFdvcmtiZW5jaERyYWdEZXRlY3RvcigpO1xuICAgIHRoaXMuc3BsYXNoID0gaW5qZWN0KE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZykuc3BsYXNoID8/IE1pY3JvZnJvbnRlbmRTcGxhc2hDb21wb25lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXJPdXRsZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2V0Q29udGV4dFZhbHVlKMm1VklFV19JRF9DT05URVhUX0tFWSwgdGhpcy52aWV3LmlkKTtcbiAgICB0aGlzLnByb3BhZ2F0ZVdvcmtiZW5jaFRoZW1lKCk7XG4gICAgdGhpcy5pbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKCk7XG4gICAgdGhpcy5pbnN0YWxsTmF2aWdhdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxOYXZpZ2F0b3IoKTogdm9pZCB7XG4gICAgdGhpcy5fcm91dGUucGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHBhcmFtcyA9PiB0aGlzLmZldGNoQ2FwYWJpbGl0eSQocGFyYW1zW8m1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEXSkucGlwZShtYXAoY2FwYWJpbGl0eSA9PiAoe2NhcGFiaWxpdHksIHBhcmFtc30pKSkpLFxuICAgICAgICBzZXJpYWxpemVFeGVjdXRpb24oKHtjYXBhYmlsaXR5LCBwYXJhbXN9KSA9PiB0aGlzLm9uTmF2aWdhdGUodGhpcy5jYXBhYmlsaXR5LCBjYXBhYmlsaXR5LCBwYXJhbXMpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbk5hdmlnYXRlKHByZXZDYXBhYmlsaXR5OiBXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IHVuZGVmaW5lZCwgY2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkgfCB1bmRlZmluZWQsIHBhcmFtczogUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFjYXBhYmlsaXR5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybigoKSA9PiBgW051bGxDYXBhYmlsaXR5RXJyb3JdIE5vIGFwcGxpY2F0aW9uIGZvdW5kIHRvIHByb3ZpZGUgYSB2aWV3IGNhcGFiaWxpdHkgb2YgaWQgJyR7cGFyYW1zW8m1TWljcm9mcm9udGVuZFJvdXRlUGFyYW1zLsm1VklFV19DQVBBQklMSVRZX0lEXX0nLiBNYXliZSwgdGhlIHJlcXVlc3RlZCB2aWV3IGlzIG5vdCBwdWJsaWMgQVBJIG9yIHRoZSBwcm92aWRpbmcgYXBwbGljYXRpb24gbm90IGF2YWlsYWJsZS5gLCBMb2dnZXJOYW1lcy5NSUNST0ZST05URU5EX1JPVVRJTkcpO1xuICAgICAgYXdhaXQgdGhpcy52aWV3LmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYXBhYmlsaXR5ID0gY2FwYWJpbGl0eTtcbiAgICB0aGlzLnZpZXcucmVnaXN0ZXJBZGFwdGVyKE1pY3JvZnJvbnRlbmRXb3JrYmVuY2hWaWV3LCBuZXcgTWljcm9mcm9udGVuZFdvcmtiZW5jaFZpZXcoY2FwYWJpbGl0eSwgcGFyYW1zKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYXZpZ2F0aW5nIHRvIGEgbmV3IG1pY3JvZnJvbnRlbmQuXG4gICAgaWYgKCFwcmV2Q2FwYWJpbGl0eSB8fCBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQgIT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmlkKSB7XG4gICAgICB0aGlzLnNldFZpZXdQcm9wZXJ0aWVzKGNhcGFiaWxpdHksIHBhcmFtcyk7XG4gICAgICB0aGlzLmluc3RhbGxQYXJhbXNVcGRhdGVyKGNhcGFiaWxpdHkpO1xuICAgIH1cblxuICAgIC8vIFNpZ25hbCB0aGUgY3VycmVudGx5IGxvYWRlZCBhcHBsaWNhdGlvbiB0byB1bmxvYWQuXG4gICAgaWYgKHByZXZDYXBhYmlsaXR5ICYmIHByZXZDYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUgIT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSkge1xuICAgICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1VubG9hZGluZ1RvcGljKHRoaXMudmlldy5pZCkpO1xuICAgIH1cblxuICAgIC8vIFBhc3MgcGFyYW1ldGVycyB0byB0aGUgbWljcm9mcm9udGVuZC5cbiAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2goybVXb3JrYmVuY2hDb21tYW5kcy52aWV3UGFyYW1zVG9waWModGhpcy52aWV3LmlkKSwgTWFwcy5jb2VyY2UocGFyYW1zKSwge3JldGFpbjogdHJ1ZX0pO1xuXG4gICAgLy8gV2hlbiBuYXZpZ2F0aW5nIHRvIGFub3RoZXIgdmlldyBjYXBhYmlsaXR5IG9mIHRoZSBzYW1lIGFwcCwgd2FpdCB1bnRpbCB0cmFuc3BvcnRlZCB0aGUgcGFyYW1zIHRvIHRoZSBtaWNyb2Zyb250ZW5kIGJlZm9yZSBsb2FkaW5nIHRoZVxuICAgIC8vIG5ldyBtaWNyb2Zyb250ZW5kIGludG8gdGhlIGlmcmFtZSwgYWxsb3dpbmcgdGhlIGN1cnJlbnRseSBsb2FkZWQgbWljcm9mcm9udGVuZCB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zLlxuICAgIGlmIChwcmV2Q2FwYWJpbGl0eVxuICAgICAgJiYgcHJldkNhcGFiaWxpdHkubWV0YWRhdGEhLmFwcFN5bWJvbGljTmFtZSA9PT0gY2FwYWJpbGl0eS5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lXG4gICAgICAmJiBwcmV2Q2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQgIT09IGNhcGFiaWxpdHkubWV0YWRhdGEhLmlkKSB7XG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JDYXBhYmlsaXR5UGFyYW0oY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQpO1xuICAgIH1cblxuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBtaWNyb2Zyb250ZW5kLlxuICAgIGNvbnN0IGFwcGxpY2F0aW9uID0gdGhpcy5fbWFuaWZlc3RTZXJ2aWNlLmFwcGxpY2F0aW9ucy5maW5kKGFwcCA9PiBhcHAuc3ltYm9saWNOYW1lID09PSBjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWUpITtcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoKCkgPT4gYExvYWRpbmcgbWljcm9mcm9udGVuZCBpbnRvIHdvcmtiZW5jaCB2aWV3IFt2aWV3SWQ9JHt0aGlzLnZpZXcuaWR9LCBhcHA9JHtjYXBhYmlsaXR5Lm1ldGFkYXRhIS5hcHBTeW1ib2xpY05hbWV9LCBiYXNlVXJsPSR7YXBwbGljYXRpb24uYmFzZVVybH0sIHBhdGg9JHsoY2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnBhdGgpfV0uYCwgTG9nZ2VyTmFtZXMuTUlDUk9GUk9OVEVORF9ST1VUSU5HLCBwYXJhbXMsIGNhcGFiaWxpdHkpO1xuICAgIGF3YWl0IHRoaXMuX291dGxldFJvdXRlci5uYXZpZ2F0ZShjYXBhYmlsaXR5LnByb3BlcnRpZXMucGF0aCwge1xuICAgICAgb3V0bGV0OiB0aGlzLnZpZXcuaWQsXG4gICAgICByZWxhdGl2ZVRvOiBhcHBsaWNhdGlvbi5iYXNlVXJsLFxuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwdXNoU3RhdGVUb1Nlc3Npb25IaXN0b3J5U3RhY2s6IGZhbHNlLFxuICAgICAgc2hvd1NwbGFzaDogY2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnNob3dTcGxhc2gsXG4gICAgICDJtWNhcGFiaWxpdHlJZDogY2FwYWJpbGl0eS5tZXRhZGF0YSEuaWQsXG4gICAgfSk7XG5cbiAgICAvLyBJbmFjdGl2ZSB2aWV3cyBhcmUgZGV0YWNoZWQgZnJvbSB0aGUgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIHRyZWUuXG4gICAgLy8gVGhlcmVmb3JlLCBtYW51YWxseSBkZXRlY3QgdGhpcyBjb21wb25lbnQgZm9yIGNoYW5nZXMgZm9yIHVwZGF0aW5nIGF0dHJpYnV0ZXMgb24gdGhlIGBzY2ktcm91dGVyLW91dGxldGAuXG4gICAgaWYgKCF0aGlzLnZpZXcuYWN0aXZlKSB7XG4gICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaENhcGFiaWxpdHkkKGNhcGFiaWxpdHlJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFNlcnZpY2UubG9va3VwQ2FwYWJpbGl0aWVzJDxXb3JrYmVuY2hWaWV3Q2FwYWJpbGl0eT4oe2lkOiBjYXBhYmlsaXR5SWR9KS5waXBlKG1hcChjYXBhYmlsaXRpZXMgPT4gY2FwYWJpbGl0aWVzLmF0KDApKSk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbGxNZW51SXRlbUFjY2VsZXJhdG9ycyQoKTogdm9pZCB7XG4gICAgLy8gU2luY2UgdGhlIGlmcmFtZSBpcyBhZGRlZCBhdCBhIHRvcC1sZXZlbCBsb2NhdGlvbiBpbiB0aGUgRE9NLCB0aGF0IGlzLCBub3QgYXMgYSBjaGlsZCBlbGVtZW50IG9mIHRoaXMgY29tcG9uZW50LFxuICAgIC8vIHRoZSB3b3JrYmVuY2ggdmlldyBtaXNzZXMga2V5Ym9hcmQgZXZlbnRzIGZyb20gZW1iZWRkZWQgY29udGVudC4gQXMgYSByZXN1bHQsIG1lbnUgaXRlbSBhY2NlbGVyYXRvcnMgb2YgdGhlIGNvbnRleHRcbiAgICAvLyBtZW51IG9mIHRoaXMgdmlldyBkbyBub3Qgd29yaywgc28gd2UgaW5zdGFsbCB0aGUgYWNjZWxlcmF0b3JzIG9uIHRoZSByb3V0ZXIgb3V0bGV0IGFzIHdlbGwuXG4gICAgdGhpcy5fdmlld0NvbnRleHRNZW51U2VydmljZS5pbnN0YWxsTWVudUl0ZW1BY2NlbGVyYXRvcnMkKHRoaXMucm91dGVyT3V0bGV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLnZpZXcpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byByZXF1ZXN0cyBmcm9tIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1pY3JvZnJvbnRlbmQgdG8gdXBkYXRlIGl0cyBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsUGFyYW1zVXBkYXRlcih2aWV3Q2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHkpOiB2b2lkIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkLm5leHQoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9tZXNzYWdlQ2xpZW50Lm9ic2VydmUkPMm1Vmlld1BhcmFtc1VwZGF0ZUNvbW1hbmQ+KMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1VwZGF0ZVRvcGljKHRoaXMudmlldy5pZCwgdmlld0NhcGFiaWxpdHkubWV0YWRhdGEhLmlkKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZVBhcmFtc1VwZGF0ZXIkKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAocmVxdWVzdDogVG9waWNNZXNzYWdlPMm1Vmlld1BhcmFtc1VwZGF0ZUNvbW1hbmQ+KSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcnhqcy9uby1hc3luYy1zdWJzY3JpYmVcbiAgICAgICAgLy8gV2UgRE8gTk9UIG5hdmlnYXRlIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FzIGNsb3NlZCwgZS5nLiwgYmVjYXVzZSBjbG9zZWQgdGhlIHZpZXcgb3IgbmF2aWdhdGVkIHRvIGFub3RoZXIgY2FwYWJpbGl0eS5cbiAgICAgICAgY29uc3QgcmVwbHlUbyA9IHJlcXVlc3QuaGVhZGVycy5nZXQoTWVzc2FnZUhlYWRlcnMuUmVwbHlUbyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5fd29ya2JlbmNoUm91dGVyLm5hdmlnYXRlKGxheW91dCA9PiB7XG4gICAgICAgICAgICAvLyBDYW5jZWwgcGVuZGluZyBuYXZpZ2F0aW9uIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FzIGNsb3NlZCwgZS5nLiwgYmVjYXVzZSBjbG9zZWQgdGhlIHZpZXcgb3IgbmF2aWdhdGVkIHRvIGFub3RoZXIgY2FwYWJpbGl0eVxuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtc0hhbmRsaW5nID0gcmVxdWVzdC5ib2R5IS5wYXJhbXNIYW5kbGluZztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLl9yb3V0ZS5zbmFwc2hvdC5wYXJhbXM7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXJhbXMgPSBEaWN0aW9uYXJpZXMuY29lcmNlKHJlcXVlc3QuYm9keSEucGFyYW1zKTsgLy8gY29lcmNlIHBhcmFtcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkUGFyYW1zID0gT2JqZWN0cy53aXRob3V0VW5kZWZpbmVkRW50cmllcyhwYXJhbXNIYW5kbGluZyA9PT0gJ21lcmdlJyA/IHsuLi5jdXJyZW50UGFyYW1zLCAuLi5uZXdQYXJhbXN9IDogbmV3UGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHt1cmxQYXJhbXMsIHRyYW5zaWVudFBhcmFtc30gPSBNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5zcGxpdFBhcmFtcyhtZXJnZWRQYXJhbXMsIHZpZXdDYXBhYmlsaXR5KTtcblxuICAgICAgICAgICAgcmV0dXJuIGxheW91dC5uYXZpZ2F0ZVZpZXcodGhpcy52aWV3LmlkLCBbdXJsUGFyYW1zXSwge1xuICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9yb3V0ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IE9iamVjdHMud2l0aG91dFVuZGVmaW5lZEVudHJpZXMoe1xuICAgICAgICAgICAgICAgIFtNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5TVEFURV9UUkFOU0lFTlRfUEFSQU1TXTogdHJhbnNpZW50UGFyYW1zLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXdhaXQgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKHJlcGx5VG8sIHN1Y2Nlc3MsIHtoZWFkZXJzOiBuZXcgTWFwKCkuc2V0KE1lc3NhZ2VIZWFkZXJzLlN0YXR1cywgUmVzcG9uc2VTdGF0dXNDb2Rlcy5URVJNSU5BTCl9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9tZXNzYWdlQ2xpZW50LnB1Ymxpc2gocmVwbHlUbywgc3RyaW5naWZ5RXJyb3IoZXJyb3IpLCB7aGVhZGVyczogbmV3IE1hcCgpLnNldChNZXNzYWdlSGVhZGVycy5TdGF0dXMsIFJlc3BvbnNlU3RhdHVzQ29kZXMuRVJST1IpfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhpcyB2aWV3LCBzdWNoIGFzIHRoZSB2aWV3IHRpdGxlLCBhcyBkZWZpbmVkIGJ5IHRoZSBjYXBhYmlsaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRWaWV3UHJvcGVydGllcyh2aWV3Q2FwYWJpbGl0eTogV29ya2JlbmNoVmlld0NhcGFiaWxpdHksIHBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy52aWV3LnRpdGxlID0gTWljcm9mcm9udGVuZHMuc3Vic3RpdHV0ZU5hbWVkUGFyYW1ldGVycyh2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLnRpdGxlLCBNYXBzLmNvZXJjZShwYXJhbXMpKSA/PyBudWxsO1xuICAgIHRoaXMudmlldy5oZWFkaW5nID0gTWljcm9mcm9udGVuZHMuc3Vic3RpdHV0ZU5hbWVkUGFyYW1ldGVycyh2aWV3Q2FwYWJpbGl0eS5wcm9wZXJ0aWVzLmhlYWRpbmcsIE1hcHMuY29lcmNlKHBhcmFtcykpID8/IG51bGw7XG4gICAgdGhpcy52aWV3LmNsYXNzTGlzdC5zZXQodmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5jc3NDbGFzcywge3Njb3BlOiAnYXBwbGljYXRpb24nfSk7XG4gICAgdGhpcy52aWV3LmNsb3NhYmxlID0gdmlld0NhcGFiaWxpdHkucHJvcGVydGllcy5jbG9zYWJsZSA/PyB0cnVlO1xuICAgIHRoaXMudmlldy5kaXJ0eSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb21pc2UgdGhhdCByZXNvbHZlcyBvbmNlIHBhcmFtcyBjb250YWluIHRoZSBnaXZlbiBjYXBhYmlsaXR5IGlkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQ2FwYWJpbGl0eVBhcmFtKHZpZXdDYXBhYmlsaXR5SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZXdQYXJhbXMkID0gdGhpcy5fbWVzc2FnZUNsaWVudC5vYnNlcnZlJDxNYXA8c3RyaW5nLCBzdHJpbmc+PijJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdQYXJhbXNUb3BpYyh0aGlzLnZpZXcuaWQpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcFRvQm9keSgpLFxuICAgICAgICBmaXJzdChwYXJhbXMgPT4gcGFyYW1zLmdldCjJtU1pY3JvZnJvbnRlbmRSb3V0ZVBhcmFtcy7JtVZJRVdfQ0FQQUJJTElUWV9JRCkgPT09IHZpZXdDYXBhYmlsaXR5SWQpLFxuICAgICAgKTtcbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh2aWV3UGFyYW1zJCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFzeW5jIGNhbkNsb3NlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhbkNsb3NlVG9waWMgPSDJtVdvcmtiZW5jaENvbW1hbmRzLmNhbkNsb3NlVG9waWModGhpcy52aWV3LmlkKTtcbiAgICBjb25zdCBsZWdhY3lDYW5DbG9zZVRvcGljID0gybVXb3JrYmVuY2hDb21tYW5kcy52aWV3Q2xvc2luZ1RvcGljKHRoaXMudmlldy5pZCk7XG5cbiAgICAvLyBJbml0aWF0ZSBhIHJlcXVlc3QtcmVzcG9uc2UgY29tbXVuaWNhdGlvbiBvbmx5IGlmIHRoZSBlbWJlZGRlZCBtaWNyb2Zyb250ZW5kIGltcGxlbWVudHMgYENhbkNsb3NlYCBndWFyZC5cbiAgICBjb25zdCBoYXNDYW5DbG9zZUd1YXJkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbWVzc2FnZUNsaWVudC5zdWJzY3JpYmVyQ291bnQkKGNhbkNsb3NlVG9waWMpKSA+IDA7XG4gICAgY29uc3QgaGFzTGVnYWN5Q2FuQ2xvc2VHdWFyZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX21lc3NhZ2VDbGllbnQuc3Vic2NyaWJlckNvdW50JChsZWdhY3lDYW5DbG9zZVRvcGljKSkgPiAwO1xuICAgIGlmICghaGFzQ2FuQ2xvc2VHdWFyZCAmJiAhaGFzTGVnYWN5Q2FuQ2xvc2VHdWFyZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9tZXNzYWdlQ2xpZW50LnJlcXVlc3QkPGJvb2xlYW4+KGhhc0NhbkNsb3NlR3VhcmQgPyBjYW5DbG9zZVRvcGljIDogbGVnYWN5Q2FuQ2xvc2VUb3BpYykucGlwZShtYXBUb0JvZHkoKSksIHtkZWZhdWx0VmFsdWU6IHRydWV9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvY3VzV2l0aGluKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHtkZXRhaWw6IGZvY3VzV2l0aGlufSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PGJvb2xlYW4+O1xuICAgIGlmIChmb2N1c1dpdGhpbikge1xuICAgICAgdGhpcy5faG9zdC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdzY2ktbWljcm9mcm9udGVuZC1mb2N1c2luJywge2J1YmJsZXM6IHRydWV9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwb24gc3Vic2NyaXB0aW9uLCBlbWl0cyB0aGUga2V5c3Ryb2tlcyByZWdpc3RlcmVkIHdpdGggbWVudSBpdGVtcyBvZiB0aGlzIHZpZXcncyBjb250ZXh0IG1lbnUsXG4gICAqIGFuZCB0aGVuIGNvbnRpbnVvdXNseSB3aGVuIHRoZXkgY2hhbmdlLiBUaGUgb2JzZXJ2YWJsZSBuZXZlciBjb21wbGV0ZXMuXG4gICAqL1xuICBwcml2YXRlIHZpZXdDb250ZXh0TWVudUtleXN0cm9rZXMkKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy52aWV3Lm1lbnVJdGVtcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXJBcnJheShtZW51SXRlbSA9PiAhIW1lbnVJdGVtLmFjY2VsZXJhdG9yKSxcbiAgICAgICAgbWFwQXJyYXkobWVudUl0ZW0gPT4gbWVudUl0ZW0uYWNjZWxlcmF0b3IhLm1hcChhY2NlbGVyYXRvciA9PiB7XG4gICAgICAgICAgLy8gTm9ybWFsaXplIGtleXN0cm9rZXMgYWNjb3JkaW5nIHRvIGBTY2lSb3V0ZXJPdXRsZXRFbGVtZW50I2tleXN0cm9rZXNgXG4gICAgICAgICAgc3dpdGNoIChhY2NlbGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSAnY3RybCc6XG4gICAgICAgICAgICAgIHJldHVybiAnY29udHJvbCc7XG4gICAgICAgICAgICBjYXNlICcuJzpcbiAgICAgICAgICAgICAgcmV0dXJuICdkb3QnO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgIHJldHVybiAnc3BhY2UnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY2VsZXJhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpLFxuICAgICAgICBtYXBBcnJheShhY2NlbGVyYXRvciA9PiBbJ2tleWRvd24nXS5jb25jYXQoYWNjZWxlcmF0b3IpLmpvaW4oJy4nKSksXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHtAbGluayBpc1dvcmtiZW5jaERyYWd9IHByb3BlcnR5IHdoZW4gYSB3b3JrYmVuY2ggZHJhZyBvcGVyYXRpb24gaXMgZGV0ZWN0ZWQsXG4gICAqIHN1Y2ggYXMgd2hlbiBkcmFnZ2luZyBhIHZpZXcgb3IgbW92aW5nIGEgc2FzaC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbFdvcmtiZW5jaERyYWdEZXRlY3RvcigpOiB2b2lkIHtcbiAgICB0aGlzLl93b3JrYmVuY2hMYXlvdXRTZXJ2aWNlLmRyYWdnaW5nJFxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtiZW5jaERyYWcgPSAoZXZlbnQgPT09ICdzdGFydCcpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb3BhZ2F0ZVdvcmtiZW5jaFRoZW1lKCk6IHZvaWQge1xuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLl9pbmplY3RvciwgKCkgPT4gTWljcm9mcm9udGVuZHMucHJvcGFnYXRlVGhlbWUodGhpcy5yb3V0ZXJPdXRsZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBJbnN0cnVjdCB0aGUgbWVzc2FnZSBicm9rZXIgdG8gZGVsZXRlIHJldGFpbmVkIG1lc3NhZ2VzIHRvIGZyZWUgcmVzb3VyY2VzLlxuICAgIHRoaXMuX21lc3NhZ2VDbGllbnQucHVibGlzaCjJtVdvcmtiZW5jaENvbW1hbmRzLnZpZXdBY3RpdmVUb3BpYyh0aGlzLnZpZXcuaWQpLCB1bmRlZmluZWQsIHtyZXRhaW46IHRydWV9KS50aGVuKCk7XG4gICAgdGhpcy5fbWVzc2FnZUNsaWVudC5wdWJsaXNoKMm1V29ya2JlbmNoQ29tbWFuZHMudmlld1BhcmFtc1RvcGljKHRoaXMudmlldy5pZCksIHVuZGVmaW5lZCwge3JldGFpbjogdHJ1ZX0pLnRoZW4oKTtcbiAgICB0aGlzLl9vdXRsZXRSb3V0ZXIubmF2aWdhdGUobnVsbCwge291dGxldDogdGhpcy52aWV3LmlkfSkudGhlbigpO1xuICAgIHRoaXMudmlldy51bnJlZ2lzdGVyQWRhcHRlcihNaWNyb2Zyb250ZW5kV29ya2JlbmNoVmlldyk7XG4gIH1cbn1cblxuLyoqXG4gKiBCbG9ja3MgdGhlIG1pY3JvZnJvbnRlbmQgb3V0bGV0IHdoZW4gZGlhbG9nKHMpIG92ZXJsYXkgdGhpcyB2aWV3LlxuICovXG5mdW5jdGlvbiBjb25maWd1cmVNaWNyb2Zyb250ZW5kR2xhc3NQYW5lKCk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBHTEFTU19QQU5FX0JMT0NLQUJMRSxcbiAgICB1c2VFeGlzdGluZzogybVXb3JrYmVuY2hWaWV3LFxuICB9O1xufVxuIiwiPHdiLWNvbnRlbnQtYXMtb3ZlcmxheSBbb3ZlcmxheUhvc3RdPVwiaWZyYW1lSG9zdFJlZi5yZWYkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cIm1pY3JvZnJvbnRlbmQtdmlld1wiXG4gICAgICAgW2NsYXNzLndvcmtiZW5jaC1kcmFnXT1cImlzV29ya2JlbmNoRHJhZ1wiXG4gICAgICAgW2F0dHIuZGF0YS12aWV3aWRdPVwidmlldy5pZFwiXG4gICAgICAgd2JHbGFzc1BhbmU+XG4gICAgPHNjaS1yb3V0ZXItb3V0bGV0ICNyb3V0ZXJfb3V0bGV0XG4gICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInZpZXcuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcGFiaWxpdHlpZF09XCJjYXBhYmlsaXR5Py5tZXRhZGF0YSEuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWFwcF09XCJjYXBhYmlsaXR5Py5tZXRhZGF0YSEuYXBwU3ltYm9saWNOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidmlldy5jbGFzc0xpc3QudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXN3aXRoaW4pPVwib25Gb2N1c1dpdGhpbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2tleXN0cm9rZXNdPVwia2V5c3Ryb2tlc1RvQnViYmxlJCB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInNwbGFzaFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc2NpLXJvdXRlci1vdXRsZXQ+XG4gIDwvZGl2PlxuPC93Yi1jb250ZW50LWFzLW92ZXJsYXk+XG4iXX0=
|
package/esm2022/lib/microfrontend-platform/microfrontend-view/microfrontend-workbench-view.model.mjs
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
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=
|