@coolon/angular-ui-powerups 12.4.9 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/activities/activities.scss +1 -1
- package/assets/cards.scss +1 -1
- package/assets/form.scss +1 -1
- package/assets/interaction/editor/inline-string-editor.scss +1 -1
- package/assets/interaction.scss +1 -1
- package/assets/mixins.scss +2 -2
- package/assets/pills.scss +1 -1
- package/assets/styles.scss +1 -1
- package/{esm2015/lib/angular-ui-powerups.module.js → esm2020/lib/angular-ui-powerups.module.mjs} +5 -5
- package/esm2020/lib/components/busy-overlay/busy-overlay.component.mjs +32 -0
- package/{esm2015/lib/components/cards/abstract-card-container.component.js → esm2020/lib/components/cards/abstract-card-container.component.mjs} +4 -4
- package/esm2020/lib/components/cards/card-container/card-container.component.mjs +129 -0
- package/esm2020/lib/components/cards/card-stack/card-stack.component.mjs +81 -0
- package/esm2020/lib/components/commands/command/command.component.mjs +96 -0
- package/{esm2015/lib/components/commands/command-face/command-face.component.js → esm2020/lib/components/commands/command-face/command-face.component.mjs} +5 -10
- package/esm2020/lib/components/commands/command-face.mjs +112 -0
- package/{esm2015/lib/components/commands/flex.component.js → esm2020/lib/components/commands/flex.component.mjs} +4 -4
- package/esm2020/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +84 -0
- package/esm2020/lib/components/commands/group/popup-menu/more-menu.component.mjs +57 -0
- package/esm2020/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.mjs +101 -0
- package/esm2020/lib/components/commands/group/popup-menu/popup-menu.component.mjs +53 -0
- package/esm2020/lib/components/commands/group/tool-bar/tool-bar.component.mjs +31 -0
- package/{esm2015/lib/components/commands/separator.component.js → esm2020/lib/components/commands/separator.component.mjs} +5 -5
- package/{esm2015/lib/components/components.module.js → esm2020/lib/components/components.module.mjs} +6 -6
- package/{esm2015/lib/components/disposable-component.js → esm2020/lib/components/disposable-component.mjs} +4 -4
- package/{esm2015/lib/components/empty-state/empty-state.component.js → esm2020/lib/components/empty-state/empty-state.component.mjs} +6 -10
- package/{esm2015/lib/components/focus-container/focus-container.component.js → esm2020/lib/components/focus-container/focus-container.component.mjs} +6 -11
- package/{esm2015/lib/components/focusable.component.js → esm2020/lib/components/focusable.component.mjs} +6 -8
- package/{esm2015/lib/components/forms/abstract-input.component.js → esm2020/lib/components/forms/abstract-input.component.mjs} +4 -4
- package/{esm2015/lib/components/forms/abstract-list-input.component.js → esm2020/lib/components/forms/abstract-list-input.component.mjs} +4 -4
- package/{esm2015/lib/components/forms/abstract-value-input.component.js → esm2020/lib/components/forms/abstract-value-input.component.mjs} +4 -4
- package/esm2020/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +72 -0
- package/esm2020/lib/components/forms/checkbox-input/checkbox-input.component.mjs +29 -0
- package/esm2020/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +52 -0
- package/esm2020/lib/components/forms/number-input/number-input.component.mjs +33 -0
- package/esm2020/lib/components/forms/password-input/password-input.component.mjs +24 -0
- package/esm2020/lib/components/forms/select-input/select-input.component.mjs +57 -0
- package/esm2020/lib/components/forms/string-input/string-input.component.mjs +48 -0
- package/esm2020/lib/components/forms/text-input/text-input.component.mjs +30 -0
- package/esm2020/lib/components/icon/icon.component.mjs +52 -0
- package/esm2020/lib/components/labelled-value/labelled-value.component.mjs +20 -0
- package/esm2020/lib/components/loading-container/loading-container.component.mjs +50 -0
- package/esm2020/lib/components/noop/noop.component.mjs +13 -0
- package/{esm2015/lib/components/resize-aware.component.js → esm2020/lib/components/resize-aware.component.mjs} +4 -4
- package/esm2020/lib/components/scroll-container/scroll-container.component.mjs +15 -0
- package/esm2020/lib/components/section-header/section-header.component.mjs +36 -0
- package/{esm2015/lib/components/switch-case/switch-case.component.js → esm2020/lib/components/switch-case/switch-case.component.mjs} +11 -15
- package/esm2020/lib/components/tables/abstract-table-model.mjs +185 -0
- package/esm2020/lib/components/tables/abstract-table.component.mjs +168 -0
- package/{esm2015/lib/components/tables/table/cell-portal-ref.js → esm2020/lib/components/tables/table/cell-portal-ref.mjs} +2 -2
- package/esm2020/lib/components/tables/table/column-model.mjs +392 -0
- package/esm2020/lib/components/tables/table/column-template/column-template.directive.mjs +35 -0
- package/esm2020/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.mjs +22 -0
- package/esm2020/lib/components/tables/table/default-header-cell-renderer/default-header-cell-renderer.component.mjs +15 -0
- package/esm2020/lib/components/tables/table/edit-row-controls/edit-row-controls.component.mjs +55 -0
- package/esm2020/lib/components/tables/table/paginator/paginator.component.mjs +40 -0
- package/esm2020/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.mjs +26 -0
- package/esm2020/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.mjs +31 -0
- package/esm2020/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.mjs +93 -0
- package/esm2020/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.mjs +32 -0
- package/{esm2015/lib/components/tables/table/table-row-menu/table-row-menu.component.js → esm2020/lib/components/tables/table/table-row-menu/table-row-menu.component.mjs} +5 -5
- package/esm2020/lib/components/tables/table/table.component.mjs +95 -0
- package/esm2020/lib/components/tables/tree-table/decorated-tree-node.mjs +171 -0
- package/esm2020/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.mjs +72 -0
- package/esm2020/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +91 -0
- package/esm2020/lib/components/tables/tree-table/tree-table-component.mjs +95 -0
- package/{esm2015/lib/components/text/markdown/markdown.component.js → esm2020/lib/components/text/markdown/markdown.component.mjs} +5 -9
- package/{esm2015/lib/components/vertical-focus-container/vertical-focus-container.component.js → esm2020/lib/components/vertical-focus-container/vertical-focus-container.component.mjs} +6 -11
- package/{esm2015/lib/directives/command.directive.js → esm2020/lib/directives/command.directive.mjs} +4 -4
- package/{esm2015/lib/directives/directives.module.js → esm2020/lib/directives/directives.module.mjs} +5 -5
- package/{esm2015/lib/directives/focus-binding-factory.js → esm2020/lib/directives/focus-binding-factory.mjs} +4 -4
- package/{esm2015/lib/directives/focus-binding.directive.js → esm2020/lib/directives/focus-binding.directive.mjs} +4 -4
- package/{esm2015/lib/directives/highlight-text-model.directive.js → esm2020/lib/directives/highlight-text-model.directive.mjs} +4 -4
- package/{esm2015/lib/directives/highlight.pipe.js → esm2020/lib/directives/highlight.pipe.mjs} +6 -7
- package/esm2020/lib/interaction/activity.mjs +87 -0
- package/{esm2015/lib/interaction/components/abstract-confirm-dialog.component.js → esm2020/lib/interaction/components/abstract-confirm-dialog.component.mjs} +4 -4
- package/{esm2015/lib/interaction/components/abstract-dialog.component.js → esm2020/lib/interaction/components/abstract-dialog.component.mjs} +4 -4
- package/esm2020/lib/interaction/components/activity-actions/activity-actions.component.mjs +109 -0
- package/esm2020/lib/interaction/components/activity-body/activity-body.component.mjs +23 -0
- package/esm2020/lib/interaction/components/activity-container/activity-container.component.mjs +205 -0
- package/{esm2015/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.js → esm2020/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs} +5 -9
- package/esm2020/lib/interaction/components/activity-title/activity-title.component.mjs +41 -0
- package/{esm2015/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.js → esm2020/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.mjs} +5 -6
- package/esm2020/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +24 -0
- package/esm2020/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.mjs +22 -0
- package/esm2020/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.mjs +30 -0
- package/esm2020/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +91 -0
- package/esm2020/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +73 -0
- package/esm2020/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +30 -0
- package/esm2020/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +30 -0
- package/esm2020/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +34 -0
- package/esm2020/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +29 -0
- package/esm2020/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +173 -0
- package/esm2020/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +91 -0
- package/esm2020/lib/interaction/components/input-activities/input-activity.mjs +103 -0
- package/{esm2015/lib/interaction/components/input-activities/select-input-activity.js → esm2020/lib/interaction/components/input-activities/select-input-activity.mjs} +6 -8
- package/{esm2015/lib/interaction/components/input-activities/string-input-activity.js → esm2020/lib/interaction/components/input-activities/string-input-activity.mjs} +4 -4
- package/{esm2015/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.js → esm2020/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.mjs} +5 -9
- package/{esm2015/lib/interaction/directives/interaction-context-trigger-for.directive.js → esm2020/lib/interaction/directives/interaction-context-trigger-for.directive.mjs} +4 -4
- package/{esm2015/lib/interaction/interaction.module.js → esm2020/lib/interaction/interaction.module.mjs} +5 -11
- package/{esm2015/lib/interaction/services/interaction.service.js → esm2020/lib/interaction/services/interaction.service.mjs} +4 -4
- package/esm2020/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.mjs +47 -0
- package/esm2020/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.mjs +61 -0
- package/{esm2015/lib/place/components/abstract-place-navigation.component.js → esm2020/lib/place/components/abstract-place-navigation.component.mjs} +4 -4
- package/esm2020/lib/place/components/list-place-nav/list-place-nav.component.mjs +23 -0
- package/esm2020/lib/place/components/not-authorised-notice/not-authorised-notice.component.mjs +13 -0
- package/esm2020/lib/place/components/place-outlet/place-outlet.component.mjs +256 -0
- package/esm2020/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +93 -0
- package/esm2020/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.mjs +22 -0
- package/esm2020/lib/place/guards/noop-auth-guard.service.mjs +18 -0
- package/esm2020/lib/place/guards/place.guard.mjs +109 -0
- package/esm2020/lib/place/navigation/place-component-deactivation-handler.mjs +83 -0
- package/esm2020/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.mjs +43 -0
- package/esm2020/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.mjs +152 -0
- package/esm2020/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.mjs +62 -0
- package/esm2020/lib/place/navigation/session/navigation-session.mjs +157 -0
- package/esm2020/lib/place/place-component.mjs +198 -0
- package/esm2020/lib/place/place-history.mjs +138 -0
- package/esm2020/lib/place/place-router.mjs +331 -0
- package/esm2020/lib/place/place.decorator.mjs +18 -0
- package/{esm2015/lib/place/place.module.js → esm2020/lib/place/place.module.mjs} +5 -6
- package/esm2020/lib/place/route/parameter-definition.mjs +123 -0
- package/esm2020/lib/place/route/visit-sanitiser.mjs +41 -0
- package/{esm2015/lib/place/url-service.js → esm2020/lib/place/url-service.mjs} +4 -4
- package/esm2020/lib/place/visit.mjs +69 -0
- package/{esm2015/lib/services/markdown/markdown.service.js → esm2020/lib/services/markdown/markdown.service.mjs} +5 -5
- package/esm2020/lib/services/markdown/pill-plugin.mjs +37 -0
- package/{esm2015/lib/services/visibility-service.js → esm2020/lib/services/visibility-service.mjs} +4 -4
- package/fesm2015/{coolon-angular-ui-powerups.js → coolon-angular-ui-powerups.mjs} +1201 -1415
- package/fesm2015/coolon-angular-ui-powerups.mjs.map +1 -0
- package/fesm2020/coolon-angular-ui-powerups.mjs +9891 -0
- package/fesm2020/coolon-angular-ui-powerups.mjs.map +1 -0
- package/package.json +37 -24
- package/schematics/activity/index.js +3 -3
- package/schematics/activity/index.js.map +1 -1
- package/schematics/aup-i18n/index.js +7 -7
- package/schematics/aup-i18n/index.js.map +1 -1
- package/schematics/bootstrap-app/index.js +9 -9
- package/schematics/bootstrap-app/index.js.map +1 -1
- package/schematics/bootstrap-app/templates/src/styles.scss.template +2 -2
- package/schematics/component/index.js +3 -3
- package/schematics/component/index.js.map +1 -1
- package/schematics/ng-add/index.js +2 -2
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/place-add/index.js +3 -3
- package/schematics/place-add/index.js.map +1 -1
- package/schematics/place-bootstrap/index.js +1 -1
- package/schematics/place-bootstrap/index.js.map +1 -1
- package/schematics/place-routes/place-builder.js +6 -6
- package/schematics/place-routes/place-builder.js.map +1 -1
- package/schematics/place-routes/place-class-scanner.js +3 -3
- package/schematics/place-routes/place-class-scanner.js.map +1 -1
- package/schematics/place-routes/place-def.js +4 -4
- package/schematics/place-routes/place-def.js.map +1 -1
- package/schematics/utils/decorators/decorated-class.js +1 -1
- package/schematics/utils/decorators/decorated-class.js.map +1 -1
- package/schematics/utils/import-def.js +3 -3
- package/schematics/utils/import-def.js.map +1 -1
- package/schematics/utils/method-scanner.js +4 -4
- package/schematics/utils/method-scanner.js.map +1 -1
- package/schematics/utils/path-helper.js +3 -3
- package/schematics/utils/path-helper.js.map +1 -1
- package/schematics/utils/source-file-scanner.js +5 -5
- package/schematics/utils/source-file-scanner.js.map +1 -1
- package/schematics/utils/source-file-utilities.js +1 -1
- package/schematics/utils/source-file-utilities.js.map +1 -1
- package/schematics/utils/template-utilities.js +4 -4
- package/schematics/utils/template-utilities.js.map +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.js +0 -11847
- package/bundles/coolon-angular-ui-powerups.umd.js.map +0 -1
- package/esm2015/lib/components/busy-overlay/busy-overlay.component.js +0 -36
- package/esm2015/lib/components/cards/card-container/card-container.component.js +0 -133
- package/esm2015/lib/components/cards/card-stack/card-stack.component.js +0 -85
- package/esm2015/lib/components/commands/command/command.component.js +0 -100
- package/esm2015/lib/components/commands/command-face.js +0 -112
- package/esm2015/lib/components/commands/group/popup-menu/abstract-popup-menu.component.js +0 -89
- package/esm2015/lib/components/commands/group/popup-menu/more-menu.component.js +0 -61
- package/esm2015/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.js +0 -104
- package/esm2015/lib/components/commands/group/popup-menu/popup-menu.component.js +0 -58
- package/esm2015/lib/components/commands/group/tool-bar/tool-bar.component.js +0 -36
- package/esm2015/lib/components/forms/autocomplete-input/autocomplete-input.component.js +0 -76
- package/esm2015/lib/components/forms/checkbox-input/checkbox-input.component.js +0 -33
- package/esm2015/lib/components/forms/multiple-select-input/multiple-select-input.component.js +0 -56
- package/esm2015/lib/components/forms/number-input/number-input.component.js +0 -37
- package/esm2015/lib/components/forms/password-input/password-input.component.js +0 -28
- package/esm2015/lib/components/forms/select-input/select-input.component.js +0 -61
- package/esm2015/lib/components/forms/string-input/string-input.component.js +0 -52
- package/esm2015/lib/components/forms/text-input/text-input.component.js +0 -34
- package/esm2015/lib/components/icon/icon.component.js +0 -56
- package/esm2015/lib/components/labelled-value/labelled-value.component.js +0 -24
- package/esm2015/lib/components/loading-container/loading-container.component.js +0 -54
- package/esm2015/lib/components/noop/noop.component.js +0 -17
- package/esm2015/lib/components/scroll-container/scroll-container.component.js +0 -19
- package/esm2015/lib/components/section-header/section-header.component.js +0 -40
- package/esm2015/lib/components/tables/abstract-table-model.js +0 -188
- package/esm2015/lib/components/tables/abstract-table.component.js +0 -170
- package/esm2015/lib/components/tables/table/column-model.js +0 -389
- package/esm2015/lib/components/tables/table/column-template/column-template.directive.js +0 -36
- package/esm2015/lib/components/tables/table/default-cell-renderer/default-cell-renderer.component.js +0 -26
- package/esm2015/lib/components/tables/table/default-header-cell-renderer/default-header-cell-renderer.component.js +0 -19
- package/esm2015/lib/components/tables/table/edit-row-controls/edit-row-controls.component.js +0 -60
- package/esm2015/lib/components/tables/table/paginator/paginator.component.js +0 -44
- package/esm2015/lib/components/tables/table/select-cell-renderer/select-cell-renderer.component.js +0 -32
- package/esm2015/lib/components/tables/table/select-header-cell-renderer/select-header-cell-renderer.component.js +0 -37
- package/esm2015/lib/components/tables/table/table-cell-renderer/table-cell-renderer.component.js +0 -98
- package/esm2015/lib/components/tables/table/table-header-cell-renderer/table-header-cell-renderer.component.js +0 -36
- package/esm2015/lib/components/tables/table/table.component.js +0 -100
- package/esm2015/lib/components/tables/tree-table/decorated-tree-node.js +0 -171
- package/esm2015/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.js +0 -76
- package/esm2015/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.js +0 -96
- package/esm2015/lib/components/tables/tree-table/tree-table-component.js +0 -100
- package/esm2015/lib/interaction/activity.js +0 -88
- package/esm2015/lib/interaction/components/activity-actions/activity-actions.component.js +0 -113
- package/esm2015/lib/interaction/components/activity-body/activity-body.component.js +0 -27
- package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +0 -214
- package/esm2015/lib/interaction/components/activity-title/activity-title.component.js +0 -45
- package/esm2015/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.js +0 -28
- package/esm2015/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.js +0 -26
- package/esm2015/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.js +0 -34
- package/esm2015/lib/interaction/components/add-card-activity/add-card-activity.component.js +0 -95
- package/esm2015/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.js +0 -77
- package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +0 -34
- package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +0 -34
- package/esm2015/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.js +0 -39
- package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +0 -33
- package/esm2015/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.js +0 -176
- package/esm2015/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.js +0 -96
- package/esm2015/lib/interaction/components/input-activities/input-activity.js +0 -107
- package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.js +0 -41
- package/esm2015/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.js +0 -58
- package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +0 -27
- package/esm2015/lib/place/components/not-authorised-notice/not-authorised-notice.component.js +0 -17
- package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +0 -263
- package/esm2015/lib/place/components/side-place-navigation/side-place-navigation.component.js +0 -97
- package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +0 -26
- package/esm2015/lib/place/guards/noop-auth-guard.service.js +0 -21
- package/esm2015/lib/place/guards/place.guard.js +0 -116
- package/esm2015/lib/place/navigation/place-component-deactivation-handler.js +0 -88
- package/esm2015/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.js +0 -46
- package/esm2015/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.js +0 -159
- package/esm2015/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.js +0 -65
- package/esm2015/lib/place/navigation/session/navigation-session.js +0 -160
- package/esm2015/lib/place/place-component.js +0 -204
- package/esm2015/lib/place/place-history.js +0 -139
- package/esm2015/lib/place/place-router.js +0 -336
- package/esm2015/lib/place/place.decorator.js +0 -19
- package/esm2015/lib/place/route/parameter-definition.js +0 -128
- package/esm2015/lib/place/route/visit-sanitiser.js +0 -44
- package/esm2015/lib/place/visit.js +0 -69
- package/esm2015/lib/services/markdown/pill-plugin.js +0 -38
- package/fesm2015/coolon-angular-ui-powerups.js.map +0 -1
- /package/{esm2015/coolon-angular-ui-powerups.js → esm2020/coolon-angular-ui-powerups.mjs} +0 -0
- /package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- /package/{esm2015/lib/animations/exports.js → esm2020/lib/animations/exports.mjs} +0 -0
- /package/{esm2015/lib/animations/slide-animations.js → esm2020/lib/animations/slide-animations.mjs} +0 -0
- /package/{esm2015/lib/components/alignment.js → esm2020/lib/components/alignment.mjs} +0 -0
- /package/{esm2015/lib/components/commands/group/command-container.js → esm2020/lib/components/commands/group/command-container.mjs} +0 -0
- /package/{esm2015/lib/components/commands/group/popup-aware.component.js → esm2020/lib/components/commands/group/popup-aware.component.mjs} +0 -0
- /package/{esm2015/lib/components/commands/group/popup-container.js → esm2020/lib/components/commands/group/popup-container.mjs} +0 -0
- /package/{esm2015/lib/components/exports.js → esm2020/lib/components/exports.mjs} +0 -0
- /package/{esm2015/lib/components/tables/column-list-model.js → esm2020/lib/components/tables/column-list-model.mjs} +0 -0
- /package/{esm2015/lib/components/tables/edit-session.js → esm2020/lib/components/tables/edit-session.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/cell-editors.js → esm2020/lib/components/tables/table/cell-editors.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/cell-renderer.js → esm2020/lib/components/tables/table/cell-renderer.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/column-text-properties.js → esm2020/lib/components/tables/table/column-text-properties.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/mutable-cell-renderer.js → esm2020/lib/components/tables/table/mutable-cell-renderer.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/table-def.js → esm2020/lib/components/tables/table/table-def.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/table-model.js → esm2020/lib/components/tables/table/table-model.mjs} +0 -0
- /package/{esm2015/lib/components/tables/table/text-search-predicate.js → esm2020/lib/components/tables/table/text-search-predicate.mjs} +0 -0
- /package/{esm2015/lib/components/tables/tree-table/flattened-tree-list-model.js → esm2020/lib/components/tables/tree-table/flattened-tree-list-model.mjs} +0 -0
- /package/{esm2015/lib/components/tables/tree-table/tree-expansion-model.js → esm2020/lib/components/tables/tree-table/tree-expansion-model.mjs} +0 -0
- /package/{esm2015/lib/components/tables/tree-table/tree-label-column-model.js → esm2020/lib/components/tables/tree-table/tree-label-column-model.mjs} +0 -0
- /package/{esm2015/lib/components/tables/tree-table/tree-table-model.js → esm2020/lib/components/tables/tree-table/tree-table-model.mjs} +0 -0
- /package/{esm2015/lib/components/track-by.js → esm2020/lib/components/track-by.mjs} +0 -0
- /package/{esm2015/lib/components/types/bounds.class.js → esm2020/lib/components/types/bounds.class.mjs} +0 -0
- /package/{esm2015/lib/components/types/dimension.class.js → esm2020/lib/components/types/dimension.class.mjs} +0 -0
- /package/{esm2015/lib/components/types/point.class.js → esm2020/lib/components/types/point.class.mjs} +0 -0
- /package/{esm2015/lib/directives/exports.js → esm2020/lib/directives/exports.mjs} +0 -0
- /package/{esm2015/lib/directives/focus-binding.js → esm2020/lib/directives/focus-binding.mjs} +0 -0
- /package/{esm2015/lib/interaction/abstract-interaction-context.js → esm2020/lib/interaction/abstract-interaction-context.mjs} +0 -0
- /package/{esm2015/lib/interaction/activity-ref.js → esm2020/lib/interaction/activity-ref.mjs} +0 -0
- /package/{esm2015/lib/interaction/alert.js → esm2020/lib/interaction/alert.mjs} +0 -0
- /package/{esm2015/lib/interaction/components/editors/edit-context.js → esm2020/lib/interaction/components/editors/edit-context.mjs} +0 -0
- /package/{esm2015/lib/interaction/components/editors/inline-string-editor/inline-editor-model.js → esm2020/lib/interaction/components/editors/inline-string-editor/inline-editor-model.mjs} +0 -0
- /package/{esm2015/lib/interaction/confirm.js → esm2020/lib/interaction/confirm.mjs} +0 -0
- /package/{esm2015/lib/interaction/exports.js → esm2020/lib/interaction/exports.mjs} +0 -0
- /package/{esm2015/lib/interaction/in-place-interaction-context.js → esm2020/lib/interaction/in-place-interaction-context.mjs} +0 -0
- /package/{esm2015/lib/interaction/interaction-context.js → esm2020/lib/interaction/interaction-context.mjs} +0 -0
- /package/{esm2015/lib/interaction/route-synchronisation-adapter.js → esm2020/lib/interaction/route-synchronisation-adapter.mjs} +0 -0
- /package/{esm2015/lib/interaction/services/interaction-service-routing-adapter.js → esm2020/lib/interaction/services/interaction-service-routing-adapter.mjs} +0 -0
- /package/{esm2015/lib/interaction/services/modal-interaction-context.factory.js → esm2020/lib/interaction/services/modal-interaction-context.factory.mjs} +0 -0
- /package/{esm2015/lib/place/components/place-outlet/route-animations.js → esm2020/lib/place/components/place-outlet/route-animations.mjs} +0 -0
- /package/{esm2015/lib/place/exports.js → esm2020/lib/place/exports.mjs} +0 -0
- /package/{esm2015/lib/place/guards/consolidated-param-map.js → esm2020/lib/place/guards/consolidated-param-map.mjs} +0 -0
- /package/{esm2015/lib/place/nav-item.js → esm2020/lib/place/nav-item.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/abstract-pop-state-navigation.js → esm2020/lib/place/navigation/session/abstract-pop-state-navigation.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/event-cleanup/event-clean-up-session.js → esm2020/lib/place/navigation/session/event-cleanup/event-clean-up-session.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/interactions/navigating-during-interaction.js → esm2020/lib/place/navigation/session/interactions/navigating-during-interaction.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.js → esm2020/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.js → esm2020/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.js → esm2020/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/navigating.js → esm2020/lib/place/navigation/session/navigating.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/navigation-context.js → esm2020/lib/place/navigation/session/navigation-context.mjs} +0 -0
- /package/{esm2015/lib/place/navigation/session/pop-state-navigation.js → esm2020/lib/place/navigation/session/pop-state-navigation.mjs} +0 -0
- /package/{esm2015/lib/place/place-access-guard.js → esm2020/lib/place/place-access-guard.mjs} +0 -0
- /package/{esm2015/lib/place/place-config.js → esm2020/lib/place/place-config.mjs} +0 -0
- /package/{esm2015/lib/place/place-definition.js → esm2020/lib/place/place-definition.mjs} +0 -0
- /package/{esm2015/lib/place/route/formatter.js → esm2020/lib/place/route/formatter.mjs} +0 -0
- /package/{esm2015/lib/place/route/json-types.js → esm2020/lib/place/route/json-types.mjs} +0 -0
- /package/{esm2015/lib/place/route/parameter-decorators.js → esm2020/lib/place/route/parameter-decorators.mjs} +0 -0
- /package/{esm2015/lib/place/route/parameter-sanitiser.js → esm2020/lib/place/route/parameter-sanitiser.mjs} +0 -0
- /package/{esm2015/lib/place/route/parameter-snapshot.js → esm2020/lib/place/route/parameter-snapshot.mjs} +0 -0
- /package/{esm2015/lib/place/url-snapshot.js → esm2020/lib/place/url-snapshot.mjs} +0 -0
- /package/{esm2015/lib/services/exports.js → esm2020/lib/services/exports.mjs} +0 -0
- /package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { EventCleanUpSession } from './event-clean-up-session';
|
|
3
|
-
/**
|
|
4
|
-
* This state handles the scenario where a link navigation triggered an interaction and the user clicked back a to cancel it.
|
|
5
|
-
* The routing event sequence is different depending on the link that was clicked.
|
|
6
|
-
*
|
|
7
|
-
* NOTE: In angular prior to 10 the sequence of routing events was different depending on the initial link that was clicked.
|
|
8
|
-
* This class used have ugle if/else code to handle it and a not that it should be split into sub states.
|
|
9
|
-
* During the update to angular 10 I did this (as the tests for this scenario were failings). After doing so
|
|
10
|
-
* it appears that angular now behaves the same in both cases. But rather that revert the changes I've left the
|
|
11
|
-
* sub-state handling in in case it ever comes back.
|
|
12
|
-
*/
|
|
13
|
-
export class WaitUntilLinkTriggeredNavigationInteractionCancellationTypeDetermined extends EventCleanUpSession {
|
|
14
|
-
constructor(context, startingUrl, clickedLinkUrl) {
|
|
15
|
-
super(context, startingUrl);
|
|
16
|
-
this.clickedLinkUrl = clickedLinkUrl;
|
|
17
|
-
this.isPopState = false;
|
|
18
|
-
this.clickedLinkMatchedBackButtonUrl = false;
|
|
19
|
-
this.debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'firstCancelEventUrl', 'clickedLinkMatchedBackButtonUrl', 'popStateEventUrl'];
|
|
20
|
-
}
|
|
21
|
-
// @Trace()
|
|
22
|
-
onRouterStarted(event) {
|
|
23
|
-
this.ignore(event);
|
|
24
|
-
}
|
|
25
|
-
// @Trace()
|
|
26
|
-
onRouterCancelled(event) {
|
|
27
|
-
if (event.url === this.clickedLinkUrl) {
|
|
28
|
-
this.context.transitionTo(new WaitForLinkSameAsBackToPlayOut(this.context, this.startingUrl, this.clickedLinkUrl));
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.context.transitionTo(new WaitForLinkDifferentFromBackToPlayOut(this.context, this.startingUrl, this.clickedLinkUrl));
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
canDeactivatePlace(component, currentUrl, nextUrl) {
|
|
35
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
36
|
-
return false;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
class WaitForLinkSameAsBackToPlayOut extends EventCleanUpSession {
|
|
41
|
-
constructor(context, startingUrl, clickedLinkUrl) {
|
|
42
|
-
super(context, startingUrl);
|
|
43
|
-
this.clickedLinkUrl = clickedLinkUrl;
|
|
44
|
-
this.isPopState = false;
|
|
45
|
-
this.debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'popStateEventUrl'];
|
|
46
|
-
}
|
|
47
|
-
// @Trace()
|
|
48
|
-
onRouterEnd(event) {
|
|
49
|
-
this.ignore(event);
|
|
50
|
-
}
|
|
51
|
-
// @Trace()
|
|
52
|
-
onRouterError(event) {
|
|
53
|
-
this.ignore(event);
|
|
54
|
-
}
|
|
55
|
-
// @Trace()
|
|
56
|
-
onPopState(event) {
|
|
57
|
-
this.popStateEventUrl = event.url;
|
|
58
|
-
this.ignore(event);
|
|
59
|
-
}
|
|
60
|
-
// @Trace()
|
|
61
|
-
onRouterCancelled(event) {
|
|
62
|
-
if (this.popStateEventUrl) {
|
|
63
|
-
this.finaliseRouting();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// @Trace()
|
|
67
|
-
finaliseRouting() {
|
|
68
|
-
this.repairBrowserHistoryAndUrlAfterGuardCancellation(this.clickedLinkUrl, this.startingUrl);
|
|
69
|
-
return this.context.finishRoutingSession();
|
|
70
|
-
}
|
|
71
|
-
canDeactivatePlace(component, currentUrl, nextUrl) {
|
|
72
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
return false;
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// See the note above. This class is identical to the previous but I've left it here in case angular decides to
|
|
78
|
-
// route differently in this scenario going forward.
|
|
79
|
-
class WaitForLinkDifferentFromBackToPlayOut extends EventCleanUpSession {
|
|
80
|
-
constructor(context, startingUrl, clickedLinkUrl) {
|
|
81
|
-
super(context, startingUrl);
|
|
82
|
-
this.clickedLinkUrl = clickedLinkUrl;
|
|
83
|
-
this.isPopState = false;
|
|
84
|
-
this.debugPropertyKeys = ['idle', 'startingUrl', 'clickedLinkUrl', 'popStateEventUrl'];
|
|
85
|
-
}
|
|
86
|
-
// @Trace()
|
|
87
|
-
onRouterEnd(event) {
|
|
88
|
-
this.ignore(event);
|
|
89
|
-
}
|
|
90
|
-
// @Trace()
|
|
91
|
-
onRouterError(event) {
|
|
92
|
-
this.ignore(event);
|
|
93
|
-
}
|
|
94
|
-
// @Trace()
|
|
95
|
-
onPopState(event) {
|
|
96
|
-
this.popStateEventUrl = event.url;
|
|
97
|
-
this.ignore(event);
|
|
98
|
-
}
|
|
99
|
-
// @Trace()
|
|
100
|
-
onRouterCancelled(event) {
|
|
101
|
-
if (this.popStateEventUrl) {
|
|
102
|
-
this.finaliseRouting();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// @Trace()
|
|
106
|
-
finaliseRouting() {
|
|
107
|
-
this.repairBrowserHistoryAndUrlAfterGuardCancellation(this.clickedLinkUrl, this.startingUrl);
|
|
108
|
-
return this.context.finishRoutingSession();
|
|
109
|
-
}
|
|
110
|
-
canDeactivatePlace(component, currentUrl, nextUrl) {
|
|
111
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
-
return false;
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
//
|
|
117
|
-
// ### Router State Transition: null -> Navigating(startingUrl: /activities/dialogs;l=en, urlAfterRedirects: undefined)
|
|
118
|
-
// ### ###### Router Event: NavigationStart
|
|
119
|
-
// NavigationStart(id: 6, url: '/home')
|
|
120
|
-
// NavigationStart {id: 6, url: "/home", navigationTrigger: "imperative", restoredState: null}
|
|
121
|
-
// logger.js:39 Ignoring router event: NavigationStart -> /home :: Navigating(startingUrl: /activities/dialogs;l=en, urlAfterRedirects: undefined)
|
|
122
|
-
// ### ###### Router Event: RoutesRecognized
|
|
123
|
-
// RoutesRecognized(id: 6, url: '/home', urlAfterRedirects: '/home', state: Route(url:'', path:'') { Route(url:'home', path:'home') } )
|
|
124
|
-
// RoutesRecognized {id: 6, url: "/home", urlAfterRedirects: "/home", state: RouterStateSnapshot}
|
|
125
|
-
// ###### Router Event: GuardsCheckStart
|
|
126
|
-
// GuardsCheckStart(id: 6, url: '/home', urlAfterRedirects: '/home', state: Route(url:'', path:'') { Route(url:'home', path:'home') } )
|
|
127
|
-
// GuardsCheckStart {id: 6, url: "/home", urlAfterRedirects: "/home", state: RouterStateSnapshot}
|
|
128
|
-
// logger.js:39 back button pressed during navigation session interaction promise
|
|
129
|
-
// logger.js:39 cancelling current navigation activity..
|
|
130
|
-
// logger.js:39 ### Router State Transition: Navigating(startingUrl: /activities/dialogs;l=en, urlAfterRedirects: undefined) -> WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish(idle: undefined, startingUrl: /activities/dialogs;l=en, clickedLinkUrl: /home, firstCancelEventUrl: undefined, clickedLinkMatchedBackButtonUrl: false, popStateEventUrl: undefined)
|
|
131
|
-
// ###### Router Event: GuardsCheckEnd
|
|
132
|
-
// GuardsCheckEnd(id: 6, url: '/home', urlAfterRedirects: '/home', state: Route(url:'', path:'') { Route(url:'home', path:'home') } , shouldActivate: false)
|
|
133
|
-
// GuardsCheckEnd {id: 6, url: "/home", urlAfterRedirects: "/home", state: RouterStateSnapshot, shouldActivate: false}
|
|
134
|
-
// ###### Router Event: NavigationCancel
|
|
135
|
-
// NavigationCancel(id: 6, url: '/home')
|
|
136
|
-
// NavigationCancel {id: 6, url: "/home", reason: ""}
|
|
137
|
-
// logger.js:54 WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish.onRouterCancelled
|
|
138
|
-
// logger.js:19 args NavigationCancel {id: 6, url: "/home", reason: ""}
|
|
139
|
-
// logger.js:39 Ignoring router event: NavigationCancel -> /home :: WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish(idle: undefined, startingUrl: /activities/dialogs;l=en, clickedLinkUrl: /home, firstCancelEventUrl: /home, clickedLinkMatchedBackButtonUrl: true, popStateEventUrl: undefined)
|
|
140
|
-
// logger.js:28 <-- WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish.onRouterCancelled undefined
|
|
141
|
-
// logger.js:54 WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish.onRouterEnd
|
|
142
|
-
// logger.js:19 args NavigationEnd {id: -1, url: "", urlAfterRedirects: ""}
|
|
143
|
-
// logger.js:54 WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish.finaliseRouting
|
|
144
|
-
// logger.js:39 WORK-AROUND: Updating browser location after pop state - see angular issue #13586
|
|
145
|
-
// navigation-session.ts:129 replacing /activities/dialogs;l=en with /home
|
|
146
|
-
// navigation-session.ts:131 pushing /activities/dialogs;l=en back onto the history.
|
|
147
|
-
// ????? place-router.ts:281 ### Router Session Finished (was WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish(idle: undefined, startingUrl: /activities/dialogs;l=en, clickedLinkUrl: /home, firstCancelEventUrl: /home, clickedLinkMatchedBackButtonUrl: true, popStateEventUrl: undefined))
|
|
148
|
-
// logger.js:28 <-- WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish.finaliseRouting undefined
|
|
149
|
-
// logger.js:28 <-- WaitUntilLinkTriggeredNavigationInteractionCancellationEventsFinish.onRouterEnd undefined
|
|
150
|
-
// ###### Router Event: NavigationStart
|
|
151
|
-
// NavigationStart(id: 7, url: '/home')
|
|
152
|
-
// NavigationStart {id: 7, url: "/home", navigationTrigger: "popstate", restoredState: {…}}
|
|
153
|
-
// logger.js:39 ### Router State Transition: null -> PopStateNavigation(startingUrl: /activities/dialogs;l=en, poppedHistoryUrl: /home)
|
|
154
|
-
// ###### Router Event: RoutesRecognized
|
|
155
|
-
// RoutesRecognized(id: 7, url: '/home', urlAfterRedirects: '/home', state: Route(url:'', path:'') { Route(url:'home', path:'home') } )
|
|
156
|
-
// RoutesRecognized {id: 7, url: "/home", urlAfterRedirects: "/home", state: RouterStateSnapshot}
|
|
157
|
-
// ###### Router Event: GuardsCheckStart
|
|
158
|
-
// GuardsCheckStart(id: 7, url: '/home', urlAfterRedirects: '/home', state: Route(url:'', path:'') { Route(url:'home', path:'home') } )
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC11bnRpbC1saW5rLXRyaWdnZXJlZC1uYXZpZ2F0aW9uLWludGVyYWN0aW9uLWNhbmNlbGF0aW9uLXR5cGUtZGV0ZXJtaW5lZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3BsYWNlL25hdmlnYXRpb24vc2Vzc2lvbi9ldmVudC1jbGVhbnVwL3dhaXQtdW50aWwtbGluay10cmlnZ2VyZWQtbmF2aWdhdGlvbi1pbnRlcmFjdGlvbi1jYW5jZWxhdGlvbi10eXBlLWRldGVybWluZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUtBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9EOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxxRUFBc0UsU0FBUSxtQkFBbUI7SUFRNUcsWUFBWSxPQUEwQixFQUMxQixXQUFtQixFQUNWLGNBQXNCO1FBQ3pDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFEVCxtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQVJsQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRzVCLG9DQUErQixHQUFHLEtBQUssQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsaUNBQWlDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQU01SSxDQUFDO0lBRUQsV0FBVztJQUNYLGVBQWUsQ0FBQyxLQUFzQjtRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO0lBQ1gsaUJBQWlCLENBQUMsS0FBdUI7UUFDdkMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENB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ZXNDb250ZW50IjpbImltcG9ydCB7IE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgUGxhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuLi8uLi8uLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgRXZlbnRDbGVhblVwU2Vzc2lvbiB9IGZyb20gJy4vZXZlbnQtY2xlYW4tdXAtc2Vzc2lvbic7XG5cbi8qKlxuICogVGhpcyBzdGF0ZSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSBhIGxpbmsgbmF2aWdhdGlvbiB0cmlnZ2VyZWQgYW4gaW50ZXJhY3Rpb24gYW5kIHRoZSB1c2VyIGNsaWNrZWQgYmFjayBhIHRvIGNhbmNlbCBpdC5cbiAqIFRoZSByb3V0aW5nIGV2ZW50IHNlcXVlbmNlIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIGxpbmsgdGhhdCB3YXMgY2xpY2tlZC5cbiAqXG4gKiBOT1RFOiBJbiBhbmd1bGFyIHByaW9yIHRvIDEwIHRoZSBzZXF1ZW5jZSBvZiByb3V0aW5nIGV2ZW50cyB3YXMgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgaW5pdGlhbCBsaW5rIHRoYXQgd2FzIGNsaWNrZWQuXG4gKiAgICAgICBUaGlzIGNsYXNzIHVzZWQgaGF2ZSB1Z2xlIGlmL2Vsc2UgY29kZSB0byBoYW5kbGUgaXQgYW5kIGEgbm90IHRoYXQgaXQgc2hvdWxkIGJlIHNwbGl0IGludG8gc3ViIHN0YXRlcy5cbiAqICAgICAgIER1cmluZyB0aGUgdXBkYXRlIHRvIGFuZ3VsYXIgMTAgSSBkaWQgdGhpcyAoYXMgdGhlIHRlc3RzIGZvciB0aGlzIHNjZW5hcmlvIHdlcmUgZmFpbGluZ3MpLiBBZnRlciBkb2luZyBzb1xuICogICAgICAgaXQgYXBwZWFycyB0aGF0IGFuZ3VsYXIgbm93IGJlaGF2ZXMgdGhlIHNhbWUgaW4gYm90aCBjYXNlcy4gQnV0IHJhdGhlciB0aGF0IHJldmVydCB0aGUgY2hhbmdlcyBJJ3ZlIGxlZnQgdGhlXG4gKiAgICAgICBzdWItc3RhdGUgaGFuZGxpbmcgaW4gaW4gY2FzZSBpdCBldmVyIGNvbWVzIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBXYWl0VW50aWxMaW5rVHJpZ2dlcmVkTmF2aWdhdGlvbkludGVyYWN0aW9uQ2FuY2VsbGF0aW9uVHlwZURldGVybWluZWQgZXh0ZW5kcyBFdmVudENsZWFuVXBTZXNzaW9uIHtcblxuICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG4gIGZpcnN0Q2FuY2VsRXZlbnRVcmw6IHN0cmluZztcbiAgcG9wU3RhdGVFdmVudFVybDogc3RyaW5nO1xuICBjbGlja2VkTGlua01hdGNoZWRCYWNrQnV0dG9uVXJsID0gZmFsc2U7XG4gIGRlYnVnUHJvcGVydHlLZXlzID0gWydpZGxlJywgJ3N0YXJ0aW5nVXJsJywgJ2NsaWNrZWRMaW5rVXJsJywgJ2ZpcnN0Q2FuY2VsRXZlbnRVcmwnLCAnY2xpY2tlZExpbmtNYXRjaGVkQmFja0J1dHRvblVybCcsICdwb3BTdGF0ZUV2ZW50VXJsJ107XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogTmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgIHN0YXJ0aW5nVXJsOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGNsaWNrZWRMaW5rVXJsOiBzdHJpbmcpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdGFydGluZ1VybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnVybCA9PT0gdGhpcy5jbGlja2VkTGlua1VybCkge1xuICAgICAgdGhpcy5jb250ZXh0LnRyYW5zaXRpb25UbyhuZXcgV2FpdEZvckxpbmtTYW1lQXNCYWNrVG9QbGF5T3V0KHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCwgdGhpcy5jbGlja2VkTGlua1VybCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRleHQudHJhbnNpdGlvblRvKG5ldyBXYWl0Rm9yTGlua0RpZmZlcmVudEZyb21CYWNrVG9QbGF5T3V0KHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCwgdGhpcy5jbGlja2VkTGlua1VybCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jbGFzcyBXYWl0Rm9yTGlua1NhbWVBc0JhY2tUb1BsYXlPdXQgZXh0ZW5kcyBFdmVudENsZWFuVXBTZXNzaW9uIHtcbiAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuICBwb3BTdGF0ZUV2ZW50VXJsOiBzdHJpbmc7XG4gIGRlYnVnUHJvcGVydHlLZXlzID0gWydpZGxlJywgJ3N0YXJ0aW5nVXJsJywgJ2NsaWNrZWRMaW5rVXJsJywgJ3BvcFN0YXRlRXZlbnRVcmwnXTtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgc3RhcnRpbmdVcmw6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgY2xpY2tlZExpbmtVcmw6IHN0cmluZykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0YXJ0aW5nVXJsKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogdm9pZCB7XG4gICAgdGhpcy5pZ25vcmUoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5pZ25vcmUoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgdGhpcy5wb3BTdGF0ZUV2ZW50VXJsID0gZXZlbnQudXJsO1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgaWYgKHRoaXMucG9wU3RhdGVFdmVudFVybCkge1xuICAgICAgdGhpcy5maW5hbGlzZVJvdXRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBmaW5hbGlzZVJvdXRpbmcoKSB7XG4gICAgdGhpcy5yZXBhaXJCcm93c2VySGlzdG9yeUFuZFVybEFmdGVyR3VhcmRDYW5jZWxsYXRpb24odGhpcy5jbGlja2VkTGlua1VybCwgdGhpcy5zdGFydGluZ1VybCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5maW5pc2hSb3V0aW5nU2Vzc2lvbigpO1xuICB9XG5cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxufVxuXG4vLyBTZWUgdGhlIG5vdGUgYWJvdmUuICBUaGlzIGNsYXNzIGlzIGlkZW50aWNhbCB0byB0aGUgcHJldmlvdXMgYnV0IEkndmUgbGVmdCBpdCBoZXJlIGluIGNhc2UgYW5ndWxhciBkZWNpZGVzIHRvXG4vLyByb3V0ZSBkaWZmZXJlbnRseSBpbiB0aGlzIHNjZW5hcmlvIGdvaW5nIGZvcndhcmQuXG5jbGFzcyBXYWl0Rm9yTGlua0RpZmZlcmVudEZyb21CYWNrVG9QbGF5T3V0IGV4dGVuZHMgRXZlbnRDbGVhblVwU2Vzc2lvbiB7XG4gIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcbiAgcG9wU3RhdGVFdmVudFVybDogc3RyaW5nO1xuICBkZWJ1Z1Byb3BlcnR5S2V5cyA9IFsnaWRsZScsICdzdGFydGluZ1VybCcsICdjbGlja2VkTGlua1VybCcsICdwb3BTdGF0ZUV2ZW50VXJsJ107XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogTmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgIHN0YXJ0aW5nVXJsOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGNsaWNrZWRMaW5rVXJsOiBzdHJpbmcpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdGFydGluZ1VybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgIHRoaXMucG9wU3RhdGVFdmVudFVybCA9IGV2ZW50LnVybDtcbiAgICB0aGlzLmlnbm9yZShldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgIGlmICh0aGlzLnBvcFN0YXRlRXZlbnRVcmwpIHtcbiAgICAgIHRoaXMuZmluYWxpc2VSb3V0aW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgZmluYWxpc2VSb3V0aW5nKCkge1xuICAgIHRoaXMucmVwYWlyQnJvd3Nlckhpc3RvcnlBbmRVcmxBZnRlckd1YXJkQ2FuY2VsbGF0aW9uKHRoaXMuY2xpY2tlZExpbmtVcmwsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQuZmluaXNoUm91dGluZ1Nlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5cbi8vXG4vLyAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246IG51bGwgLT4gTmF2aWdhdGluZyhzdGFydGluZ1VybDogL2FjdGl2aXRpZXMvZGlhbG9ncztsPWVuLCB1cmxBZnRlclJlZGlyZWN0czogdW5kZWZpbmVkKVxuLy8gICMjIyAjIyMjIyMgUm91dGVyIEV2ZW50OiBOYXZpZ2F0aW9uU3RhcnRcbi8vICBOYXZpZ2F0aW9uU3RhcnQoaWQ6IDYsIHVybDogJy9ob21lJylcbi8vICBOYXZpZ2F0aW9uU3RhcnQge2lkOiA2LCB1cmw6IFwiL2hvbWVcIiwgbmF2aWdhdGlvblRyaWdnZXI6IFwiaW1wZXJhdGl2ZVwiLCByZXN0b3JlZFN0YXRlOiBudWxsfVxuLy8gbG9nZ2VyLmpzOjM5IElnbm9yaW5nIHJvdXRlciBldmVudDogTmF2aWdhdGlvblN0YXJ0IC0+IC9ob21lIDo6IE5hdmlnYXRpbmcoc3RhcnRpbmdVcmw6IC9hY3Rpdml0aWVzL2RpYWxvZ3M7bD1lbiwgdXJsQWZ0ZXJSZWRpcmVjdHM6IHVuZGVmaW5lZClcbi8vICAjIyMgIyMjIyMjIFJvdXRlciBFdmVudDogUm91dGVzUmVjb2duaXplZFxuLy8gIFJvdXRlc1JlY29nbml6ZWQoaWQ6IDYsIHVybDogJy9ob21lJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcvaG9tZScsIHN0YXRlOiBSb3V0ZSh1cmw6JycsIHBhdGg6JycpIHsgUm91dGUodXJsOidob21lJywgcGF0aDonaG9tZScpIH0gKVxuLy8gIFJvdXRlc1JlY29nbml6ZWQge2lkOiA2LCB1cmw6IFwiL2hvbWVcIiwgdXJsQWZ0ZXJSZWRpcmVjdHM6IFwiL2hvbWVcIiwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3R9XG4vLyAgIyMjIyMjIFJvdXRlciBFdmVudDogR3VhcmRzQ2hlY2tTdGFydFxuLy8gIEd1YXJkc0NoZWNrU3RhcnQoaWQ6IDYsIHVybDogJy9ob21lJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcvaG9tZScsIHN0YXRlOiBSb3V0ZSh1cmw6JycsIHBhdGg6JycpIHsgUm91dGUodXJsOidob21lJywgcGF0aDonaG9tZScpIH0gKVxuLy8gIEd1YXJkc0NoZWNrU3RhcnQge2lkOiA2LCB1cmw6IFwiL2hvbWVcIiwgdXJsQWZ0ZXJSZWRpcmVjdHM6IFwiL2hvbWVcIiwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3R9XG4vLyBsb2dnZXIuanM6MzkgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2Vcbi8vIGxvZ2dlci5qczozOSBjYW5jZWxsaW5nIGN1cnJlbnQgbmF2aWdhdGlvbiBhY3Rpdml0eS4uXG4vLyAgIGxvZ2dlci5qczozOSAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246IE5hdmlnYXRpbmcoc3RhcnRpbmdVcmw6IC9hY3Rpdml0aWVzL2RpYWxvZ3M7bD1lbiwgdXJsQWZ0ZXJSZWRpcmVjdHM6IHVuZGVmaW5lZCkgLT4gV2FpdFVudGlsTGlua1RyaWdnZXJlZE5hdmlnYXRpb25JbnRlcmFjdGlvbkNhbmNlbGxhdGlvbkV2ZW50c0ZpbmlzaChpZGxlOiB1bmRlZmluZWQsIHN0YXJ0aW5nVXJsOiAvYWN0aXZpdGllcy9kaWFsb2dzO2w9ZW4sIGNsaWNrZWRMaW5rVXJsOiAvaG9tZSwgZmlyc3RDYW5jZWxFdmVudFVybDogdW5kZWZpbmVkLCBjbGlja2VkTGlua01hdGNoZWRCYWNrQnV0dG9uVXJsOiBmYWxzZSwgcG9wU3RhdGVFdmVudFVybDogdW5kZWZpbmVkKVxuLy8gICMjIyMjIyBSb3V0ZXIgRXZlbnQ6IEd1YXJkc0NoZWNrRW5kXG4vLyAgR3VhcmRzQ2hlY2tFbmQoaWQ6IDYsIHVybDogJy9ob21lJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcvaG9tZScsIHN0YXRlOiBSb3V0ZSh1cmw6JycsIHBhdGg6JycpIHsgUm91dGUodXJsOidob21lJywgcGF0aDonaG9tZScpIH0gLCBzaG91bGRBY3RpdmF0ZTogZmFsc2UpXG4vLyAgR3VhcmRzQ2hlY2tFbmQge2lkOiA2LCB1cmw6IFwiL2hvbWVcIiwgdXJsQWZ0ZXJSZWRpcmVjdHM6IFwiL2hvbWVcIiwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsIHNob3VsZEFjdGl2YXRlOiBmYWxzZX1cbi8vICAjIyMjIyMgUm91dGVyIEV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsXG4vLyAgTmF2aWdhdGlvbkNhbmNlbChpZDogNiwgdXJsOiAnL2hvbWUnKVxuLy8gIE5hdmlnYXRpb25DYW5jZWwge2lkOiA2LCB1cmw6IFwiL2hvbWVcIiwgcmVhc29uOiBcIlwifVxuLy8gbG9nZ2VyLmpzOjU0IFdhaXRVbnRpbExpbmtUcmlnZ2VyZWROYXZpZ2F0aW9uSW50ZXJhY3Rpb25DYW5jZWxsYXRpb25FdmVudHNGaW5pc2gub25Sb3V0ZXJDYW5jZWxsZWRcbi8vIGxvZ2dlci5qczoxOSBhcmdzIE5hdmlnYXRpb25DYW5jZWwge2lkOiA2LCB1cmw6IFwiL2hvbWVcIiwgcmVhc29uOiBcIlwifVxuLy8gbG9nZ2VyLmpzOjM5IElnbm9yaW5nIHJvdXRlciBldmVudDogTmF2aWdhdGlvbkNhbmNlbCAtPiAvaG9tZSA6OiBXYWl0VW50aWxMaW5rVHJpZ2dlcmVkTmF2aWdhdGlvbkludGVyYWN0aW9uQ2FuY2VsbGF0aW9uRXZlbnRzRmluaXNoKGlkbGU6IHVuZGVmaW5lZCwgc3RhcnRpbmdVcmw6IC9hY3Rpdml0aWVzL2RpYWxvZ3M7bD1lbiwgY2xpY2tlZExpbmtVcmw6IC9ob21lLCBmaXJzdENhbmNlbEV2ZW50VXJsOiAvaG9tZSwgY2xpY2tlZExpbmtNYXRjaGVkQmFja0J1dHRvblVybDogdHJ1ZSwgcG9wU3RhdGVFdmVudFVybDogdW5kZWZpbmVkKVxuLy8gbG9nZ2VyLmpzOjI4IDwtLSBXYWl0VW50aWxMaW5rVHJpZ2dlcmVkTmF2aWdhdGlvbkludGVyYWN0aW9uQ2FuY2VsbGF0aW9uRXZlbnRzRmluaXNoLm9uUm91dGVyQ2FuY2VsbGVkIHVuZGVmaW5lZFxuLy8gbG9nZ2VyLmpzOjU0IFdhaXRVbnRpbExpbmtUcmlnZ2VyZWROYXZpZ2F0aW9uSW50ZXJhY3Rpb25DYW5jZWxsYXRpb25FdmVudHNGaW5pc2gub25Sb3V0ZXJFbmRcbi8vIGxvZ2dlci5qczoxOSBhcmdzIE5hdmlnYXRpb25FbmQge2lkOiAtMSwgdXJsOiBcIlwiLCB1cmxBZnRlclJlZGlyZWN0czogXCJcIn1cbi8vIGxvZ2dlci5qczo1NCBXYWl0VW50aWxMaW5rVHJpZ2dlcmVkTmF2aWdhdGlvbkludGVyYWN0aW9uQ2FuY2VsbGF0aW9uRXZlbnRzRmluaXNoLmZpbmFsaXNlUm91dGluZ1xuLy8gbG9nZ2VyLmpzOjM5IFdPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NlxuLy8gbmF2aWdhdGlvbi1zZXNzaW9uLnRzOjEyOSByZXBsYWNpbmcgL2FjdGl2aXRpZXMvZGlhbG9ncztsPWVuIHdpdGggL2hvbWVcbi8vICAgbmF2aWdhdGlvbi1zZXNzaW9uLnRzOjEzMSBwdXNoaW5nIC9hY3Rpdml0aWVzL2RpYWxvZ3M7bD1lbiBiYWNrIG9udG8gdGhlIGhpc3RvcnkuXG4vLyAgPz8/Pz8gcGxhY2Utcm91dGVyLnRzOjI4MSAjIyMgUm91dGVyIFNlc3Npb24gRmluaXNoZWQgKHdhcyBXYWl0VW50aWxMaW5rVHJpZ2dlcmVkTmF2aWdhdGlvbkludGVyYWN0aW9uQ2FuY2VsbGF0aW9uRXZlbnRzRmluaXNoKGlkbGU6IHVuZGVmaW5lZCwgc3RhcnRpbmdVcmw6IC9hY3Rpdml0aWVzL2RpYWxvZ3M7bD1lbiwgY2xpY2tlZExpbmtVcmw6IC9ob21lLCBmaXJzdENhbmNlbEV2ZW50VXJsOiAvaG9tZSwgY2xpY2tlZExpbmtNYXRjaGVkQmFja0J1dHRvblVybDogdHJ1ZSwgcG9wU3RhdGVFdmVudFVybDogdW5kZWZpbmVkKSlcbi8vIGxvZ2dlci5qczoyOCA8LS0gV2FpdFVudGlsTGlua1RyaWdnZXJlZE5hdmlnYXRpb25JbnRlcmFjdGlvbkNhbmNlbGxhdGlvbkV2ZW50c0ZpbmlzaC5maW5hbGlzZVJvdXRpbmcgdW5kZWZpbmVkXG4vLyBsb2dnZXIuanM6MjggPC0tIFdhaXRVbnRpbExpbmtUcmlnZ2VyZWROYXZpZ2F0aW9uSW50ZXJhY3Rpb25DYW5jZWxsYXRpb25FdmVudHNGaW5pc2gub25Sb3V0ZXJFbmQgdW5kZWZpbmVkXG4vLyAgIyMjIyMjIFJvdXRlciBFdmVudDogTmF2aWdhdGlvblN0YXJ0XG4vLyAgTmF2aWdhdGlvblN0YXJ0KGlkOiA3LCB1cmw6ICcvaG9tZScpXG4vLyAgTmF2aWdhdGlvblN0YXJ0IHtpZDogNywgdXJsOiBcIi9ob21lXCIsIG5hdmlnYXRpb25UcmlnZ2VyOiBcInBvcHN0YXRlXCIsIHJlc3RvcmVkU3RhdGU6IHvigKZ9fVxuLy8gbG9nZ2VyLmpzOjM5ICMjIyBSb3V0ZXIgU3RhdGUgVHJhbnNpdGlvbjogbnVsbCAtPiBQb3BTdGF0ZU5hdmlnYXRpb24oc3RhcnRpbmdVcmw6IC9hY3Rpdml0aWVzL2RpYWxvZ3M7bD1lbiwgcG9wcGVkSGlzdG9yeVVybDogL2hvbWUpXG4vLyAgIyMjIyMjIFJvdXRlciBFdmVudDogUm91dGVzUmVjb2duaXplZFxuLy8gIFJvdXRlc1JlY29nbml6ZWQoaWQ6IDcsIHVybDogJy9ob21lJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcvaG9tZScsIHN0YXRlOiBSb3V0ZSh1cmw6JycsIHBhdGg6JycpIHsgUm91dGUodXJsOidob21lJywgcGF0aDonaG9tZScpIH0gKVxuLy8gIFJvdXRlc1JlY29nbml6ZWQge2lkOiA3LCB1cmw6IFwiL2hvbWVcIiwgdXJsQWZ0ZXJSZWRpcmVjdHM6IFwiL2hvbWVcIiwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3R9XG4vLyAgIyMjIyMjIFJvdXRlciBFdmVudDogR3VhcmRzQ2hlY2tTdGFydFxuLy8gIEd1YXJkc0NoZWNrU3RhcnQoaWQ6IDcsIHVybDogJy9ob21lJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcvaG9tZScsIHN0YXRlOiBSb3V0ZSh1cmw6JycsIHBhdGg6JycpIHsgUm91dGUodXJsOidob21lJywgcGF0aDonaG9tZScpIH0gKVxuIl19
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { EventCleanUpSession } from './event-clean-up-session';
|
|
3
|
-
/**
|
|
4
|
-
* This state handles the scenario where a pop state triggered and interaction and the user clickeb back a second time to cancel it.
|
|
5
|
-
* The sequence of routing events/state transitions is as follows.
|
|
6
|
-
* -> Idle -> PopStateTransition (poppedHistoryUrl == page to go to, startingUrl = page to stay on )
|
|
7
|
-
* -> confirm dialog shown.
|
|
8
|
-
* -> click back
|
|
9
|
-
* -> PopStateTransition -> CancelledDuringBackButtonNavigationInteraction(trigger url is the page before the popped history url)
|
|
10
|
-
* -> NavigationCancel (for the previous back)
|
|
11
|
-
* -> PopState
|
|
12
|
-
* -> NavigationCancel
|
|
13
|
-
*/
|
|
14
|
-
export class WaitUntilPopStateDuringCanDeactivateInteractionFinishes extends EventCleanUpSession {
|
|
15
|
-
constructor(context, startingUrl, locationChangeTriggerUrl, poppedHistoryUrl) {
|
|
16
|
-
super(context, startingUrl);
|
|
17
|
-
this.locationChangeTriggerUrl = locationChangeTriggerUrl;
|
|
18
|
-
this.poppedHistoryUrl = poppedHistoryUrl;
|
|
19
|
-
this.isPopState = false;
|
|
20
|
-
this.firstCancelHandled = false;
|
|
21
|
-
this.popStateHandled = false;
|
|
22
|
-
this.debugPropertyKeys = ['idle', 'startingUrl', 'poppedHistoryUrl', 'locationChangeTriggerUrl', 'popStateEventUrl', 'firstCancelHandled', 'popStateHandled'];
|
|
23
|
-
}
|
|
24
|
-
// @Trace()
|
|
25
|
-
onRouterStarted(event) {
|
|
26
|
-
this.ignore(event);
|
|
27
|
-
}
|
|
28
|
-
// @Trace()
|
|
29
|
-
onRouterCancelled(event) {
|
|
30
|
-
if (!this.firstCancelHandled) {
|
|
31
|
-
this.firstCancelHandled = true;
|
|
32
|
-
this.parentPageUrl = event.url;
|
|
33
|
-
this.ignore(event);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
if (this.popStateHandled) {
|
|
37
|
-
const grandParentPageUrl = event.url;
|
|
38
|
-
this.repairBrowserHistoryAndUrlAfterGuardCancellation(grandParentPageUrl, this.parentPageUrl);
|
|
39
|
-
// we've had one more back click than normal so we need to add our initial url back in as well.
|
|
40
|
-
this.resetBrowserLocation(this.startingUrl, { replaceCurrent: false });
|
|
41
|
-
return this.context.finishRoutingSession();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// @Trace()
|
|
46
|
-
onRouterEnd(event) {
|
|
47
|
-
this.ignore(event);
|
|
48
|
-
}
|
|
49
|
-
// @Trace()
|
|
50
|
-
onRouterError(event) {
|
|
51
|
-
void this.ignore(event);
|
|
52
|
-
}
|
|
53
|
-
// @Trace()
|
|
54
|
-
onPopState(event) {
|
|
55
|
-
this.popStateHandled = true;
|
|
56
|
-
this.popStateEventUrl = event.url;
|
|
57
|
-
this.ignore(event);
|
|
58
|
-
}
|
|
59
|
-
canDeactivatePlace(component, currentUrl, nextUrl) {
|
|
60
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
return false;
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC11bnRpbC1wb3BzdGF0ZS1kdXJpbmctY2FuLWRlYWN0aXZhdGUtdHJhbnNpdGlvbi1maW5pc2hlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3BsYWNlL25hdmlnYXRpb24vc2Vzc2lvbi9ldmVudC1jbGVhbnVwL3dhaXQtdW50aWwtcG9wc3RhdGUtZHVyaW5nLWNhbi1kZWFjdGl2YXRlLXRyYW5zaXRpb24tZmluaXNoZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUtBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9EOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sdURBQXdELFNBQVEsbUJBQW1CO0lBUzlGLFlBQVksT0FBMEIsRUFDMUIsV0FBbUIsRUFDVix3QkFBZ0MsRUFDaEMsZ0JBQXdCO1FBQzNDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFGVCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQVE7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBVnBDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLHNCQUFpQixHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBUXpKLENBQUM7SUFFRCxXQUFXO0lBQ1gsZUFBZSxDQUFDLEtBQXNCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7SUFDWCxpQkFBaUIsQ0FBQyxLQUF1QjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEI7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM5RiwrRkFBK0Y7Z0JBQy9GLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUMsY0FBYyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7Z0JBQ3JFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzVDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVztJQUNYLFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO0lBQ1gsYUFBYSxDQUFDLEtBQXNCO1FBQ2xDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztJQUNYLFVBQVUsQ0FBQyxLQUFzQjtRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFSyxrQkFBa0IsQ0FBQyxTQUF5QixFQUFFLFVBQXVCLEVBQUUsT0FBb0I7O1lBQy9GLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMb2dnZXIsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgUGxhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuLi8uLi8uLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgRXZlbnRDbGVhblVwU2Vzc2lvbiB9IGZyb20gJy4vZXZlbnQtY2xlYW4tdXAtc2Vzc2lvbic7XG5cbi8qKlxuICogVGhpcyBzdGF0ZSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSBhIHBvcCBzdGF0ZSB0cmlnZ2VyZWQgYW5kIGludGVyYWN0aW9uIGFuZCB0aGUgdXNlciBjbGlja2ViIGJhY2sgYSBzZWNvbmQgdGltZSB0byBjYW5jZWwgaXQuXG4gKiBUaGUgc2VxdWVuY2Ugb2Ygcm91dGluZyBldmVudHMvc3RhdGUgdHJhbnNpdGlvbnMgaXMgYXMgZm9sbG93cy5cbiAqIC0+IElkbGUgLT4gUG9wU3RhdGVUcmFuc2l0aW9uIChwb3BwZWRIaXN0b3J5VXJsID09IHBhZ2UgdG8gZ28gdG8sIHN0YXJ0aW5nVXJsID0gcGFnZSB0byBzdGF5IG9uIClcbiAqIC0+IGNvbmZpcm0gZGlhbG9nIHNob3duLlxuICogLT4gY2xpY2sgYmFja1xuICogLT4gUG9wU3RhdGVUcmFuc2l0aW9uIC0+IENhbmNlbGxlZER1cmluZ0JhY2tCdXR0b25OYXZpZ2F0aW9uSW50ZXJhY3Rpb24odHJpZ2dlciB1cmwgaXMgdGhlIHBhZ2UgYmVmb3JlIHRoZSBwb3BwZWQgaGlzdG9yeSB1cmwpXG4gKiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIChmb3IgdGhlIHByZXZpb3VzIGJhY2spXG4gKiAtPiBQb3BTdGF0ZVxuICogLT4gTmF2aWdhdGlvbkNhbmNlbFxuICovXG5leHBvcnQgY2xhc3MgV2FpdFVudGlsUG9wU3RhdGVEdXJpbmdDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25GaW5pc2hlcyBleHRlbmRzIEV2ZW50Q2xlYW5VcFNlc3Npb24ge1xuXG4gIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcbiAgZmlyc3RDYW5jZWxIYW5kbGVkID0gZmFsc2U7XG4gIHBvcFN0YXRlSGFuZGxlZCA9IGZhbHNlO1xuICBwb3BTdGF0ZUV2ZW50VXJsOiBzdHJpbmc7XG4gIGRlYnVnUHJvcGVydHlLZXlzID0gWydpZGxlJywgJ3N0YXJ0aW5nVXJsJywgJ3BvcHBlZEhpc3RvcnlVcmwnLCAnbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsJywgJ3BvcFN0YXRlRXZlbnRVcmwnLCAnZmlyc3RDYW5jZWxIYW5kbGVkJywgJ3BvcFN0YXRlSGFuZGxlZCddO1xuICBwcml2YXRlIHBhcmVudFBhZ2VVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgc3RhcnRpbmdVcmw6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHBvcHBlZEhpc3RvcnlVcmw6IHN0cmluZykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0YXJ0aW5nVXJsKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgdGhpcy5pZ25vcmUoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmlyc3RDYW5jZWxIYW5kbGVkKSB7XG4gICAgICB0aGlzLmZpcnN0Q2FuY2VsSGFuZGxlZCA9IHRydWU7XG4gICAgICB0aGlzLnBhcmVudFBhZ2VVcmwgPSBldmVudC51cmw7XG4gICAgICB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnBvcFN0YXRlSGFuZGxlZCkge1xuICAgICAgICBjb25zdCBncmFuZFBhcmVudFBhZ2VVcmwgPSBldmVudC51cmw7XG4gICAgICAgIHRoaXMucmVwYWlyQnJvd3Nlckhpc3RvcnlBbmRVcmxBZnRlckd1YXJkQ2FuY2VsbGF0aW9uKGdyYW5kUGFyZW50UGFnZVVybCwgdGhpcy5wYXJlbnRQYWdlVXJsKTtcbiAgICAgICAgLy8gd2UndmUgaGFkIG9uZSBtb3JlIGJhY2sgY2xpY2sgdGhhbiBub3JtYWwgc28gd2UgbmVlZCB0byBhZGQgb3VyIGluaXRpYWwgdXJsIGJhY2sgaW4gYXMgd2VsbC5cbiAgICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnN0YXJ0aW5nVXJsLCB7cmVwbGFjZUN1cnJlbnQ6IGZhbHNlfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuZmluaXNoUm91dGluZ1Nlc3Npb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5pZ25vcmUoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgdGhpcy5wb3BTdGF0ZUhhbmRsZWQgPSB0cnVlO1xuICAgIHRoaXMucG9wU3RhdGVFdmVudFVybCA9IGV2ZW50LnVybDtcbiAgICB0aGlzLmlnbm9yZShldmVudCk7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { GarbageCollector, lang, Logger } from '@coolon/pectin';
|
|
3
|
-
import { PlaceComponentDeactivationHandler } from '../place-component-deactivation-handler';
|
|
4
|
-
/**
|
|
5
|
-
* Transient states
|
|
6
|
-
*/
|
|
7
|
-
export class NavigationSession extends GarbageCollector {
|
|
8
|
-
constructor(context, startingUrl) {
|
|
9
|
-
super();
|
|
10
|
-
this.context = context;
|
|
11
|
-
this.startingUrl = startingUrl;
|
|
12
|
-
this.debugPropertyKeys = [];
|
|
13
|
-
this._visits = new Map();
|
|
14
|
-
this.componentDeactivationHandlers = new Map();
|
|
15
|
-
// TODO: can I get away without creating one every time?
|
|
16
|
-
this._interactionContext = this.context.routerInteractionAdapter.createExclusiveInteractionContext();
|
|
17
|
-
this.onDispose(() => {
|
|
18
|
-
// the interaction context can be detached during the back button cancellation state transition
|
|
19
|
-
// as the transition is synchronous and activityCancellation isn't. Otherwise dispose will be
|
|
20
|
-
// called before the context has been cancelled. It might be work having the interaction context
|
|
21
|
-
// automatically cancel if the context is disposed so we don't have worry about detaching etc.
|
|
22
|
-
if (this._interactionContext) {
|
|
23
|
-
this._interactionContext.dispose(); // or do something like cancelAndDispose?
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
get name() {
|
|
28
|
-
return this.constructor.name;
|
|
29
|
-
}
|
|
30
|
-
get urlService() {
|
|
31
|
-
return this.context.urlService;
|
|
32
|
-
}
|
|
33
|
-
get interactionServiceAdapter() {
|
|
34
|
-
return this.context.routerInteractionAdapter;
|
|
35
|
-
}
|
|
36
|
-
storeVisit(visit) {
|
|
37
|
-
// console.log(`Storing visit for ${visit.placeDefinition.component.name}`, {visit});
|
|
38
|
-
this._visits.set(visit.placeDefinition, visit);
|
|
39
|
-
}
|
|
40
|
-
getVisitFor(placeDef) {
|
|
41
|
-
const visit = this._visits.get(placeDef);
|
|
42
|
-
// console.log(`Getting visit for ${placeDef.component.name}`, {visit});
|
|
43
|
-
return visit;
|
|
44
|
-
}
|
|
45
|
-
get canDeactivateInteractionContext() {
|
|
46
|
-
return this._interactionContext;
|
|
47
|
-
}
|
|
48
|
-
notifyActive() {
|
|
49
|
-
// noop.
|
|
50
|
-
}
|
|
51
|
-
onRouterStarted(event) {
|
|
52
|
-
// navigation sessions can have many cancel start cycles due to place guard redirects
|
|
53
|
-
this.ignore(event);
|
|
54
|
-
}
|
|
55
|
-
// @Trace()
|
|
56
|
-
onUrlChange(url) {
|
|
57
|
-
// Normally we just ignore these but they are the only way of detecting if the back button
|
|
58
|
-
// was clicked during a canDeactivate promise.
|
|
59
|
-
// 1. a route is in progress and awaiting a canDeactivateGuard
|
|
60
|
-
// 2. the user the clicks the back button.
|
|
61
|
-
// So to handle that scenario we need to check if we've got a can deactivate interaction in
|
|
62
|
-
// progress and the do the appropriate clean up.
|
|
63
|
-
if (this.canDeactivateInteractionContext && this.canDeactivateInteractionContext.isActive()) {
|
|
64
|
-
this.cancelCanDeactivateInteraction(url);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
onPopState(event) {
|
|
68
|
-
return this.illegalTransition(event);
|
|
69
|
-
}
|
|
70
|
-
onRouterCancelled(event) {
|
|
71
|
-
return this.illegalTransition(event);
|
|
72
|
-
}
|
|
73
|
-
onRouterError(event) {
|
|
74
|
-
return this.illegalTransition(event);
|
|
75
|
-
}
|
|
76
|
-
onRouterEnd(event) {
|
|
77
|
-
return this.illegalTransition(event);
|
|
78
|
-
}
|
|
79
|
-
getVisits() {
|
|
80
|
-
return Array.from(this._visits.values());
|
|
81
|
-
}
|
|
82
|
-
illegalTransition(message) {
|
|
83
|
-
return lang.illegalState(`${message.toString()} not supported by ${this.toString()}`);
|
|
84
|
-
}
|
|
85
|
-
currentRouterUrl() {
|
|
86
|
-
return this.urlService.getCurrentRouterUrl();
|
|
87
|
-
}
|
|
88
|
-
resetBrowserLocation(url, options = { replaceCurrent: false }) {
|
|
89
|
-
// console.log(`---> resetting browser location to: ${url}`);
|
|
90
|
-
this.urlService.resetBrowserLocation(url, options);
|
|
91
|
-
}
|
|
92
|
-
// @Trace()
|
|
93
|
-
repairBrowserHistoryAndUrlAfterGuardCancellation(poppedHistoryToReplace, activeUrl) {
|
|
94
|
-
// Important: I tried to perform this fix at a later point int he routing cycle but it created all kinds of
|
|
95
|
-
// strangeness.
|
|
96
|
-
Logger.get(this).info('WORK-AROUND: Updating browser location after pop state - see angular issue #13586');
|
|
97
|
-
// console.log(`replacing ${this.urlService.getCurrentLocationUrlSnapshot().url} with ${poppedHistoryToReplace}`);
|
|
98
|
-
this.urlService.resetBrowserLocation(poppedHistoryToReplace, { replaceCurrent: true });
|
|
99
|
-
// console.log(`pushing ${activeUrl} back onto the history.`);
|
|
100
|
-
this.urlService.resetBrowserLocation(activeUrl, { replaceCurrent: false });
|
|
101
|
-
}
|
|
102
|
-
ignore(event, reason) {
|
|
103
|
-
reason = reason ? ` -> ${reason}` : '';
|
|
104
|
-
// Logger.get(this).info(`Ignoring router event${reason}: ${event.constructor.name} -> ${event.url} :: ${this.toString()}`);
|
|
105
|
-
}
|
|
106
|
-
toString() {
|
|
107
|
-
return `${this.constructor.name}(${this.debugState()})`;
|
|
108
|
-
}
|
|
109
|
-
debugState(properties) {
|
|
110
|
-
return (properties || this.debugPropertyKeys).map(p => {
|
|
111
|
-
return `${p}: ${this[p]}`;
|
|
112
|
-
}).join(', ');
|
|
113
|
-
}
|
|
114
|
-
canDeactivatePlace(component, currentUrl, nextUrl) {
|
|
115
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
116
|
-
// console.log(`---> canDeactivatePlace(${component.placeDefinition.path}, ${currentUrl.url} -> ${nextUrl.url})`);
|
|
117
|
-
// lookup the handler and create it if we've not seen it yet
|
|
118
|
-
let handler = this.componentDeactivationHandlers.get(component);
|
|
119
|
-
if (!handler) {
|
|
120
|
-
const isPrimaryHandler = this.componentDeactivationHandlers.size === 0; // only primary handler cancels the app model interations
|
|
121
|
-
handler = new PlaceComponentDeactivationHandler(component, this, isPrimaryHandler);
|
|
122
|
-
this.componentDeactivationHandlers.set(component, handler);
|
|
123
|
-
}
|
|
124
|
-
return handler.canDeactivate(currentUrl, nextUrl).then(result => {
|
|
125
|
-
// console.log(`<--- canDeactivatePlace(${component.placeDefinition.path}): ${result}`);
|
|
126
|
-
return result;
|
|
127
|
-
}).catch(error => {
|
|
128
|
-
throw error;
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
cancelCanDeactivateInteraction(newUrl) {
|
|
133
|
-
Logger.get(this).info(`back button pressed during navigation session interaction promise`);
|
|
134
|
-
// detach the interaction from the session so it doesn't get disposed until the activity has finished
|
|
135
|
-
// all it's things.
|
|
136
|
-
const canDeactivateInteractionContext = this.detachCanDeactivateInteractionContext();
|
|
137
|
-
// TODO: I need to make the exclusive interaction context disallow nested activities or
|
|
138
|
-
// that would mess things up entirely. Or, can I do a context.abortAll().then(..)
|
|
139
|
-
Logger.get(this).info('cancelling current navigation activity..');
|
|
140
|
-
canDeactivateInteractionContext.cancelActiveActivity().then(() => {
|
|
141
|
-
canDeactivateInteractionContext.dispose();
|
|
142
|
-
});
|
|
143
|
-
this.handleCanDeactivateCancelledEventScenario(newUrl);
|
|
144
|
-
}
|
|
145
|
-
reinstateUrlAfterAngularChangedItOnCancellation(url) {
|
|
146
|
-
// Angular calls _this.resetUrlToCurrentUrlTree() on cancelling and fucks our history.
|
|
147
|
-
// So this means that the top of the stack is the url we want to go back to, and not the one that was on
|
|
148
|
-
// it before the cancel event fired.
|
|
149
|
-
// So we need to:
|
|
150
|
-
// - replace the just inserted url with the one that used to be there.
|
|
151
|
-
// - push our actual url back onto the top of the stack.
|
|
152
|
-
this.resetBrowserLocation(url, { replaceCurrent: true });
|
|
153
|
-
}
|
|
154
|
-
detachCanDeactivateInteractionContext() {
|
|
155
|
-
const context = this._interactionContext;
|
|
156
|
-
this._interactionContext = null;
|
|
157
|
-
return context;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFPLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQVE1RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUc1Rjs7R0FFRztBQUNILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsZ0JBQWdCO0lBVTlELFlBQXFCLE9BQTBCLEVBQVcsV0FBbUI7UUFDM0UsS0FBSyxFQUFFLENBQUM7UUFEVyxZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUFXLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBUjdFLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUN6QixZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7UUFFNUMsa0NBQTZCLEdBQUcsSUFBSSxHQUFHLEVBQXFELENBQUM7UUFPbkcsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDckcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsK0ZBQStGO1lBQy9GLDhGQUE4RjtZQUM5RixpR0FBaUc7WUFDakcsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7YUFDOUU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FB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TSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlckV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERzbCwgR2FyYmFnZUNvbGxlY3RvciwgbGFuZywgTG9nZ2VyLCBUcmFjZSB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IEludGVyYWN0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi1zZXJ2aWNlLXJvdXRpbmctYWRhcHRlcic7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BsYWNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFjZURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7IFVybFNlcnZpY2UgfSBmcm9tICcuLi8uLi91cmwtc2VydmljZSc7XG5pbXBvcnQgeyBVcmxTbmFwc2hvdCB9IGZyb20gJy4uLy4uL3VybC1zbmFwc2hvdCc7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4uLy4uL3Zpc2l0JztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlciB9IGZyb20gJy4uL3BsYWNlLWNvbXBvbmVudC1kZWFjdGl2YXRpb24taGFuZGxlcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gJy4vbmF2aWdhdGlvbi1jb250ZXh0JztcblxuLyoqXG4gKiBUcmFuc2llbnQgc3RhdGVzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uU2Vzc2lvbiBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIGRlYnVnUHJvcGVydHlLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF92aXNpdHMgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXQ+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycyA9IG5ldyBNYXA8UGxhY2VDb21wb25lbnQsIFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcj4oKTtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNQb3BTdGF0ZTogYm9vbGVhbjtcblxuICBwcml2YXRlIF9pbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dCwgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVE9ETzogY2FuIEkgZ2V0IGF3YXkgd2l0aG91dCBjcmVhdGluZyBvbmUgZXZlcnkgdGltZT9cbiAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLmNyZWF0ZUV4Y2x1c2l2ZUludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMub25EaXNwb3NlKCgpID0+IHtcbiAgICAgIC8vIHRoZSBpbnRlcmFjdGlvbiBjb250ZXh0IGNhbiBiZSBkZXRhY2hlZCBkdXJpbmcgdGhlIGJhY2sgYnV0dG9uIGNhbmNlbGxhdGlvbiBzdGF0ZSB0cmFuc2l0aW9uXG4gICAgICAvLyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgYWN0aXZpdHlDYW5jZWxsYXRpb24gaXNuJ3QuICBPdGhlcndpc2UgZGlzcG9zZSB3aWxsIGJlXG4gICAgICAvLyBjYWxsZWQgYmVmb3JlIHRoZSBjb250ZXh0IGhhcyBiZWVuIGNhbmNlbGxlZC4gIEl0IG1pZ2h0IGJlIHdvcmsgaGF2aW5nIHRoZSBpbnRlcmFjdGlvbiBjb250ZXh0XG4gICAgICAvLyBhdXRvbWF0aWNhbGx5IGNhbmNlbCBpZiB0aGUgY29udGV4dCBpcyBkaXNwb3NlZCBzbyB3ZSBkb24ndCBoYXZlIHdvcnJ5IGFib3V0IGRldGFjaGluZyBldGMuXG4gICAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25Db250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dC5kaXNwb3NlKCk7IC8vIG9yIGRvIHNvbWV0aGluZyBsaWtlIGNhbmNlbEFuZERpc3Bvc2U/XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBnZXQgdXJsU2VydmljZSgpOiBVcmxTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnVybFNlcnZpY2U7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpb25TZXJ2aWNlQWRhcHRlcigpOiBJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5yb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXI7XG4gIH1cblxuICBzdG9yZVZpc2l0KHZpc2l0OiBWaXNpdCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBTdG9yaW5nIHZpc2l0IGZvciAke3Zpc2l0LnBsYWNlRGVmaW5pdGlvbi5jb21wb25lbnQubmFtZX1gLCB7dmlzaXR9KTtcbiAgICB0aGlzLl92aXNpdHMuc2V0KHZpc2l0LnBsYWNlRGVmaW5pdGlvbiwgdmlzaXQpO1xuICB9XG5cblxuICBnZXRWaXNpdEZvcihwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLl92aXNpdHMuZ2V0KHBsYWNlRGVmKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgR2V0dGluZyB2aXNpdCBmb3IgJHtwbGFjZURlZi5jb21wb25lbnQubmFtZX1gLCB7dmlzaXR9KTtcbiAgICByZXR1cm4gdmlzaXQ7XG4gIH1cblxuICBnZXQgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQ7XG4gIH1cblxuICBub3RpZnlBY3RpdmUoKSB7XG4gICAgLy8gbm9vcC5cbiAgfVxuXG4gIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgLy8gbmF2aWdhdGlvbiBzZXNzaW9ucyBjYW4gaGF2ZSBtYW55IGNhbmNlbCBzdGFydCBjeWNsZXMgZHVlIHRvIHBsYWNlIGd1YXJkIHJlZGlyZWN0c1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlKHVybDogc3RyaW5nKSB7XG4gICAgLy8gTm9ybWFsbHkgd2UganVzdCBpZ25vcmUgdGhlc2UgYnV0IHRoZXkgYXJlIHRoZSBvbmx5IHdheSBvZiBkZXRlY3RpbmcgaWYgdGhlIGJhY2sgYnV0dG9uXG4gICAgLy8gd2FzIGNsaWNrZWQgZHVyaW5nIGEgY2FuRGVhY3RpdmF0ZSBwcm9taXNlLlxuICAgIC8vIDEuIGEgcm91dGUgaXMgaW4gcHJvZ3Jlc3MgYW5kIGF3YWl0aW5nIGEgY2FuRGVhY3RpdmF0ZUd1YXJkXG4gICAgLy8gMi4gdGhlIHVzZXIgdGhlIGNsaWNrcyB0aGUgYmFjayBidXR0b24uXG4gICAgLy8gU28gdG8gaGFuZGxlIHRoYXQgc2NlbmFyaW8gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSd2ZSBnb3QgYSBjYW4gZGVhY3RpdmF0ZSBpbnRlcmFjdGlvbiBpblxuICAgIC8vIHByb2dyZXNzIGFuZCB0aGUgZG8gdGhlIGFwcHJvcHJpYXRlIGNsZWFuIHVwLlxuICAgIGlmICh0aGlzLmNhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQgJiYgdGhpcy5jYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmlzQWN0aXZlKCkpIHtcbiAgICAgIHRoaXMuY2FuY2VsQ2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uKHVybCk7XG4gICAgfVxuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIGdldFZpc2l0cygpOiBWaXNpdFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl92aXNpdHMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlsbGVnYWxUcmFuc2l0aW9uPFI+KG1lc3NhZ2U6IHN0cmluZyB8IFJvdXRlckV2ZW50KTogUiB7XG4gICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGAke21lc3NhZ2UudG9TdHJpbmcoKX0gbm90IHN1cHBvcnRlZCBieSAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjdXJyZW50Um91dGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCk7XG4gIH1cblxuICByZXNldEJyb3dzZXJMb2NhdGlvbih1cmwsIG9wdGlvbnM6IHsgcmVwbGFjZUN1cnJlbnQ6IGJvb2xlYW4gfSA9IHsgcmVwbGFjZUN1cnJlbnQ6IGZhbHNlIH0pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiByZXNldHRpbmcgYnJvd3NlciBsb2NhdGlvbiB0bzogJHt1cmx9YCk7XG4gICAgdGhpcy51cmxTZXJ2aWNlLnJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwcm90ZWN0ZWQgcmVwYWlyQnJvd3Nlckhpc3RvcnlBbmRVcmxBZnRlckd1YXJkQ2FuY2VsbGF0aW9uKHBvcHBlZEhpc3RvcnlUb1JlcGxhY2U6IHN0cmluZywgYWN0aXZlVXJsOnN0cmluZyk6IHZvaWQge1xuICAgIC8vIEltcG9ydGFudDogSSB0cmllZCB0byBwZXJmb3JtIHRoaXMgZml4IGF0IGEgbGF0ZXIgcG9pbnQgaW50IGhlIHJvdXRpbmcgY3ljbGUgYnV0IGl0IGNyZWF0ZWQgYWxsIGtpbmRzIG9mXG4gICAgLy8gc3RyYW5nZW5lc3MuXG4gICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKCdXT1JLLUFST1VORDogVXBkYXRpbmcgYnJvd3NlciBsb2NhdGlvbiBhZnRlciBwb3Agc3RhdGUgLSBzZWUgYW5ndWxhciBpc3N1ZSAjMTM1ODYnKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgcmVwbGFjaW5nICR7dGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvblVybFNuYXBzaG90KCkudXJsfSB3aXRoICR7cG9wcGVkSGlzdG9yeVRvUmVwbGFjZX1gKTtcbiAgICB0aGlzLnVybFNlcnZpY2UucmVzZXRCcm93c2VyTG9jYXRpb24ocG9wcGVkSGlzdG9yeVRvUmVwbGFjZSwgeyByZXBsYWNlQ3VycmVudDogdHJ1ZSB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhgcHVzaGluZyAke2FjdGl2ZVVybH0gYmFjayBvbnRvIHRoZSBoaXN0b3J5LmApO1xuICAgIHRoaXMudXJsU2VydmljZS5yZXNldEJyb3dzZXJMb2NhdGlvbihhY3RpdmVVcmwsIHsgcmVwbGFjZUN1cnJlbnQ6IGZhbHNlIH0pO1xuICB9XG5cblxuICBpZ25vcmUoZXZlbnQ6IFJvdXRlckV2ZW50LCByZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZWFzb24gPSByZWFzb24gPyBgIC0+ICR7cmVhc29ufWAgOiAnJztcbiAgICAvLyBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYElnbm9yaW5nIHJvdXRlciBldmVudCR7cmVhc29ufTogJHtldmVudC5jb25zdHJ1Y3Rvci5uYW1lfSAtPiAke2V2ZW50LnVybH0gOjogJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KCR7dGhpcy5kZWJ1Z1N0YXRlKCl9KWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVidWdTdGF0ZShwcm9wZXJ0aWVzPzogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gKHByb3BlcnRpZXMgfHwgdGhpcy5kZWJ1Z1Byb3BlcnR5S2V5cykubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIGAke3B9OiAke3RoaXNbcF19YDtcbiAgICB9KS5qb2luKCcsICcpO1xuICB9XG5cbiAgYXN5bmMgY2FuRGVhY3RpdmF0ZVBsYWNlKGNvbXBvbmVudDogUGxhY2VDb21wb25lbnQsIGN1cnJlbnRVcmw6IFVybFNuYXBzaG90LCBuZXh0VXJsOiBVcmxTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFNuYXBzaG90PiB7XG4gICAgLy8gY29uc29sZS5sb2coYC0tLT4gY2FuRGVhY3RpdmF0ZVBsYWNlKCR7Y29tcG9uZW50LnBsYWNlRGVmaW5pdGlvbi5wYXRofSwgJHtjdXJyZW50VXJsLnVybH0gLT4gJHtuZXh0VXJsLnVybH0pYCk7XG4gICAgLy8gbG9va3VwIHRoZSBoYW5kbGVyIGFuZCBjcmVhdGUgaXQgaWYgd2UndmUgbm90IHNlZW4gaXQgeWV0XG4gICAgbGV0IGhhbmRsZXIgPSB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLmdldChjb21wb25lbnQpO1xuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgY29uc3QgaXNQcmltYXJ5SGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2l6ZSA9PT0gMDsgLy8gb25seSBwcmltYXJ5IGhhbmRsZXIgY2FuY2VscyB0aGUgYXBwIG1vZGVsIGludGVyYXRpb25zXG4gICAgICBoYW5kbGVyID0gbmV3IFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcihjb21wb25lbnQsIHRoaXMsIGlzUHJpbWFyeUhhbmRsZXIpO1xuICAgICAgdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5zZXQoY29tcG9uZW50LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZXIuY2FuRGVhY3RpdmF0ZShjdXJyZW50VXJsLCBuZXh0VXJsKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgPC0tLSBjYW5EZWFjdGl2YXRlUGxhY2UoJHtjb21wb25lbnQucGxhY2VEZWZpbml0aW9uLnBhdGh9KTogJHtyZXN1bHR9YCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsQ2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uKG5ld1VybDogc3RyaW5nKTogdm9pZCB7XG4gICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBiYWNrIGJ1dHRvbiBwcmVzc2VkIGR1cmluZyBuYXZpZ2F0aW9uIHNlc3Npb24gaW50ZXJhY3Rpb24gcHJvbWlzZWApO1xuICAgIC8vIGRldGFjaCB0aGUgaW50ZXJhY3Rpb24gZnJvbSB0aGUgc2Vzc2lvbiBzbyBpdCBkb2Vzbid0IGdldCBkaXNwb3NlZCB1bnRpbCB0aGUgYWN0aXZpdHkgaGFzIGZpbmlzaGVkXG4gICAgLy8gYWxsIGl0J3MgdGhpbmdzLlxuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLmRldGFjaENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQoKTtcbiAgICAvLyBUT0RPOiBJIG5lZWQgdG8gbWFrZSB0aGUgZXhjbHVzaXZlIGludGVyYWN0aW9uIGNvbnRleHQgZGlzYWxsb3cgbmVzdGVkIGFjdGl2aXRpZXMgb3JcbiAgICAvLyAgICAgICB0aGF0IHdvdWxkIG1lc3MgdGhpbmdzIHVwIGVudGlyZWx5LiBPciwgY2FuIEkgZG8gYSBjb250ZXh0LmFib3J0QWxsKCkudGhlbiguLilcbiAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oJ2NhbmNlbGxpbmcgY3VycmVudCBuYXZpZ2F0aW9uIGFjdGl2aXR5Li4nKTtcbiAgICBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCkudGhlbigoKSA9PiB7XG4gICAgICBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuaGFuZGxlQ2FuRGVhY3RpdmF0ZUNhbmNlbGxlZEV2ZW50U2NlbmFyaW8obmV3VXJsKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhbmRsZUNhbkRlYWN0aXZhdGVDYW5jZWxsZWRFdmVudFNjZW5hcmlvKG5ld1VybDogc3RyaW5nKTogdm9pZFxuXG4gIHByb3RlY3RlZCByZWluc3RhdGVVcmxBZnRlckFuZ3VsYXJDaGFuZ2VkSXRPbkNhbmNlbGxhdGlvbih1cmw6IHN0cmluZykge1xuICAgIC8vIEFuZ3VsYXIgY2FsbHMgX3RoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkgb24gY2FuY2VsbGluZyBhbmQgZnVja3Mgb3VyIGhpc3RvcnkuXG4gICAgLy8gU28gdGhpcyBtZWFucyB0aGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIHRoZSB1cmwgd2Ugd2FudCB0byBnbyBiYWNrIHRvLCBhbmQgbm90IHRoZSBvbmUgdGhhdCB3YXMgb25cbiAgICAvLyBpdCBiZWZvcmUgdGhlIGNhbmNlbCBldmVudCBmaXJlZC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvOlxuICAgIC8vIC0gcmVwbGFjZSB0aGUganVzdCBpbnNlcnRlZCB1cmwgd2l0aCB0aGUgb25lIHRoYXQgdXNlZCB0byBiZSB0aGVyZS5cbiAgICAvLyAtIHB1c2ggb3VyIGFjdHVhbCB1cmwgYmFjayBvbnRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLlxuICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odXJsLCB7IHJlcGxhY2VDdXJyZW50OiB0cnVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGFjaENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IG51bGw7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cbiJdfQ==
|