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