@alauda-fe/dynamic-plugin-shared 0.0.1-alpha.9 → 0.0.3-alpha.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/i18n/en/dynamic-plugin-shared.json +3 -0
- package/assets/images/overview-banner.svg +1 -0
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs +3038 -1828
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs.map +1 -1
- package/package.json +15 -17
- package/styles/lib.scss +1 -1
- package/styles/mixins.scss +1 -210
- package/styles/var.scss +1 -26
- package/types/alauda-fe-dynamic-plugin-shared.d.ts +5692 -0
- package/array-form-table/base-string-map-form.component.d.ts +0 -22
- package/array-form-table/form/component.d.ts +0 -106
- package/array-form-table/form/index.d.ts +0 -3
- package/array-form-table/index.d.ts +0 -10
- package/array-form-table/key-value-form/component.d.ts +0 -38
- package/array-form-table/key-value-table/component.d.ts +0 -9
- package/array-form-table/string-array-form/component.d.ts +0 -41
- package/async-data/async-data-loader.d.ts +0 -31
- package/async-data/error-page/component.d.ts +0 -30
- package/async-data/index.d.ts +0 -13
- package/async-data/page-state/component.d.ts +0 -21
- package/async-data/types.d.ts +0 -29
- package/code-editor/code-display-dialog/component.d.ts +0 -17
- package/code-editor/code-editor-configs.d.ts +0 -19
- package/code-editor/index.d.ts +0 -10
- package/code-editor/k8s-yaml-display-dialog/component.d.ts +0 -16
- package/code-editor/resource-yaml-display/component.d.ts +0 -21
- package/components/card-section/card-section.component.d.ts +0 -9
- package/components/confirm-delete/confirm-delete.component.d.ts +0 -57
- package/components/confirm-delete/utils.d.ts +0 -25
- package/components/current-time/component.d.ts +0 -14
- package/components/custom-columns-setting/component.d.ts +0 -16
- package/components/custom-columns-setting/index.d.ts +0 -1
- package/components/date-range-picker/component.d.ts +0 -55
- package/components/date-range-picker/index.d.ts +0 -3
- package/components/date-range-picker/type.d.ts +0 -36
- package/components/date-range-picker/util.d.ts +0 -11
- package/components/disabled-container/disabled-container.component.d.ts +0 -21
- package/components/disabled-container/index.d.ts +0 -7
- package/components/field-set/column/component.d.ts +0 -10
- package/components/field-set/group/component.d.ts +0 -6
- package/components/field-set/index.d.ts +0 -7
- package/components/field-set/item/component.d.ts +0 -13
- package/components/foldable-block/component.d.ts +0 -17
- package/components/foldable-item-in-table/component.d.ts +0 -21
- package/components/help-document/component.d.ts +0 -29
- package/components/help-document/directive.d.ts +0 -20
- package/components/help-document/index.d.ts +0 -8
- package/components/help-document/service.d.ts +0 -20
- package/components/index.d.ts +0 -32
- package/components/loading-mask/loading-mask.component.d.ts +0 -13
- package/components/page-guard/component/component.d.ts +0 -40
- package/components/page-guard/component/helper-directives.d.ts +0 -17
- package/components/page-guard/component/page-guard.type.d.ts +0 -86
- package/components/page-guard/index.d.ts +0 -12
- package/components/password-input/component.d.ts +0 -39
- package/components/pod-status/component.d.ts +0 -25
- package/components/pod-status/index.d.ts +0 -3
- package/components/pod-status/status.d.ts +0 -4
- package/components/pod-status/typings.d.ts +0 -16
- package/components/relative-time/component.d.ts +0 -15
- package/components/resource-label/component.d.ts +0 -25
- package/components/resource-multi-select/component.d.ts +0 -41
- package/components/resource-multi-select/util.d.ts +0 -10
- package/components/search-panel/component.d.ts +0 -16
- package/components/search-panel/helper.directive.d.ts +0 -5
- package/components/search-panel/search-item/component.d.ts +0 -7
- package/components/select-prefix-label/directive.d.ts +0 -17
- package/components/status-icon/status-icon.component.d.ts +0 -16
- package/components/tags-label/component.d.ts +0 -56
- package/components/terminating-tag/component.d.ts +0 -7
- package/components/text-ellipsis/component.d.ts +0 -9
- package/components/text-tooltip/directive.d.ts +0 -21
- package/components/text-with-url/component.d.ts +0 -12
- package/components/upload-file/component.d.ts +0 -32
- package/components/workload-status/component.d.ts +0 -37
- package/components/workload-status/index.d.ts +0 -1
- package/components/zero-state/zero-state.component.d.ts +0 -17
- package/constants/common.d.ts +0 -64
- package/constants/index.d.ts +0 -6
- package/constants/k8s.d.ts +0 -12
- package/constants/patterns.d.ts +0 -124
- package/constants/resource-definitions.d.ts +0 -414
- package/constants/status-icons.d.ts +0 -34
- package/constants/timezones.d.ts +0 -6
- package/directives/aui-code-editor.directive.d.ts +0 -13
- package/directives/click-outside.directive.d.ts +0 -12
- package/directives/declare.directive.d.ts +0 -8
- package/directives/disabled.directive.d.ts +0 -28
- package/directives/effect-directive/coerce-number.directive.d.ts +0 -8
- package/directives/effect-directive/e2e-attribute-binding.directive.d.ts +0 -10
- package/directives/effect-directive/event.directive.d.ts +0 -47
- package/directives/effect-directive/index.d.ts +0 -12
- package/directives/effect-directive/min-max.directive.d.ts +0 -30
- package/directives/effect-directive/trim.directive.d.ts +0 -7
- package/directives/effect-directive/validators.directive.d.ts +0 -12
- package/directives/feature-gate.directive.d.ts +0 -31
- package/directives/index.d.ts +0 -12
- package/directives/last-form-item.directive.d.ts +0 -8
- package/directives/readonly-field.directive.d.ts +0 -39
- package/directives/resize.directive.d.ts +0 -17
- package/directives/scroll-border-observer.directive.d.ts +0 -23
- package/directives/scroll-to-first-invalid.directive.d.ts +0 -24
- package/directives/value-trace.directive.d.ts +0 -27
- package/esm2022/alauda-fe-dynamic-plugin-shared.mjs +0 -5
- package/esm2022/array-form-table/base-string-map-form.component.mjs +0 -92
- package/esm2022/array-form-table/form/component.mjs +0 -266
- package/esm2022/array-form-table/form/index.mjs +0 -13
- package/esm2022/array-form-table/index.mjs +0 -11
- package/esm2022/array-form-table/key-value-form/component.mjs +0 -135
- package/esm2022/array-form-table/key-value-table/component.mjs +0 -24
- package/esm2022/array-form-table/string-array-form/component.mjs +0 -168
- package/esm2022/async-data/async-data-loader.mjs +0 -63
- package/esm2022/async-data/error-page/component.mjs +0 -54
- package/esm2022/async-data/index.mjs +0 -18
- package/esm2022/async-data/page-state/component.mjs +0 -62
- package/esm2022/async-data/types.mjs +0 -6
- package/esm2022/code-editor/code-display-dialog/component.mjs +0 -35
- package/esm2022/code-editor/code-editor-configs.mjs +0 -66
- package/esm2022/code-editor/index.mjs +0 -11
- package/esm2022/code-editor/k8s-yaml-display-dialog/component.mjs +0 -26
- package/esm2022/code-editor/resource-yaml-display/component.mjs +0 -67
- package/esm2022/components/card-section/card-section.component.mjs +0 -24
- package/esm2022/components/confirm-delete/confirm-delete.component.mjs +0 -192
- package/esm2022/components/confirm-delete/utils.mjs +0 -8
- package/esm2022/components/current-time/component.mjs +0 -39
- package/esm2022/components/custom-columns-setting/component.mjs +0 -75
- package/esm2022/components/custom-columns-setting/index.mjs +0 -2
- package/esm2022/components/date-range-picker/component.mjs +0 -215
- package/esm2022/components/date-range-picker/index.mjs +0 -4
- package/esm2022/components/date-range-picker/type.mjs +0 -2
- package/esm2022/components/date-range-picker/util.mjs +0 -57
- package/esm2022/components/disabled-container/disabled-container.component.mjs +0 -81
- package/esm2022/components/disabled-container/index.mjs +0 -8
- package/esm2022/components/field-set/column/component.mjs +0 -25
- package/esm2022/components/field-set/group/component.mjs +0 -16
- package/esm2022/components/field-set/index.mjs +0 -14
- package/esm2022/components/field-set/item/component.mjs +0 -41
- package/esm2022/components/foldable-block/component.mjs +0 -60
- package/esm2022/components/foldable-item-in-table/component.mjs +0 -56
- package/esm2022/components/help-document/component.mjs +0 -69
- package/esm2022/components/help-document/directive.mjs +0 -70
- package/esm2022/components/help-document/index.mjs +0 -9
- package/esm2022/components/help-document/service.mjs +0 -43
- package/esm2022/components/index.mjs +0 -33
- package/esm2022/components/loading-mask/loading-mask.component.mjs +0 -35
- package/esm2022/components/page-guard/component/component.mjs +0 -101
- package/esm2022/components/page-guard/component/helper-directives.mjs +0 -51
- package/esm2022/components/page-guard/component/page-guard.type.mjs +0 -82
- package/esm2022/components/page-guard/index.mjs +0 -19
- package/esm2022/components/password-input/component.mjs +0 -143
- package/esm2022/components/pod-status/component.mjs +0 -49
- package/esm2022/components/pod-status/index.mjs +0 -4
- package/esm2022/components/pod-status/status.mjs +0 -84
- package/esm2022/components/pod-status/typings.mjs +0 -19
- package/esm2022/components/relative-time/component.mjs +0 -58
- package/esm2022/components/resource-label/component.mjs +0 -100
- package/esm2022/components/resource-multi-select/component.mjs +0 -152
- package/esm2022/components/resource-multi-select/util.mjs +0 -24
- package/esm2022/components/search-panel/component.mjs +0 -51
- package/esm2022/components/search-panel/helper.directive.mjs +0 -14
- package/esm2022/components/search-panel/search-item/component.mjs +0 -15
- package/esm2022/components/select-prefix-label/directive.mjs +0 -89
- package/esm2022/components/status-icon/status-icon.component.mjs +0 -56
- package/esm2022/components/tags-label/component.mjs +0 -224
- package/esm2022/components/terminating-tag/component.mjs +0 -16
- package/esm2022/components/text-ellipsis/component.mjs +0 -28
- package/esm2022/components/text-tooltip/directive.mjs +0 -71
- package/esm2022/components/text-with-url/component.mjs +0 -40
- package/esm2022/components/upload-file/component.mjs +0 -95
- package/esm2022/components/workload-status/component.mjs +0 -33
- package/esm2022/components/workload-status/index.mjs +0 -2
- package/esm2022/components/zero-state/zero-state.component.mjs +0 -56
- package/esm2022/constants/common.mjs +0 -86
- package/esm2022/constants/index.mjs +0 -7
- package/esm2022/constants/k8s.mjs +0 -13
- package/esm2022/constants/patterns.mjs +0 -142
- package/esm2022/constants/resource-definitions.mjs +0 -424
- package/esm2022/constants/status-icons.mjs +0 -65
- package/esm2022/constants/timezones.mjs +0 -234
- package/esm2022/directives/aui-code-editor.directive.mjs +0 -30
- package/esm2022/directives/click-outside.directive.mjs +0 -49
- package/esm2022/directives/declare.directive.mjs +0 -27
- package/esm2022/directives/disabled.directive.mjs +0 -76
- package/esm2022/directives/effect-directive/coerce-number.directive.mjs +0 -54
- package/esm2022/directives/effect-directive/e2e-attribute-binding.directive.mjs +0 -57
- package/esm2022/directives/effect-directive/event.directive.mjs +0 -129
- package/esm2022/directives/effect-directive/index.mjs +0 -21
- package/esm2022/directives/effect-directive/min-max.directive.mjs +0 -107
- package/esm2022/directives/effect-directive/trim.directive.mjs +0 -40
- package/esm2022/directives/effect-directive/validators.directive.mjs +0 -43
- package/esm2022/directives/feature-gate.directive.mjs +0 -90
- package/esm2022/directives/index.mjs +0 -13
- package/esm2022/directives/last-form-item.directive.mjs +0 -18
- package/esm2022/directives/readonly-field.directive.mjs +0 -145
- package/esm2022/directives/resize.directive.mjs +0 -39
- package/esm2022/directives/scroll-border-observer.directive.mjs +0 -77
- package/esm2022/directives/scroll-to-first-invalid.directive.mjs +0 -126
- package/esm2022/directives/value-trace.directive.mjs +0 -61
- package/esm2022/form/base-form-container.mjs +0 -126
- package/esm2022/form/base-nested-form-control.mjs +0 -190
- package/esm2022/form/errors-mapper/base-errors-mapper.mjs +0 -41
- package/esm2022/form/errors-mapper/default-errors-mapper.service.mjs +0 -65
- package/esm2022/form/errors-mapper/errors-mapper-component/component.mjs +0 -53
- package/esm2022/form/errors-mapper/errors-mapper.directive.mjs +0 -109
- package/esm2022/form/errors-mapper/index.mjs +0 -10
- package/esm2022/form/errors-mapper/types.mjs +0 -2
- package/esm2022/form/index.mjs +0 -6
- package/esm2022/form/utils.mjs +0 -61
- package/esm2022/form/validators/async-function-validator.directive.mjs +0 -49
- package/esm2022/form/validators/dns1123-subdomain.mjs +0 -42
- package/esm2022/form/validators/function-validator.directive.mjs +0 -49
- package/esm2022/form/validators/index.mjs +0 -10
- package/esm2022/form/validators/maxlength-minlength-validator.directive.mjs +0 -71
- package/esm2022/form/validators/not-be-validator.directive.mjs +0 -56
- package/esm2022/form/validators/one-of-validator.directive.mjs +0 -57
- package/esm2022/form/validators/resource-limit.mjs +0 -79
- package/esm2022/form/validators/strong-password/index.mjs +0 -4
- package/esm2022/form/validators/strong-password/strong-password-tooltip/component.mjs +0 -15
- package/esm2022/form/validators/strong-password/strong-password-validator.directive.mjs +0 -171
- package/esm2022/form/validators/strong-password/strong-password-validator.module.mjs +0 -36
- package/esm2022/form/validators/utils.mjs +0 -155
- package/esm2022/index.mjs +0 -15
- package/esm2022/k8s-resource-list/footer/component.mjs +0 -161
- package/esm2022/k8s-resource-list/index.mjs +0 -18
- package/esm2022/k8s-resource-list/k8s-resource-list.mjs +0 -224
- package/esm2022/k8s-resource-list/k8s-resource-paged-list.mjs +0 -174
- package/esm2022/k8s-resource-list/types.mjs +0 -11
- package/esm2022/k8s-resource-list/utils.mjs +0 -84
- package/esm2022/k8s-shared/constants.mjs +0 -53
- package/esm2022/k8s-shared/index.mjs +0 -12
- package/esm2022/k8s-shared/k8s-resource-translate-key.pipe.mjs +0 -31
- package/esm2022/k8s-shared/k8s-shared-util.service.mjs +0 -152
- package/esm2022/k8s-shared/resource-mark/component.mjs +0 -54
- package/esm2022/k8s-shared/resource-mark/util.mjs +0 -137
- package/esm2022/k8s-shared/update-description-dialog/component.mjs +0 -66
- package/esm2022/k8s-shared/update-display-name-dialog/component.mjs +0 -59
- package/esm2022/k8s-shared/update-key-value-dialog/component.mjs +0 -76
- package/esm2022/page-deactivate/deactivate.directive.mjs +0 -50
- package/esm2022/page-deactivate/deactivate.guard.mjs +0 -41
- package/esm2022/page-deactivate/deactivate.service.mjs +0 -78
- package/esm2022/page-deactivate/index.mjs +0 -4
- package/esm2022/pipes/calc.pipe.mjs +0 -21
- package/esm2022/pipes/cron-human-readable.pipe.mjs +0 -30
- package/esm2022/pipes/crontab-next.pipe.mjs +0 -67
- package/esm2022/pipes/duration.pipe.mjs +0 -51
- package/esm2022/pipes/field-not-available.pipe.mjs +0 -25
- package/esm2022/pipes/img-header.pipe.mjs +0 -18
- package/esm2022/pipes/img-theme.pipe.mjs +0 -38
- package/esm2022/pipes/index.mjs +0 -19
- package/esm2022/pipes/keyvalue.pipe.mjs +0 -20
- package/esm2022/pipes/marked.pipe.mjs +0 -18
- package/esm2022/pipes/minimum-format.pipe.mjs +0 -25
- package/esm2022/pipes/page-env.pipe.mjs +0 -69
- package/esm2022/pipes/parse-json-translate.pipe.mjs +0 -28
- package/esm2022/pipes/parse-json.pipe.mjs +0 -22
- package/esm2022/pipes/pure.pipe.mjs +0 -26
- package/esm2022/pipes/safe.pipe.mjs +0 -49
- package/esm2022/pipes/sanitize.pipe.mjs +0 -31
- package/esm2022/pipes/time.pipe.mjs +0 -113
- package/esm2022/pipes/timezone-display.pipe.mjs +0 -21
- package/esm2022/services/form-row-duplicate/form-row-duplicate.service.mjs +0 -280
- package/esm2022/services/index.mjs +0 -4
- package/esm2022/services/on-resize.service.mjs +0 -52
- package/esm2022/services/yaml-util.service.mjs +0 -99
- package/esm2022/types/common.mjs +0 -6
- package/esm2022/types/helpers.mjs +0 -12
- package/esm2022/types/index.mjs +0 -10
- package/esm2022/types/k8s/core.mjs +0 -2
- package/esm2022/types/k8s/crd.mjs +0 -57
- package/esm2022/types/k8s/index.mjs +0 -4
- package/esm2022/types/k8s/raw.mjs +0 -77
- package/esm2022/types/schema.mjs +0 -2
- package/esm2022/utils/browser.mjs +0 -21
- package/esm2022/utils/cache-store.mjs +0 -83
- package/esm2022/utils/color-helpers.mjs +0 -6
- package/esm2022/utils/common.mjs +0 -315
- package/esm2022/utils/cron-util.mjs +0 -44
- package/esm2022/utils/decorators.mjs +0 -137
- package/esm2022/utils/disabled-state.mjs +0 -47
- package/esm2022/utils/format-number.mjs +0 -227
- package/esm2022/utils/index.mjs +0 -24
- package/esm2022/utils/local-storage-constants.mjs +0 -2
- package/esm2022/utils/node.mjs +0 -18
- package/esm2022/utils/observable.mjs +0 -32
- package/esm2022/utils/operators.mjs +0 -38
- package/esm2022/utils/request-pool.mjs +0 -37
- package/esm2022/utils/resources.mjs +0 -66
- package/esm2022/utils/router.mjs +0 -20
- package/esm2022/utils/sort-fn.mjs +0 -7
- package/esm2022/utils/tree.mjs +0 -79
- package/esm2022/utils/unit.mjs +0 -191
- package/esm2022/utils/version.mjs +0 -76
- package/esm2022/utils/with-load-state.mjs +0 -21
- package/esm2022/utils/workload.mjs +0 -183
- package/esm2022/utils/workspace.mjs +0 -59
- package/esm2022/utils/yaml.mjs +0 -54
- package/form/base-form-container.d.ts +0 -41
- package/form/base-nested-form-control.d.ts +0 -58
- package/form/errors-mapper/base-errors-mapper.d.ts +0 -13
- package/form/errors-mapper/default-errors-mapper.service.d.ts +0 -10
- package/form/errors-mapper/errors-mapper-component/component.d.ts +0 -19
- package/form/errors-mapper/errors-mapper.directive.d.ts +0 -39
- package/form/errors-mapper/index.d.ts +0 -6
- package/form/errors-mapper/types.d.ts +0 -16
- package/form/index.d.ts +0 -5
- package/form/utils.d.ts +0 -40
- package/form/validators/async-function-validator.directive.d.ts +0 -11
- package/form/validators/dns1123-subdomain.d.ts +0 -28
- package/form/validators/function-validator.directive.d.ts +0 -11
- package/form/validators/index.d.ts +0 -9
- package/form/validators/maxlength-minlength-validator.directive.d.ts +0 -20
- package/form/validators/not-be-validator.directive.d.ts +0 -12
- package/form/validators/one-of-validator.directive.d.ts +0 -12
- package/form/validators/resource-limit.d.ts +0 -17
- package/form/validators/strong-password/index.d.ts +0 -3
- package/form/validators/strong-password/strong-password-tooltip/component.d.ts +0 -6
- package/form/validators/strong-password/strong-password-validator.directive.d.ts +0 -34
- package/form/validators/strong-password/strong-password-validator.module.d.ts +0 -12
- package/form/validators/utils.d.ts +0 -67
- package/index.d.ts +0 -14
- package/k8s-resource-list/footer/component.d.ts +0 -43
- package/k8s-resource-list/index.d.ts +0 -13
- package/k8s-resource-list/k8s-resource-list.d.ts +0 -42
- package/k8s-resource-list/k8s-resource-paged-list.d.ts +0 -61
- package/k8s-resource-list/types.d.ts +0 -70
- package/k8s-resource-list/utils.d.ts +0 -19
- package/k8s-shared/constants.d.ts +0 -7
- package/k8s-shared/index.d.ts +0 -11
- package/k8s-shared/k8s-resource-translate-key.pipe.d.ts +0 -9
- package/k8s-shared/k8s-shared-util.service.d.ts +0 -48
- package/k8s-shared/resource-mark/component.d.ts +0 -16
- package/k8s-shared/resource-mark/util.d.ts +0 -2
- package/k8s-shared/update-description-dialog/component.d.ts +0 -33
- package/k8s-shared/update-display-name-dialog/component.d.ts +0 -27
- package/k8s-shared/update-key-value-dialog/component.d.ts +0 -38
- package/page-deactivate/deactivate.directive.d.ts +0 -18
- package/page-deactivate/deactivate.guard.d.ts +0 -13
- package/page-deactivate/deactivate.service.d.ts +0 -28
- package/page-deactivate/index.d.ts +0 -3
- package/pipes/calc.pipe.d.ts +0 -11
- package/pipes/cron-human-readable.pipe.d.ts +0 -9
- package/pipes/crontab-next.pipe.d.ts +0 -18
- package/pipes/duration.pipe.d.ts +0 -10
- package/pipes/field-not-available.pipe.d.ts +0 -13
- package/pipes/img-header.pipe.d.ts +0 -7
- package/pipes/img-theme.pipe.d.ts +0 -13
- package/pipes/index.d.ts +0 -18
- package/pipes/keyvalue.pipe.d.ts +0 -9
- package/pipes/marked.pipe.d.ts +0 -8
- package/pipes/minimum-format.pipe.d.ts +0 -10
- package/pipes/page-env.pipe.d.ts +0 -34
- package/pipes/parse-json-translate.pipe.d.ts +0 -8
- package/pipes/parse-json.pipe.d.ts +0 -7
- package/pipes/pure.pipe.d.ts +0 -17
- package/pipes/safe.pipe.d.ts +0 -10
- package/pipes/sanitize.pipe.d.ts +0 -10
- package/pipes/time.pipe.d.ts +0 -40
- package/pipes/timezone-display.pipe.d.ts +0 -10
- package/services/form-row-duplicate/form-row-duplicate.service.d.ts +0 -45
- package/services/index.d.ts +0 -3
- package/services/on-resize.service.d.ts +0 -20
- package/services/yaml-util.service.d.ts +0 -20
- package/styles/global.scss +0 -904
- package/types/common.d.ts +0 -42
- package/types/helpers.d.ts +0 -35
- package/types/index.d.ts +0 -9
- package/types/k8s/core.d.ts +0 -100
- package/types/k8s/crd.d.ts +0 -497
- package/types/k8s/index.d.ts +0 -3
- package/types/k8s/raw.d.ts +0 -860
- package/types/schema.d.ts +0 -14
- package/utils/browser.d.ts +0 -4
- package/utils/cache-store.d.ts +0 -35
- package/utils/color-helpers.d.ts +0 -4
- package/utils/common.d.ts +0 -64
- package/utils/cron-util.d.ts +0 -8
- package/utils/decorators.d.ts +0 -14
- package/utils/disabled-state.d.ts +0 -20
- package/utils/format-number.d.ts +0 -11
- package/utils/index.d.ts +0 -23
- package/utils/local-storage-constants.d.ts +0 -1
- package/utils/node.d.ts +0 -8
- package/utils/observable.d.ts +0 -5
- package/utils/operators.d.ts +0 -22
- package/utils/request-pool.d.ts +0 -12
- package/utils/resources.d.ts +0 -19
- package/utils/router.d.ts +0 -3
- package/utils/sort-fn.d.ts +0 -2
- package/utils/tree.d.ts +0 -16
- package/utils/unit.d.ts +0 -21
- package/utils/version.d.ts +0 -39
- package/utils/with-load-state.d.ts +0 -11
- package/utils/workload.d.ts +0 -66
- package/utils/workspace.d.ts +0 -28
- package/utils/yaml.d.ts +0 -11
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
/**
|
|
3
|
-
* @packageDocumentation
|
|
4
|
-
* @module k8s-resource-list
|
|
5
|
-
*/
|
|
6
|
-
import { BackTopComponent, IconComponent, ThemePickerPipe } from '@alauda/ui';
|
|
7
|
-
import { TranslatePipe, TranslateService } from '@alauda-fe/dynamic-plugin-sdk';
|
|
8
|
-
import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
9
|
-
import { ChangeDetectionStrategy, Component, ContentChild, Directive, Input, TemplateRef, Injector, } from '@angular/core';
|
|
10
|
-
import { Observable, combineLatest, concat, debounceTime, distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil, takeWhile, } from 'rxjs';
|
|
11
|
-
import { ScrollBorderObserverDirective } from '../../directives';
|
|
12
|
-
import { ObservableInput, publishRef } from '../../utils';
|
|
13
|
-
import { LoadAction } from '../types';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@alauda-fe/dynamic-plugin-sdk";
|
|
16
|
-
export class K8sListFooterNoDataDirective {
|
|
17
|
-
constructor(templateRef) {
|
|
18
|
-
this.templateRef = templateRef;
|
|
19
|
-
}
|
|
20
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterNoDataDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
21
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: K8sListFooterNoDataDirective, isStandalone: true, selector: "[aclK8sListFooterNoData]", ngImport: i0 }); }
|
|
22
|
-
}
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterNoDataDirective, decorators: [{
|
|
24
|
-
type: Directive,
|
|
25
|
-
args: [{
|
|
26
|
-
selector: '[aclK8sListFooterNoData]',
|
|
27
|
-
standalone: true,
|
|
28
|
-
}]
|
|
29
|
-
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
30
|
-
export class K8sListFooterLoadingErrorDirective {
|
|
31
|
-
constructor(templateRef) {
|
|
32
|
-
this.templateRef = templateRef;
|
|
33
|
-
}
|
|
34
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterLoadingErrorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: K8sListFooterLoadingErrorDirective, isStandalone: true, selector: "[aclK8sListFooterLoadingError]", ngImport: i0 }); }
|
|
36
|
-
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8sListFooterLoadingErrorDirective, decorators: [{
|
|
38
|
-
type: Directive,
|
|
39
|
-
args: [{
|
|
40
|
-
selector: '[aclK8sListFooterLoadingError]',
|
|
41
|
-
standalone: true,
|
|
42
|
-
}]
|
|
43
|
-
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
44
|
-
export class K8SResourceListFooterComponent extends ScrollBorderObserverDirective {
|
|
45
|
-
constructor(injector, translate) {
|
|
46
|
-
super(injector);
|
|
47
|
-
this.translate = translate;
|
|
48
|
-
this.autoLoad = true;
|
|
49
|
-
this.backTop = true;
|
|
50
|
-
this.bottomDistance = 60;
|
|
51
|
-
this.window = window;
|
|
52
|
-
this.image = [
|
|
53
|
-
'images/light/no-data-for-list-or-card.svg',
|
|
54
|
-
'images/dark/no-data-for-list-or-card.svg',
|
|
55
|
-
];
|
|
56
|
-
this.option = this.autoLoad ? '' : false;
|
|
57
|
-
}
|
|
58
|
-
ngOnInit() {
|
|
59
|
-
super.ngOnInit();
|
|
60
|
-
this.loadingErrorCode$ = this.list.loadingError$.pipe(map(loadingError => loadingError && 'code' in loadingError && loadingError.code), distinctUntilChanged(), publishRef());
|
|
61
|
-
this.isEmptyList$ = combineLatest([
|
|
62
|
-
this.list.items$.pipe(map(items => items.length)),
|
|
63
|
-
this.list.hasMore$,
|
|
64
|
-
this.list.loading$,
|
|
65
|
-
this.list.loadingError$,
|
|
66
|
-
]).pipe(map(([length, hasMore, loading, loadingError]) => !(length || hasMore || loading || loadingError)), distinctUntilChanged(), publishRef());
|
|
67
|
-
this.noDataHint$ = combineLatest([
|
|
68
|
-
this.list.rawResponse$,
|
|
69
|
-
this.resourceName$,
|
|
70
|
-
this.resourceNameTranslated$,
|
|
71
|
-
this.translate.locale$,
|
|
72
|
-
]).pipe(filter(([res]) => !!res), map(([{ kind }, resourceName, resourceNameTranslated]) => {
|
|
73
|
-
if (resourceNameTranslated) {
|
|
74
|
-
return this.translate.get('no_named_data_hint', {
|
|
75
|
-
name: resourceNameTranslated,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
if (resourceName || (kind?.endsWith('List') && kind.length > 4)) {
|
|
79
|
-
return this.translate.get('no_named_data_hint', {
|
|
80
|
-
name: this.translate.get(resourceName ||
|
|
81
|
-
kind.slice(0, kind.lastIndexOf('List')).toLowerCase()),
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return this.translate.get('no_data');
|
|
85
|
-
}));
|
|
86
|
-
const viewEl = this.scrollEl === window
|
|
87
|
-
? document.documentElement
|
|
88
|
-
: this.scrollEl;
|
|
89
|
-
// 当数据不够一屏时自动加载更多
|
|
90
|
-
const autoLoadOneScreen$ = this.list.loadState$.pipe(map(state => state.rawResponse), filter(res => !!res), debounceTime(50), takeWhile(res => {
|
|
91
|
-
return ((!!res.metadata?.continue &&
|
|
92
|
-
viewEl.scrollHeight - viewEl.clientHeight < this.bottomDistance) ||
|
|
93
|
-
(this.firstScrollLoad &&
|
|
94
|
-
(this.list.snapshot.items?.length || 0) < this.firstScrollLoad));
|
|
95
|
-
}));
|
|
96
|
-
this.list.loadState$
|
|
97
|
-
.pipe(filter(state => state.action === LoadAction.Reload), startWith(null), switchMap(() => concat(autoLoadOneScreen$, this.scrollBottomBorder)),
|
|
98
|
-
// list.rawResponse$ 会处理好 loading 等状态时的 loadMore 请求,但有错误时主要主动停止
|
|
99
|
-
filter(() => !this.list.snapshot.loadingError), takeUntil(this.destroy$$))
|
|
100
|
-
.subscribe(() => {
|
|
101
|
-
this.list.loadMore();
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
retry() {
|
|
105
|
-
this.list.items$.pipe(take(1)).subscribe(items => {
|
|
106
|
-
if (items.length > 0) {
|
|
107
|
-
this.list.loadMore();
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
this.list.reload();
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8SResourceListFooterComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
115
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: K8SResourceListFooterComponent, isStandalone: true, selector: "acl-k8s-resource-list-footer", inputs: { list: "list", autoLoad: "autoLoad", backTop: "backTop", bottomDistance: "bottomDistance", resourceNameTranslated: "resourceNameTranslated", firstScrollLoad: "firstScrollLoad", resourceName: "resourceName" }, queries: [{ propertyName: "noDataTemplate", first: true, predicate: K8sListFooterNoDataDirective, descendants: true, read: TemplateRef }, { propertyName: "loadingErrorTemplate", first: true, predicate: K8sListFooterLoadingErrorDirective, descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"isEmptyList$ | async\"\n class=\"empty-placeholder\"\n>\n <ng-container *ngIf=\"noDataTemplate\">\n <ng-template *ngTemplateOutlet=\"noDataTemplate\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!noDataTemplate\">\n <div class=\"no-data-placeholder\">\n <img\n width=\"70\"\n [src]=\"image | auiThemePicker\"\n />\n <div>{{ noDataHint$ | async }}</div>\n </div>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"!(isEmptyList$ | async)\">\n <div\n class=\"table-placeholder\"\n *ngIf=\"list.loadingError$ | async\"\n >\n @if (loadingErrorTemplate) {\n <ng-template *ngTemplateOutlet=\"loadingErrorTemplate\"></ng-template>\n } @else {\n <ng-container *ngIf=\"![410, 403].includes(loadingErrorCode$ | async)\">\n <span\n >{{ 'error_loading_data' | translate }},{{\n 'please' | translate\n }}</span\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"retry()\"\n >\n {{ ('retry' | translate).toLowerCase() }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 410\">\n <span>\n {{ 'list_data_has_expired' | translate }}, {{ 'please' | translate }}\n </span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.reload()\"\n >\n {{ 'refresh' | translate }}\n </button>\n <span>{{ 'or' | translate }}</span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'continue_load' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 403\">\n <span>\n {{ 'no_permission_description' | translate }}\n </span>\n </ng-container>\n }\n </div>\n\n <ng-container *ngIf=\"!(list.loadingError$ | async)\">\n <ng-container\n *ngIf=\"{\n loading: list.loading$ | async,\n loadMore:\n !autoLoad && !(list.loading$ | async) && list.hasMore$ | async,\n } as meta\"\n >\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loading\"\n >\n <aui-icon icon=\"spinner\"></aui-icon>\n <span>{{ 'loading_please_wait' | translate }}</span>\n </div>\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loadMore\"\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'load_more' | translate }}\n </button>\n </div>\n <div\n class=\"table-last-row--empty\"\n *ngIf=\"!meta.loadMore && !meta.loading\"\n >\n <div class=\"table-last-row--empty-inner\"></div>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<aui-back-top\n *ngIf=\"backTop\"\n [target]=\"window\"\n></aui-back-top>\n", styles: [":host::ng-deep{position:sticky;left:0;display:flex;justify-content:center;align-items:center;z-index:1;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-help-text))}:host::ng-deep .empty-placeholder,:host::ng-deep .table-placeholder{flex:1;flex-direction:column}:host::ng-deep .table-last-row--empty{height:var(--aui-border-radius-l);background-color:rgb(var(--aui-color-n-9));position:relative;margin-top:-3px;flex:1}:host::ng-deep .table-last-row--empty-inner{background-color:rgb(var(--aui-color-n-10));height:var(--aui-border-radius-l);border:1px solid rgb(var(--aui-color-n-8));border-top:0;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}:host::ng-deep .table-placeholder{box-sizing:border-box;display:flex;justify-content:center;align-items:center;padding:15px 10px;min-height:60px;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-placeholder-text));background-color:rgb(var(--aui-color-n-10));border:solid 1px rgb(var(--aui-color-n-8));border-radius:var(--aui-border-radius-l);position:sticky;left:0}:host::ng-deep .table-placeholder>aui-icon:first-child{margin-right:var(--aui-spacing-m)}:host::ng-deep .aui-table .aui-table__row+.table-placeholder{border-top-left-radius:0;border-top-right-radius:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "component", type: BackTopComponent, selector: "aui-back-top", inputs: ["visibilityHeight", "position", "target"], outputs: ["click"] }, { kind: "pipe", type: ThemePickerPipe, name: "auiThemePicker" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
116
|
-
}
|
|
117
|
-
__decorate([
|
|
118
|
-
ObservableInput(),
|
|
119
|
-
__metadata("design:type", Observable)
|
|
120
|
-
], K8SResourceListFooterComponent.prototype, "resourceNameTranslated$", void 0);
|
|
121
|
-
__decorate([
|
|
122
|
-
ObservableInput(),
|
|
123
|
-
__metadata("design:type", Observable)
|
|
124
|
-
], K8SResourceListFooterComponent.prototype, "resourceName$", void 0);
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: K8SResourceListFooterComponent, decorators: [{
|
|
126
|
-
type: Component,
|
|
127
|
-
args: [{ selector: 'acl-k8s-resource-list-footer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
128
|
-
NgIf,
|
|
129
|
-
NgTemplateOutlet,
|
|
130
|
-
AsyncPipe,
|
|
131
|
-
TranslatePipe,
|
|
132
|
-
IconComponent,
|
|
133
|
-
BackTopComponent,
|
|
134
|
-
ThemePickerPipe,
|
|
135
|
-
], template: "<div\n *ngIf=\"isEmptyList$ | async\"\n class=\"empty-placeholder\"\n>\n <ng-container *ngIf=\"noDataTemplate\">\n <ng-template *ngTemplateOutlet=\"noDataTemplate\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!noDataTemplate\">\n <div class=\"no-data-placeholder\">\n <img\n width=\"70\"\n [src]=\"image | auiThemePicker\"\n />\n <div>{{ noDataHint$ | async }}</div>\n </div>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"!(isEmptyList$ | async)\">\n <div\n class=\"table-placeholder\"\n *ngIf=\"list.loadingError$ | async\"\n >\n @if (loadingErrorTemplate) {\n <ng-template *ngTemplateOutlet=\"loadingErrorTemplate\"></ng-template>\n } @else {\n <ng-container *ngIf=\"![410, 403].includes(loadingErrorCode$ | async)\">\n <span\n >{{ 'error_loading_data' | translate }},{{\n 'please' | translate\n }}</span\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"retry()\"\n >\n {{ ('retry' | translate).toLowerCase() }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 410\">\n <span>\n {{ 'list_data_has_expired' | translate }}, {{ 'please' | translate }}\n </span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.reload()\"\n >\n {{ 'refresh' | translate }}\n </button>\n <span>{{ 'or' | translate }}</span>\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'continue_load' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"(loadingErrorCode$ | async) === 403\">\n <span>\n {{ 'no_permission_description' | translate }}\n </span>\n </ng-container>\n }\n </div>\n\n <ng-container *ngIf=\"!(list.loadingError$ | async)\">\n <ng-container\n *ngIf=\"{\n loading: list.loading$ | async,\n loadMore:\n !autoLoad && !(list.loading$ | async) && list.hasMore$ | async,\n } as meta\"\n >\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loading\"\n >\n <aui-icon icon=\"spinner\"></aui-icon>\n <span>{{ 'loading_please_wait' | translate }}</span>\n </div>\n <div\n class=\"table-placeholder\"\n *ngIf=\"meta.loadMore\"\n >\n <button\n aui-button=\"text\"\n size=\"small\"\n (click)=\"list.loadMore()\"\n >\n {{ 'load_more' | translate }}\n </button>\n </div>\n <div\n class=\"table-last-row--empty\"\n *ngIf=\"!meta.loadMore && !meta.loading\"\n >\n <div class=\"table-last-row--empty-inner\"></div>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<aui-back-top\n *ngIf=\"backTop\"\n [target]=\"window\"\n></aui-back-top>\n", styles: [":host::ng-deep{position:sticky;left:0;display:flex;justify-content:center;align-items:center;z-index:1;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-help-text))}:host::ng-deep .empty-placeholder,:host::ng-deep .table-placeholder{flex:1;flex-direction:column}:host::ng-deep .table-last-row--empty{height:var(--aui-border-radius-l);background-color:rgb(var(--aui-color-n-9));position:relative;margin-top:-3px;flex:1}:host::ng-deep .table-last-row--empty-inner{background-color:rgb(var(--aui-color-n-10));height:var(--aui-border-radius-l);border:1px solid rgb(var(--aui-color-n-8));border-top:0;border-bottom-left-radius:var(--aui-border-radius-l);border-bottom-right-radius:var(--aui-border-radius-l)}:host::ng-deep .table-placeholder{box-sizing:border-box;display:flex;justify-content:center;align-items:center;padding:15px 10px;min-height:60px;font-size:var(--aui-font-size-m);line-height:var(--aui-line-height-m);font-weight:var(--aui-font-weight-normal);color:rgb(var(--aui-color-placeholder-text));background-color:rgb(var(--aui-color-n-10));border:solid 1px rgb(var(--aui-color-n-8));border-radius:var(--aui-border-radius-l);position:sticky;left:0}:host::ng-deep .table-placeholder>aui-icon:first-child{margin-right:var(--aui-spacing-m)}:host::ng-deep .aui-table .aui-table__row+.table-placeholder{border-top-left-radius:0;border-top-right-radius:0}\n"] }]
|
|
136
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.TranslateService }], propDecorators: { list: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], autoLoad: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], backTop: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], bottomDistance: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], resourceNameTranslated: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], firstScrollLoad: [{
|
|
147
|
-
type: Input
|
|
148
|
-
}], resourceNameTranslated$: [], resourceName: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], resourceName$: [], noDataTemplate: [{
|
|
151
|
-
type: ContentChild,
|
|
152
|
-
args: [K8sListFooterNoDataDirective, {
|
|
153
|
-
read: TemplateRef,
|
|
154
|
-
}]
|
|
155
|
-
}], loadingErrorTemplate: [{
|
|
156
|
-
type: ContentChild,
|
|
157
|
-
args: [K8sListFooterLoadingErrorDirective, {
|
|
158
|
-
read: TemplateRef,
|
|
159
|
-
}]
|
|
160
|
-
}] } });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL2s4cy1yZXNvdXJjZS1saXN0L2Zvb3Rlci9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvazhzLXJlc291cmNlLWxpc3QvZm9vdGVyL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEVBQ2IsTUFBTSxFQUNOLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxVQUFVLENBQUM7OztBQU14RCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQW1CLFdBQTZCO1FB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QUFDO0lBQ0wsQ0FBQzs4R0E5SVUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsOFZBb0IzQiw0QkFBNEIsMkJBQ2xDLFdBQVcsb0VBSUwsa0NBQWtDLDJCQUN4QyxXQUFXLG9EQ2pHckIsZy9GQStHQSxpK0NEakRJLElBQUksNkZBQ0osZ0JBQWdCLCtJQUNoQixTQUFTLHlDQUNULGFBQWEsa0RBQ2IsYUFBYSw0SkFDYixnQkFBZ0IsNEhBQ2hCLGVBQWU7O0FBZ0JqQjtJQURDLGVBQWUsRUFBRTs4QkFDTyxVQUFVOytFQUFTO0FBSzVDO0lBREMsZUFBZSxFQUFFOzhCQUNILFVBQVU7cUVBQVM7MkZBbEJ2Qiw4QkFBOEI7a0JBaEIxQyxTQUFTOytCQUNFLDhCQUE4QixjQUc1QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZUFBZTtxQkFDaEI7NEdBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR04sdUJBQXVCLE1BRWQsWUFBWTtzQkFBcEIsS0FBSztnQkFHTixhQUFhLE1BS2IsY0FBYztzQkFIYixZQUFZO3VCQUFDLDRCQUE0QixFQUFFO3dCQUMxQyxJQUFJLEVBQUUsV0FBVztxQkFDbEI7Z0JBTUQsb0JBQW9CO3NCQUhuQixZQUFZO3VCQUFDLGtDQUFrQyxFQUFFO3dCQUNoRCxJQUFJLEVBQUUsV0FBVztxQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBrOHMtcmVzb3VyY2UtbGlzdFxuICovXG5cbmltcG9ydCB7IEJhY2tUb3BDb21wb25lbnQsIEljb25Db21wb25lbnQsIFRoZW1lUGlja2VyUGlwZSB9IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BhbGF1ZGEtZmUvZHluYW1pYy1wbHVnaW4tc2RrJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgY29tYmluZUxhdGVzdCxcbiAgY29uY2F0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFrZVdoaWxlLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2Nyb2xsQm9yZGVyT2JzZXJ2ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEt1YmVybmV0ZXNSZXNvdXJjZSwgS3ViZXJuZXRlc1Jlc291cmNlTGlzdCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCwgcHVibGlzaFJlZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IExvYWRBY3Rpb24sIFN0cmVhbUxpc3RMb2FkZXIgfSBmcm9tICcuLi90eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xLOHNMaXN0Rm9vdGVyTm9EYXRhXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEs4c0xpc3RGb290ZXJOb0RhdGFEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xLOHNMaXN0Rm9vdGVyTG9hZGluZ0Vycm9yXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEs4c0xpc3RGb290ZXJMb2FkaW5nRXJyb3JEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1rOHMtcmVzb3VyY2UtbGlzdC1mb290ZXInLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGVzLnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBCYWNrVG9wQ29tcG9uZW50LFxuICAgIFRoZW1lUGlja2VyUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSzhTUmVzb3VyY2VMaXN0Rm9vdGVyQ29tcG9uZW50XG4gIGV4dGVuZHMgU2Nyb2xsQm9yZGVyT2JzZXJ2ZXJEaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSBsaXN0OiBTdHJlYW1MaXN0TG9hZGVyPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3QsIEt1YmVybmV0ZXNSZXNvdXJjZT47XG5cbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSBiYWNrVG9wID0gdHJ1ZTtcbiAgQElucHV0KCkgYm90dG9tRGlzdGFuY2UgPSA2MDtcbiAgQElucHV0KCkgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZDogc3RyaW5nO1xuICBASW5wdXQoKSBmaXJzdFNjcm9sbExvYWQ6IG51bWJlcjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBASW5wdXQoKSByZXNvdXJjZU5hbWU6IHN0cmluZztcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVzb3VyY2VOYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIEBDb250ZW50Q2hpbGQoSzhzTGlzdEZvb3Rlck5vRGF0YURpcmVjdGl2ZSwge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICB9KVxuICBub0RhdGFUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKEs4c0xpc3RGb290ZXJMb2FkaW5nRXJyb3JEaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgfSlcbiAgbG9hZGluZ0Vycm9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgaXNFbXB0eUxpc3QkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBub0RhdGFIaW50JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBsb2FkaW5nRXJyb3JDb2RlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIHdpbmRvdyA9IHdpbmRvdztcblxuICBpbWFnZSA9IFtcbiAgICAnaW1hZ2VzL2xpZ2h0L25vLWRhdGEtZm9yLWxpc3Qtb3ItY2FyZC5zdmcnLFxuICAgICdpbWFnZXMvZGFyay9uby1kYXRhLWZvci1saXN0LW9yLWNhcmQuc3ZnJyxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLm9wdGlvbiA9IHRoaXMuYXV0b0xvYWQgPyAnJyA6IGZhbHNlO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIHRoaXMubG9hZGluZ0Vycm9yQ29kZSQgPSB0aGlzLmxpc3QubG9hZGluZ0Vycm9yJC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICBsb2FkaW5nRXJyb3IgPT5cbiAgICAgICAgICBsb2FkaW5nRXJyb3IgJiYgJ2NvZGUnIGluIGxvYWRpbmdFcnJvciAmJiBsb2FkaW5nRXJyb3IuY29kZSxcbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG5cbiAgICB0aGlzLmlzRW1wdHlMaXN0JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5saXN0Lml0ZW1zJC5waXBlKG1hcChpdGVtcyA9PiBpdGVtcy5sZW5ndGgpKSxcbiAgICAgIHRoaXMubGlzdC5oYXNNb3JlJCxcbiAgICAgIHRoaXMubGlzdC5sb2FkaW5nJCxcbiAgICAgIHRoaXMubGlzdC5sb2FkaW5nRXJyb3IkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbbGVuZ3RoLCBoYXNNb3JlLCBsb2FkaW5nLCBsb2FkaW5nRXJyb3JdKSA9PlxuICAgICAgICAgICEobGVuZ3RoIHx8IGhhc01vcmUgfHwgbG9hZGluZyB8fCBsb2FkaW5nRXJyb3IpLFxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMubm9EYXRhSGludCQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubGlzdC5yYXdSZXNwb25zZSQsXG4gICAgICB0aGlzLnJlc291cmNlTmFtZSQsXG4gICAgICB0aGlzLnJlc291cmNlTmFtZVRyYW5zbGF0ZWQkLFxuICAgICAgdGhpcy50cmFuc2xhdGUubG9jYWxlJCxcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKChbcmVzXSkgPT4gISFyZXMpLFxuICAgICAgbWFwKChbeyBraW5kIH0sIHJlc291cmNlTmFtZSwgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZF0pID0+IHtcbiAgICAgICAgaWYgKHJlc291cmNlTmFtZVRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdub19uYW1lZF9kYXRhX2hpbnQnLCB7XG4gICAgICAgICAgICBuYW1lOiByZXNvdXJjZU5hbWVUcmFuc2xhdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlTmFtZSB8fCAoa2luZD8uZW5kc1dpdGgoJ0xpc3QnKSAmJiBraW5kLmxlbmd0aCA+IDQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnbm9fbmFtZWRfZGF0YV9oaW50Jywge1xuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGUuZ2V0KFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWUgfHxcbiAgICAgICAgICAgICAgICBraW5kLnNsaWNlKDAsIGtpbmQubGFzdEluZGV4T2YoJ0xpc3QnKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnbm9fZGF0YScpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHZpZXdFbCA9XG4gICAgICB0aGlzLnNjcm9sbEVsID09PSB3aW5kb3dcbiAgICAgICAgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICAgICAgOiAodGhpcy5zY3JvbGxFbCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAvLyDlvZPmlbDmja7kuI3lpJ/kuIDlsY/ml7boh6rliqjliqDovb3mm7TlpJpcbiAgICBjb25zdCBhdXRvTG9hZE9uZVNjcmVlbiQgPSB0aGlzLmxpc3QubG9hZFN0YXRlJC5waXBlKFxuICAgICAgbWFwKHN0YXRlID0+IHN0YXRlLnJhd1Jlc3BvbnNlKSxcbiAgICAgIGZpbHRlcihyZXMgPT4gISFyZXMpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgIHRha2VXaGlsZShyZXMgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICghIXJlcy5tZXRhZGF0YT8uY29udGludWUgJiZcbiAgICAgICAgICAgIHZpZXdFbC5zY3JvbGxIZWlnaHQgLSB2aWV3RWwuY2xpZW50SGVpZ2h0IDwgdGhpcy5ib3R0b21EaXN0YW5jZSkgfHxcbiAgICAgICAgICAodGhpcy5maXJzdFNjcm9sbExvYWQgJiZcbiAgICAgICAgICAgICh0aGlzLmxpc3Quc25hcHNob3QuaXRlbXM/Lmxlbmd0aCB8fCAwKSA8IHRoaXMuZmlyc3RTY3JvbGxMb2FkKVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgICB0aGlzLmxpc3QubG9hZFN0YXRlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZS5hY3Rpb24gPT09IExvYWRBY3Rpb24uUmVsb2FkKSxcbiAgICAgICAgc3RhcnRXaXRoKG51bGwgYXMgdm9pZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBjb25jYXQoYXV0b0xvYWRPbmVTY3JlZW4kLCB0aGlzLnNjcm9sbEJvdHRvbUJvcmRlcikpLFxuICAgICAgICAvLyBsaXN0LnJhd1Jlc3BvbnNlJCDkvJrlpITnkIblpb0gbG9hZGluZyDnrYnnirbmgIHml7bnmoQgbG9hZE1vcmUg6K+35rGC77yM5L2G5pyJ6ZSZ6K+v5pe25Li76KaB5Li75Yqo5YGc5q2iXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5saXN0LnNuYXBzaG90LmxvYWRpbmdFcnJvciksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmxvYWRNb3JlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHJldHJ5KCkge1xuICAgIHRoaXMubGlzdC5pdGVtcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5saXN0LmxvYWRNb3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJpc0VtcHR5TGlzdCQgfCBhc3luY1wiXG4gIGNsYXNzPVwiZW1wdHktcGxhY2Vob2xkZXJcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhVGVtcGxhdGVcIj5cbiAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RhdGFUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vRGF0YVRlbXBsYXRlXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5vLWRhdGEtcGxhY2Vob2xkZXJcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgd2lkdGg9XCI3MFwiXG4gICAgICAgIFtzcmNdPVwiaW1hZ2UgfCBhdWlUaGVtZVBpY2tlclwiXG4gICAgICAvPlxuICAgICAgPGRpdj57eyBub0RhdGFIaW50JCB8IGFzeW5jIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhKGlzRW1wdHlMaXN0JCB8IGFzeW5jKVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1wbGFjZWhvbGRlclwiXG4gICAgKm5nSWY9XCJsaXN0LmxvYWRpbmdFcnJvciQgfCBhc3luY1wiXG4gID5cbiAgICBAaWYgKGxvYWRpbmdFcnJvclRlbXBsYXRlKSB7XG4gICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nRXJyb3JUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVs0MTAsIDQwM10uaW5jbHVkZXMobG9hZGluZ0Vycm9yQ29kZSQgfCBhc3luYylcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICA+e3sgJ2Vycm9yX2xvYWRpbmdfZGF0YScgfCB0cmFuc2xhdGUgfX0se3tcbiAgICAgICAgICAgICdwbGVhc2UnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cInJldHJ5KClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgKCdyZXRyeScgfCB0cmFuc2xhdGUpLnRvTG93ZXJDYXNlKCkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nRXJyb3JDb2RlJCB8IGFzeW5jKSA9PT0gNDEwXCI+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHt7ICdsaXN0X2RhdGFfaGFzX2V4cGlyZWQnIHwgdHJhbnNsYXRlIH19LCB7eyAncGxlYXNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhdWktYnV0dG9uPVwidGV4dFwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwibGlzdC5yZWxvYWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAncmVmcmVzaCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuPnt7ICdvcicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBhdWktYnV0dG9uPVwidGV4dFwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwibGlzdC5sb2FkTW9yZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdjb250aW51ZV9sb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGxvYWRpbmdFcnJvckNvZGUkIHwgYXN5bmMpID09PSA0MDNcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgJ25vX3Blcm1pc3Npb25fZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEobGlzdC5sb2FkaW5nRXJyb3IkIHwgYXN5bmMpXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJ7XG4gICAgICAgIGxvYWRpbmc6IGxpc3QubG9hZGluZyQgfCBhc3luYyxcbiAgICAgICAgbG9hZE1vcmU6XG4gICAgICAgICAgIWF1dG9Mb2FkICYmICEobGlzdC5sb2FkaW5nJCB8IGFzeW5jKSAmJiBsaXN0Lmhhc01vcmUkIHwgYXN5bmMsXG4gICAgICB9IGFzIG1ldGFcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0YWJsZS1wbGFjZWhvbGRlclwiXG4gICAgICAgICpuZ0lmPVwibWV0YS5sb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGF1aS1pY29uIGljb249XCJzcGlubmVyXCI+PC9hdWktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ2xvYWRpbmdfcGxlYXNlX3dhaXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGFibGUtcGxhY2Vob2xkZXJcIlxuICAgICAgICAqbmdJZj1cIm1ldGEubG9hZE1vcmVcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImxpc3QubG9hZE1vcmUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnbG9hZF9tb3JlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRhYmxlLWxhc3Qtcm93LS1lbXB0eVwiXG4gICAgICAgICpuZ0lmPVwiIW1ldGEubG9hZE1vcmUgJiYgIW1ldGEubG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1sYXN0LXJvdy0tZW1wdHktaW5uZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48YXVpLWJhY2stdG9wXG4gICpuZ0lmPVwiYmFja1RvcFwiXG4gIFt0YXJnZXRdPVwid2luZG93XCJcbj48L2F1aS1iYWNrLXRvcD5cbiJdfQ==
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* [[include:k8s-resource-list/README.md]]
|
|
3
|
-
* @module k8s-resource-list
|
|
4
|
-
* @preferred
|
|
5
|
-
*/
|
|
6
|
-
/** imports */
|
|
7
|
-
import { K8SResourceListFooterComponent, K8sListFooterNoDataDirective, K8sListFooterLoadingErrorDirective, } from './footer/component';
|
|
8
|
-
export * from './footer/component';
|
|
9
|
-
export * from './k8s-resource-list';
|
|
10
|
-
export * from './types';
|
|
11
|
-
export * from './utils';
|
|
12
|
-
export * from './k8s-resource-paged-list';
|
|
13
|
-
export const K8S_RESOURCE_LIST_MODULE = [
|
|
14
|
-
K8SResourceListFooterComponent,
|
|
15
|
-
K8sListFooterNoDataDirective,
|
|
16
|
-
K8sListFooterLoadingErrorDirective,
|
|
17
|
-
];
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvazhzLXJlc291cmNlLWxpc3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWM7QUFDZCxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLDRCQUE0QixFQUM1QixrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFFeEIsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0Qyw4QkFBOEI7SUFDOUIsNEJBQTRCO0lBQzVCLGtDQUFrQztDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBbW2luY2x1ZGU6azhzLXJlc291cmNlLWxpc3QvUkVBRE1FLm1kXV1cbiAqIEBtb2R1bGUgazhzLXJlc291cmNlLWxpc3RcbiAqIEBwcmVmZXJyZWRcbiAqL1xuLyoqIGltcG9ydHMgKi9cbmltcG9ydCB7XG4gIEs4U1Jlc291cmNlTGlzdEZvb3RlckNvbXBvbmVudCxcbiAgSzhzTGlzdEZvb3Rlck5vRGF0YURpcmVjdGl2ZSxcbiAgSzhzTGlzdEZvb3RlckxvYWRpbmdFcnJvckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi9mb290ZXIvY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9mb290ZXIvY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vazhzLXJlc291cmNlLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi9rOHMtcmVzb3VyY2UtcGFnZWQtbGlzdCc7XG5cbmV4cG9ydCBjb25zdCBLOFNfUkVTT1VSQ0VfTElTVF9NT0RVTEUgPSBbXG4gIEs4U1Jlc291cmNlTGlzdEZvb3RlckNvbXBvbmVudCxcbiAgSzhzTGlzdEZvb3Rlck5vRGF0YURpcmVjdGl2ZSxcbiAgSzhzTGlzdEZvb3RlckxvYWRpbmdFcnJvckRpcmVjdGl2ZSxcbl0gYXMgY29uc3Q7XG4iXX0=
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @packageDocumentation
|
|
3
|
-
* @module k8s-resource-list
|
|
4
|
-
*/
|
|
5
|
-
import { WatchEvent } from '@alauda-fe/dynamic-plugin-sdk';
|
|
6
|
-
import { EMPTY, Subject, merge, of, catchError, distinctUntilChanged, exhaustMap, filter, map, scan, startWith, switchMap, takeUntil, tap, finalize, ReplaySubject, } from 'rxjs';
|
|
7
|
-
import { DOWNGRADE_WATCH_ENABLED } from '../constants';
|
|
8
|
-
import { publishRef } from '../utils';
|
|
9
|
-
import { LoadAction, } from './types';
|
|
10
|
-
import { extractListParamsFromRoute, normalizeParams } from './utils';
|
|
11
|
-
export class K8SResourceList {
|
|
12
|
-
constructor({ fetcher, fetchParams$, activatedRoute, limit = 20, polling = 0, watcher, insertFn = defaultInsert, }) {
|
|
13
|
-
this.reloadAction$$ = new Subject();
|
|
14
|
-
this.loadMoreAction$$ = new Subject();
|
|
15
|
-
this.itemsScanner$$ = new Subject();
|
|
16
|
-
this.destroy$$ = new Subject();
|
|
17
|
-
this.bypassItems$ = new ReplaySubject(1);
|
|
18
|
-
this.snapshot = {};
|
|
19
|
-
this.insertFn = insertFn;
|
|
20
|
-
this.queryParams$ = (fetchParams$ ||
|
|
21
|
-
(activatedRoute
|
|
22
|
-
? extractListParamsFromRoute(activatedRoute)
|
|
23
|
-
: of(null))).pipe(publishRef());
|
|
24
|
-
const validPolling = (polling && watcher && DOWNGRADE_WATCH_ENABLED) || (polling && !watcher)
|
|
25
|
-
? polling
|
|
26
|
-
: 0;
|
|
27
|
-
this.loadState$ = this.buildLoadStateStream({
|
|
28
|
-
queryParams$: this.queryParams$,
|
|
29
|
-
fetcher,
|
|
30
|
-
limit,
|
|
31
|
-
polling: validPolling,
|
|
32
|
-
});
|
|
33
|
-
this.insertFn = insertFn;
|
|
34
|
-
this.initStreams(validPolling ? null : watcher);
|
|
35
|
-
}
|
|
36
|
-
reload(silent = false) {
|
|
37
|
-
this.reloadAction$$.next(silent);
|
|
38
|
-
}
|
|
39
|
-
loadMore() {
|
|
40
|
-
this.loadMoreAction$$.next();
|
|
41
|
-
}
|
|
42
|
-
scanItems(scanner) {
|
|
43
|
-
this.itemsScanner$$.next(scanner);
|
|
44
|
-
}
|
|
45
|
-
destroy() {
|
|
46
|
-
this.destroy$$.next();
|
|
47
|
-
this.destroy$$.complete();
|
|
48
|
-
}
|
|
49
|
-
create(resource) {
|
|
50
|
-
this.scanItems(this._create(resource));
|
|
51
|
-
}
|
|
52
|
-
update(resource) {
|
|
53
|
-
this.scanItems(this._update(resource));
|
|
54
|
-
}
|
|
55
|
-
delete(resource) {
|
|
56
|
-
if (!resource) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
this.scanItems(this._delete(resource));
|
|
60
|
-
}
|
|
61
|
-
_create(resource) {
|
|
62
|
-
return (items) => {
|
|
63
|
-
if (!resource.metadata.name
|
|
64
|
-
.toLowerCase()
|
|
65
|
-
.includes(this.snapshot.queryParams?.keyword?.toLowerCase() ??
|
|
66
|
-
'')) {
|
|
67
|
-
return items;
|
|
68
|
-
}
|
|
69
|
-
return this.insertFn(items, resource, this.snapshot.hasMore);
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
_update(resource) {
|
|
73
|
-
return (items) => items.map(item => item.metadata.uid === resource.metadata.uid ? resource : item);
|
|
74
|
-
}
|
|
75
|
-
_delete({ metadata: { uid } }) {
|
|
76
|
-
return (items) => items.filter(item => item.metadata.uid !== uid);
|
|
77
|
-
}
|
|
78
|
-
buildLoadStateStream({ queryParams$, fetcher, polling, limit, }) {
|
|
79
|
-
const load$ = merge(queryParams$.pipe(map(queryParams => () => ({ queryParams, action: LoadAction.Reload }))), this.reloadAction$$.pipe(map(silent => (prev) => ({
|
|
80
|
-
...prev,
|
|
81
|
-
action: silent ? LoadAction.SilentReload : LoadAction.Reload,
|
|
82
|
-
})))).pipe(scan((acc, scanner) => scanner(acc), {}), tap(({ action, queryParams }) => {
|
|
83
|
-
if (action === LoadAction.Reload) {
|
|
84
|
-
this.snapshot = {
|
|
85
|
-
queryParams,
|
|
86
|
-
};
|
|
87
|
-
this.bypassItems$.next(null);
|
|
88
|
-
}
|
|
89
|
-
}));
|
|
90
|
-
return load$.pipe(switchMap(({ action: leadAction, queryParams }) => this.loadMoreAction$$.pipe(filter(() => this.snapshot.hasMore), map(() => true), startWith(false), exhaustMap(loadMore => {
|
|
91
|
-
if (this.timer) {
|
|
92
|
-
window.clearTimeout(this.timer);
|
|
93
|
-
}
|
|
94
|
-
const token = this.snapshot.continueToken;
|
|
95
|
-
const hasMore = this.snapshot.hasMore;
|
|
96
|
-
const currLength = this.snapshot.items?.length ?? limit;
|
|
97
|
-
const action = loadMore ? LoadAction.LoadMore : leadAction;
|
|
98
|
-
return fetcher(normalizeParams({
|
|
99
|
-
limit: `${action === LoadAction.SilentReload
|
|
100
|
-
? hasMore
|
|
101
|
-
? currLength
|
|
102
|
-
: 0
|
|
103
|
-
: limit}`,
|
|
104
|
-
continue: action === LoadAction.LoadMore ? token : '',
|
|
105
|
-
...queryParams,
|
|
106
|
-
})).pipe(map(rawResponse => ({ rawResponse, loadingError: null })), catchError((err) => of({
|
|
107
|
-
loadingError: action === LoadAction.SilentReload ? null : err,
|
|
108
|
-
})), tap(res => {
|
|
109
|
-
if (polling && !res.loadingError) {
|
|
110
|
-
this.timer = window.setTimeout(() => {
|
|
111
|
-
this.reload(true);
|
|
112
|
-
}, polling);
|
|
113
|
-
}
|
|
114
|
-
}), map(state => ({
|
|
115
|
-
...state,
|
|
116
|
-
action,
|
|
117
|
-
})), startWith({
|
|
118
|
-
action,
|
|
119
|
-
loading: true,
|
|
120
|
-
}));
|
|
121
|
-
}))), map(state => ({
|
|
122
|
-
action: LoadAction.LoadMore,
|
|
123
|
-
rawResponse: null,
|
|
124
|
-
loading: false,
|
|
125
|
-
loadingError: null,
|
|
126
|
-
...state,
|
|
127
|
-
})), tap(state => {
|
|
128
|
-
this.snapshot.rawResponse = state.rawResponse;
|
|
129
|
-
this.snapshot.loadingError = state.loadingError;
|
|
130
|
-
this.snapshot.loading =
|
|
131
|
-
state.loading && state.action !== LoadAction.SilentReload;
|
|
132
|
-
this.snapshot.continueToken = this.extractContinueTokenFromState(state);
|
|
133
|
-
this.snapshot.hasMore = !!this.snapshot.continueToken;
|
|
134
|
-
}), finalize(() => {
|
|
135
|
-
this.snapshot = {};
|
|
136
|
-
this.bypassItems$.next(null);
|
|
137
|
-
if (this.timer) {
|
|
138
|
-
window.clearTimeout(this.timer);
|
|
139
|
-
}
|
|
140
|
-
}), takeUntil(this.destroy$$), publishRef());
|
|
141
|
-
}
|
|
142
|
-
extractContinueTokenFromState({ rawResponse, loadingError, }) {
|
|
143
|
-
if (rawResponse) {
|
|
144
|
-
return rawResponse.metadata?.continue ?? '';
|
|
145
|
-
}
|
|
146
|
-
if (loadingError && 'code' in loadingError && loadingError.code === 410) {
|
|
147
|
-
return loadingError.metadata?.continue;
|
|
148
|
-
}
|
|
149
|
-
return this.snapshot.continueToken;
|
|
150
|
-
}
|
|
151
|
-
initStreams(watcher) {
|
|
152
|
-
this.rawResponse$ = this.loadState$.pipe(map(data => data.rawResponse), distinctUntilChanged(), publishRef());
|
|
153
|
-
this.loading$ = this.loadState$.pipe(map(({ loading, action }) => loading && action !== LoadAction.SilentReload), distinctUntilChanged(), publishRef());
|
|
154
|
-
this.loadingError$ = this.loadState$.pipe(map(state => state.loadingError), distinctUntilChanged(), publishRef());
|
|
155
|
-
this.continueToken$ = this.loadState$.pipe(filter(({ loading }) => !loading), switchMap(({ rawResponse, loadingError: err }) => {
|
|
156
|
-
if (rawResponse) {
|
|
157
|
-
return of(rawResponse.metadata?.continue ?? '');
|
|
158
|
-
}
|
|
159
|
-
if (err && 'code' in err && err.code === 410) {
|
|
160
|
-
return of(err.metadata?.continue);
|
|
161
|
-
}
|
|
162
|
-
return EMPTY;
|
|
163
|
-
}), distinctUntilChanged(), publishRef());
|
|
164
|
-
this.hasMore$ = this.continueToken$.pipe(map(token => !!token), distinctUntilChanged(), publishRef());
|
|
165
|
-
this.items$ = merge(this.loadState$.pipe(map(state => (items) => {
|
|
166
|
-
const newItems = state.rawResponse
|
|
167
|
-
? (state.rawResponse.items ?? [])
|
|
168
|
-
: null;
|
|
169
|
-
if (state.action === LoadAction.Reload) {
|
|
170
|
-
return newItems ?? [];
|
|
171
|
-
}
|
|
172
|
-
if (state.action === LoadAction.SilentReload) {
|
|
173
|
-
return newItems ?? items;
|
|
174
|
-
}
|
|
175
|
-
if (state.action === LoadAction.LoadMore) {
|
|
176
|
-
return newItems ? [...items, ...newItems] : items;
|
|
177
|
-
}
|
|
178
|
-
return items;
|
|
179
|
-
})), this.itemsScanner$$, watcher ? this.buildWatcher(watcher) : EMPTY).pipe(scan((acc, scanner) => scanner(acc), []), tap(items => {
|
|
180
|
-
this.snapshot.items = items;
|
|
181
|
-
this.bypassItems$.next(items);
|
|
182
|
-
}), takeUntil(this.destroy$$), publishRef());
|
|
183
|
-
}
|
|
184
|
-
buildWatcher(watcher) {
|
|
185
|
-
return this.rawResponse$.pipe(filter(res => !!res), distinctUntilChanged((a, b) => a.metadata?.resourceVersion === b.metadata?.resourceVersion), switchMap(list => watcher(list.metadata?.resourceVersion, this.snapshot.queryParams).pipe(catchError(() => {
|
|
186
|
-
this.reload(true);
|
|
187
|
-
return EMPTY;
|
|
188
|
-
}))), switchMap(({ type, object: resource }) => {
|
|
189
|
-
switch (type) {
|
|
190
|
-
case WatchEvent.Added: {
|
|
191
|
-
return of(this._create(resource));
|
|
192
|
-
}
|
|
193
|
-
case WatchEvent.Modified: {
|
|
194
|
-
return of(this._update(resource));
|
|
195
|
-
}
|
|
196
|
-
case WatchEvent.Deleted: {
|
|
197
|
-
return of(this._delete(resource));
|
|
198
|
-
}
|
|
199
|
-
default: {
|
|
200
|
-
return EMPTY;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}));
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
function defaultInsert(items, res, hasMore) {
|
|
207
|
-
for (let i = 0; i < items.length; i++) {
|
|
208
|
-
const compare = resourceCompare(res, items[i]);
|
|
209
|
-
if (compare === 0) {
|
|
210
|
-
return items.map((item, index) => (index === i ? res : item));
|
|
211
|
-
}
|
|
212
|
-
if (compare < 0) {
|
|
213
|
-
return [...items.slice(0, i), res, ...items.slice(i)];
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return hasMore ? items : [...items, res];
|
|
217
|
-
}
|
|
218
|
-
function resourceCompare(a, b) {
|
|
219
|
-
const nsCompare = a.metadata.namespace?.localeCompare(b.metadata.namespace) ?? 0;
|
|
220
|
-
return nsCompare === 0
|
|
221
|
-
? a.metadata.name.localeCompare(b.metadata.name)
|
|
222
|
-
: nsCompare;
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiazhzLXJlc291cmNlLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvazhzLXJlc291cmNlLWxpc3QvazhzLXJlc291cmNlLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFDTCxLQUFLLEVBRUwsT0FBTyxFQUNQLEtBQUssRUFDTCxFQUFFLEVBQ0YsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0osU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILFFBQVEsRUFDUixhQUFhLEdBQ2QsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV0QyxPQUFPLEVBTUwsVUFBVSxHQUtYLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEUsTUFBTSxPQUFPLGVBQWU7SUE4QjFCLFlBQVksRUFDVixPQUFPLEVBQ1AsWUFBWSxFQUNaLGNBQWMsRUFDZCxLQUFLLEdBQUcsRUFBRSxFQUNWLE9BQU8sR0FBRyxDQUFDLEVBQ1gsT0FBTyxFQUNQLFFBQVEsR0FBRyxhQUFhLEdBQzZCO1FBaEN0QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBQ2hELGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWWpE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Q0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDbkUsTUFBTSxTQUFTLEdBQ2IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sU0FBUyxLQUFLLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNoRCxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBrOHMtcmVzb3VyY2UtbGlzdFxuICovXG5cbmltcG9ydCB7IFdhdGNoRXZlbnQgfSBmcm9tICdAYWxhdWRhLWZlL2R5bmFtaWMtcGx1Z2luLXNkayc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIEVNUFRZLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBtZXJnZSxcbiAgb2YsXG4gIGNhdGNoRXJyb3IsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBleGhhdXN0TWFwLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc2NhbixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICBmaW5hbGl6ZSxcbiAgUmVwbGF5U3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERPV05HUkFERV9XQVRDSF9FTkFCTEVEIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEt1YmVybmV0ZXNSZXNvdXJjZSxcbiAgS3ViZXJuZXRlc1Jlc291cmNlTGlzdCxcbiAgUmVzb3VyY2VMaXN0UGFyYW1zLFxuICBTdGF0dXMsXG4gIFN0cmluZ01hcCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcHVibGlzaFJlZiB9IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgQ29uZmlnV2l0aFBhcmFtcyxcbiAgQ29uZmlnV2l0aFJvdXRlLFxuICBJbnNlcnRGbixcbiAgSXRlbXNTY2FubmVyLFxuICBMaXN0UGFyYW1zLFxuICBMb2FkQWN0aW9uLFxuICBMb2FkU25hcHNob3QsXG4gIExvYWRTdGF0ZSxcbiAgU3RyZWFtTGlzdExvYWRlcixcbiAgV2F0Y2hlcixcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBleHRyYWN0TGlzdFBhcmFtc0Zyb21Sb3V0ZSwgbm9ybWFsaXplUGFyYW1zIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBLOFNSZXNvdXJjZUxpc3Q8XG4gIFIgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2UgPSBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIFEgZXh0ZW5kcyBvYmplY3QgPSBSZXNvdXJjZUxpc3RQYXJhbXMsXG4gIFAgZXh0ZW5kcyBRICYgTGlzdFBhcmFtcyA9IFEgJiBMaXN0UGFyYW1zLFxuPiBpbXBsZW1lbnRzIFN0cmVhbUxpc3RMb2FkZXI8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxSPiwgUj5cbntcbiAgcHJpdmF0ZSByZWFkb25seSByZWxvYWRBY3Rpb24kJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZE1vcmVBY3Rpb24kJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXNTY2FubmVyJCQgPSBuZXcgU3ViamVjdDxJdGVtc1NjYW5uZXI8Uj4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnNlcnRGbjogSW5zZXJ0Rm48Uj47XG5cbiAgbG9hZFN0YXRlJDogT2JzZXJ2YWJsZTxMb2FkU3RhdGU8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxSPj4+O1xuXG4gIHF1ZXJ5UGFyYW1zJDogT2JzZXJ2YWJsZTxRPjtcbiAgcmF3UmVzcG9uc2UkOiBPYnNlcnZhYmxlPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3Q8Uj4+O1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbG9hZGluZ0Vycm9yJDogT2JzZXJ2YWJsZTxIdHRwRXJyb3JSZXNwb25zZSB8IFN0YXR1cz47XG4gIGhhc01vcmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBjb250aW51ZVRva2VuJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBpdGVtcyQ6IE9ic2VydmFibGU8UltdPjtcbiAgYnlwYXNzSXRlbXMkID0gbmV3IFJlcGxheVN1YmplY3Q8UltdPigxKTtcblxuICB0aW1lcjogbnVtYmVyO1xuXG4gIHNuYXBzaG90OiBMb2FkU25hcHNob3Q8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxSPiwgUiwgUT4gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcih7IGZldGNoZXIsIGFjdGl2YXRlZFJvdXRlIH06IENvbmZpZ1dpdGhSb3V0ZTxSLCBRLCBQPik7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5pZmllZC1zaWduYXR1cmVzXG4gIGNvbnN0cnVjdG9yKHsgZmV0Y2hlciwgZmV0Y2hQYXJhbXMkIH06IENvbmZpZ1dpdGhQYXJhbXM8UiwgUSwgUD4pO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmV0Y2hlcixcbiAgICBmZXRjaFBhcmFtcyQsXG4gICAgYWN0aXZhdGVkUm91dGUsXG4gICAgbGltaXQgPSAyMCxcbiAgICBwb2xsaW5nID0gMCxcbiAgICB3YXRjaGVyLFxuICAgIGluc2VydEZuID0gZGVmYXVsdEluc2VydCxcbiAgfTogQ29uZmlnV2l0aFJvdXRlPFIsIFEsIFA+ICYgQ29uZmlnV2l0aFBhcmFtczxSLCBRLCBQPikge1xuICAgIHRoaXMuaW5zZXJ0Rm4gPSBpbnNlcnRGbjtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMkID0gKFxuICAgICAgKGZldGNoUGFyYW1zJCB8fFxuICAgICAgICAoYWN0aXZhdGVkUm91dGVcbiAgICAgICAgICA/IGV4dHJhY3RMaXN0UGFyYW1zRnJvbVJvdXRlKGFjdGl2YXRlZFJvdXRlKVxuICAgICAgICAgIDogb2YobnVsbCkpKSBhcyBPYnNlcnZhYmxlPFE+XG4gICAgKS5waXBlKHB1Ymxpc2hSZWYoKSk7XG5cbiAgICBjb25zdCB2YWxpZFBvbGxpbmcgPVxuICAgICAgKHBvbGxpbmcgJiYgd2F0Y2hlciAmJiBET1dOR1JBREVfV0FUQ0hfRU5BQkxFRCkgfHwgKHBvbGxpbmcgJiYgIXdhdGNoZXIpXG4gICAgICAgID8gcG9sbGluZ1xuICAgICAgICA6IDA7XG5cbiAgICB0aGlzLmxvYWRTdGF0ZSQgPSB0aGlzLmJ1aWxkTG9hZFN0YXRlU3RyZWFtKHtcbiAgICAgIHF1ZXJ5UGFyYW1zJDogdGhpcy5xdWVyeVBhcmFtcyQsXG4gICAgICBmZXRjaGVyLFxuICAgICAgbGltaXQsXG4gICAgICBwb2xsaW5nOiB2YWxpZFBvbGxpbmcsXG4gICAgfSk7XG5cbiAgICB0aGlzLmluc2VydEZuID0gaW5zZXJ0Rm47XG5cbiAgICB0aGlzLmluaXRTdHJlYW1zKHZhbGlkUG9sbGluZyA/IG51bGwgOiB3YXRjaGVyKTtcbiAgfVxuXG4gIHJlbG9hZChzaWxlbnQgPSBmYWxzZSkge1xuICAgIHRoaXMucmVsb2FkQWN0aW9uJCQubmV4dChzaWxlbnQpO1xuICB9XG5cbiAgbG9hZE1vcmUoKSB7XG4gICAgdGhpcy5sb2FkTW9yZUFjdGlvbiQkLm5leHQoKTtcbiAgfVxuXG4gIHNjYW5JdGVtcyhzY2FubmVyOiBJdGVtc1NjYW5uZXI8Uj4pIHtcbiAgICB0aGlzLml0ZW1zU2Nhbm5lciQkLm5leHQoc2Nhbm5lcik7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY3JlYXRlKHJlc291cmNlOiBSKSB7XG4gICAgdGhpcy5zY2FuSXRlbXModGhpcy5fY3JlYXRlKHJlc291cmNlKSk7XG4gIH1cblxuICB1cGRhdGUocmVzb3VyY2U6IFIpIHtcbiAgICB0aGlzLnNjYW5JdGVtcyh0aGlzLl91cGRhdGUocmVzb3VyY2UpKTtcbiAgfVxuXG4gIGRlbGV0ZShyZXNvdXJjZT86IFIpIHtcbiAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Nhbkl0ZW1zKHRoaXMuX2RlbGV0ZShyZXNvdXJjZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlKHJlc291cmNlOiBSKSB7XG4gICAgcmV0dXJuIChpdGVtczogUltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFyZXNvdXJjZS5tZXRhZGF0YS5uYW1lXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5jbHVkZXMoXG4gICAgICAgICAgICAodGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyBhcyBTdHJpbmdNYXApPy5rZXl3b3JkPy50b0xvd2VyQ2FzZSgpID8/XG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRGbihpdGVtcywgcmVzb3VyY2UsIHRoaXMuc25hcHNob3QuaGFzTW9yZSk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZShyZXNvdXJjZTogUikge1xuICAgIHJldHVybiAoaXRlbXM6IFJbXSkgPT5cbiAgICAgIGl0ZW1zLm1hcChpdGVtID0+XG4gICAgICAgIGl0ZW0ubWV0YWRhdGEudWlkID09PSByZXNvdXJjZS5tZXRhZGF0YS51aWQgPyByZXNvdXJjZSA6IGl0ZW0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVsZXRlKHsgbWV0YWRhdGE6IHsgdWlkIH0gfTogUikge1xuICAgIHJldHVybiAoaXRlbXM6IFJbXSkgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5tZXRhZGF0YS51aWQgIT09IHVpZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9hZFN0YXRlU3RyZWFtKHtcbiAgICBxdWVyeVBhcmFtcyQsXG4gICAgZmV0Y2hlcixcbiAgICBwb2xsaW5nLFxuICAgIGxpbWl0LFxuICB9OiB7XG4gICAgcXVlcnlQYXJhbXMkOiBPYnNlcnZhYmxlPFE+O1xuICAgIGZldGNoZXI6IChwOiBQKSA9PiBPYnNlcnZhYmxlPEt1YmVybmV0ZXNSZXNvdXJjZUxpc3Q8Uj4+O1xuICAgIHBvbGxpbmc6IG51bWJlcjtcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9KSB7XG4gICAgY29uc3QgbG9hZCQgPSBtZXJnZShcbiAgICAgIHF1ZXJ5UGFyYW1zJC5waXBlKFxuICAgICAgICBtYXAocXVlcnlQYXJhbXMgPT4gKCkgPT4gKHsgcXVlcnlQYXJhbXMsIGFjdGlvbjogTG9hZEFjdGlvbi5SZWxvYWQgfSkpLFxuICAgICAgKSxcbiAgICAgIHRoaXMucmVsb2FkQWN0aW9uJCQucGlwZShcbiAgICAgICAgbWFwKHNpbGVudCA9PiAocHJldjogeyBxdWVyeVBhcmFtcz86IFA7IGFjdGlvbj86IExvYWRBY3Rpb24gfSkgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGFjdGlvbjogc2lsZW50ID8gTG9hZEFjdGlvbi5TaWxlbnRSZWxvYWQgOiBMb2FkQWN0aW9uLlJlbG9hZCxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICApLnBpcGUoXG4gICAgICBzY2FuKFxuICAgICAgICAoYWNjLCBzY2FubmVyKSA9PiBzY2FubmVyKGFjYyksXG4gICAgICAgIHt9IGFzIHsgcXVlcnlQYXJhbXM/OiBQOyBhY3Rpb24/OiBMb2FkQWN0aW9uIH0sXG4gICAgICApLFxuICAgICAgdGFwKCh7IGFjdGlvbiwgcXVlcnlQYXJhbXMgfSkgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uID09PSBMb2FkQWN0aW9uLlJlbG9hZCkge1xuICAgICAgICAgIHRoaXMuc25hcHNob3QgPSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYnlwYXNzSXRlbXMkLm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gbG9hZCQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeyBhY3Rpb246IGxlYWRBY3Rpb24sIHF1ZXJ5UGFyYW1zIH0pID0+XG4gICAgICAgIHRoaXMubG9hZE1vcmVBY3Rpb24kJC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnNuYXBzaG90Lmhhc01vcmUpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgICAgIGV4aGF1c3RNYXAobG9hZE1vcmUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5zbmFwc2hvdC5jb250aW51ZVRva2VuO1xuICAgICAgICAgICAgY29uc3QgaGFzTW9yZSA9IHRoaXMuc25hcHNob3QuaGFzTW9yZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJMZW5ndGggPSB0aGlzLnNuYXBzaG90Lml0ZW1zPy5sZW5ndGggPz8gbGltaXQ7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBsb2FkTW9yZSA/IExvYWRBY3Rpb24uTG9hZE1vcmUgOiBsZWFkQWN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXIoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbGltaXQ6IGAke1xuICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSBMb2FkQWN0aW9uLlNpbGVudFJlbG9hZFxuICAgICAgICAgICAgICAgICAgICA/IGhhc01vcmVcbiAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICAgICAgOiBsaW1pdFxuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBhY3Rpb24gPT09IExvYWRBY3Rpb24uTG9hZE1vcmUgPyB0b2tlbiA6ICcnLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICB9KSBhcyBQLFxuICAgICAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgICBtYXAocmF3UmVzcG9uc2UgPT4gKHsgcmF3UmVzcG9uc2UsIGxvYWRpbmdFcnJvcjogbnVsbCBhcyBhbnkgfSkpLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IFN0YXR1cyB8IEh0dHBFcnJvclJlc3BvbnNlKSA9PlxuICAgICAgICAgICAgICAgIG9mKHtcbiAgICAgICAgICAgICAgICAgIGxvYWRpbmdFcnJvcjogYWN0aW9uID09PSBMb2FkQWN0aW9uLlNpbGVudFJlbG9hZCA/IG51bGwgOiBlcnIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwb2xsaW5nICYmICFyZXMubG9hZGluZ0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIH0sIHBvbGxpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcChzdGF0ZSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICBzdGFydFdpdGgoe1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgbWFwKHN0YXRlID0+ICh7XG4gICAgICAgIGFjdGlvbjogTG9hZEFjdGlvbi5Mb2FkTW9yZSxcbiAgICAgICAgcmF3UmVzcG9uc2U6IG51bGwsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkaW5nRXJyb3I6IG51bGwsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgfSkpLFxuICAgICAgdGFwKHN0YXRlID0+IHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5yYXdSZXNwb25zZSA9IHN0YXRlLnJhd1Jlc3BvbnNlO1xuICAgICAgICB0aGlzLnNuYXBzaG90LmxvYWRpbmdFcnJvciA9IHN0YXRlLmxvYWRpbmdFcnJvcjtcbiAgICAgICAgdGhpcy5zbmFwc2hvdC5sb2FkaW5nID1cbiAgICAgICAgICBzdGF0ZS5sb2FkaW5nICYmIHN0YXRlLmFjdGlvbiAhPT0gTG9hZEFjdGlvbi5TaWxlbnRSZWxvYWQ7XG4gICAgICAgIHRoaXMuc25hcHNob3QuY29udGludWVUb2tlbiA9IHRoaXMuZXh0cmFjdENvbnRpbnVlVG9rZW5Gcm9tU3RhdGUoc3RhdGUpO1xuICAgICAgICB0aGlzLnNuYXBzaG90Lmhhc01vcmUgPSAhIXRoaXMuc25hcHNob3QuY29udGludWVUb2tlbjtcbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNuYXBzaG90ID0ge307XG4gICAgICAgIHRoaXMuYnlwYXNzSXRlbXMkLm5leHQobnVsbCk7XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCQpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RDb250aW51ZVRva2VuRnJvbVN0YXRlKHtcbiAgICByYXdSZXNwb25zZSxcbiAgICBsb2FkaW5nRXJyb3IsXG4gIH06IExvYWRTdGF0ZTxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PFI+Pikge1xuICAgIGlmIChyYXdSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJhd1Jlc3BvbnNlLm1ldGFkYXRhPy5jb250aW51ZSA/PyAnJztcbiAgICB9XG5cbiAgICBpZiAobG9hZGluZ0Vycm9yICYmICdjb2RlJyBpbiBsb2FkaW5nRXJyb3IgJiYgbG9hZGluZ0Vycm9yLmNvZGUgPT09IDQxMCkge1xuICAgICAgcmV0dXJuIGxvYWRpbmdFcnJvci5tZXRhZGF0YT8uY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc25hcHNob3QuY29udGludWVUb2tlbjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0cmVhbXMod2F0Y2hlcjogV2F0Y2hlcjxSLCBRPikge1xuICAgIHRoaXMucmF3UmVzcG9uc2UkID0gdGhpcy5sb2FkU3RhdGUkLnBpcGUoXG4gICAgICBtYXAoZGF0YSA9PiBkYXRhLnJhd1Jlc3BvbnNlKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmxvYWRTdGF0ZSQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKHsgbG9hZGluZywgYWN0aW9uIH0pID0+IGxvYWRpbmcgJiYgYWN0aW9uICE9PSBMb2FkQWN0aW9uLlNpbGVudFJlbG9hZCxcbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG5cbiAgICB0aGlzLmxvYWRpbmdFcnJvciQgPSB0aGlzLmxvYWRTdGF0ZSQucGlwZShcbiAgICAgIG1hcChzdGF0ZSA9PiBzdGF0ZS5sb2FkaW5nRXJyb3IpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy5jb250aW51ZVRva2VuJCA9IHRoaXMubG9hZFN0YXRlJC5waXBlKFxuICAgICAgZmlsdGVyKCh7IGxvYWRpbmcgfSkgPT4gIWxvYWRpbmcpLFxuICAgICAgc3dpdGNoTWFwKCh7IHJhd1Jlc3BvbnNlLCBsb2FkaW5nRXJyb3I6IGVyciB9KSA9PiB7XG4gICAgICAgIGlmIChyYXdSZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybiBvZihyYXdSZXNwb25zZS5tZXRhZGF0YT8uY29udGludWUgPz8gJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgJiYgJ2NvZGUnIGluIGVyciAmJiBlcnIuY29kZSA9PT0gNDEwKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGVyci5tZXRhZGF0YT8uY29udGludWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy5oYXNNb3JlJCA9IHRoaXMuY29udGludWVUb2tlbiQucGlwZShcbiAgICAgIG1hcCh0b2tlbiA9PiAhIXRva2VuKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbXMkID0gbWVyZ2UoXG4gICAgICB0aGlzLmxvYWRTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKHN0YXRlID0+IChpdGVtczogUltdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBzdGF0ZS5yYXdSZXNwb25zZVxuICAgICAgICAgICAgPyAoc3RhdGUucmF3UmVzcG9uc2UuaXRlbXMgPz8gW10pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PT0gTG9hZEFjdGlvbi5SZWxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtcyA/PyBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PT0gTG9hZEFjdGlvbi5TaWxlbnRSZWxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtcyA/PyBpdGVtcztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PT0gTG9hZEFjdGlvbi5Mb2FkTW9yZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW1zID8gWy4uLml0ZW1zLCAuLi5uZXdJdGVtc10gOiBpdGVtcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0aGlzLml0ZW1zU2Nhbm5lciQkLFxuICAgICAgd2F0Y2hlciA/IHRoaXMuYnVpbGRXYXRjaGVyKHdhdGNoZXIpIDogRU1QVFksXG4gICAgKS5waXBlKFxuICAgICAgc2NhbjxJdGVtc1NjYW5uZXI8Uj4sIFJbXT4oKGFjYywgc2Nhbm5lcikgPT4gc2Nhbm5lcihhY2MpLCBbXSksXG4gICAgICB0YXAoaXRlbXMgPT4ge1xuICAgICAgICB0aGlzLnNuYXBzaG90Lml0ZW1zID0gaXRlbXM7XG4gICAgICAgIHRoaXMuYnlwYXNzSXRlbXMkLm5leHQoaXRlbXMpO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCQpLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkV2F0Y2hlcih3YXRjaGVyOiBXYXRjaGVyPFIsIFE+KSB7XG4gICAgcmV0dXJuIHRoaXMucmF3UmVzcG9uc2UkLnBpcGUoXG4gICAgICBmaWx0ZXIocmVzID0+ICEhcmVzKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAoYSwgYikgPT4gYS5tZXRhZGF0YT8ucmVzb3VyY2VWZXJzaW9uID09PSBiLm1ldGFkYXRhPy5yZXNvdXJjZVZlcnNpb24sXG4gICAgICApLFxuICAgICAgc3dpdGNoTWFwKGxpc3QgPT5cbiAgICAgICAgd2F0Y2hlcihsaXN0Lm1ldGFkYXRhPy5yZXNvdXJjZVZlcnNpb24sIHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCh0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBzd2l0Y2hNYXAoKHsgdHlwZSwgb2JqZWN0OiByZXNvdXJjZSB9KSA9PiB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgV2F0Y2hFdmVudC5BZGRlZDoge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NyZWF0ZShyZXNvdXJjZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFdhdGNoRXZlbnQuTW9kaWZpZWQ6IHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl91cGRhdGUocmVzb3VyY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBXYXRjaEV2ZW50LkRlbGV0ZWQ6IHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9kZWxldGUocmVzb3VyY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0SW5zZXJ0PFQgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2U+KFxuICBpdGVtczogVFtdLFxuICByZXM6IFQsXG4gIGhhc01vcmU6IGJvb2xlYW4sXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvbXBhcmUgPSByZXNvdXJjZUNvbXBhcmUocmVzLCBpdGVtc1tpXSk7XG4gICAgaWYgKGNvbXBhcmUgPT09IDApIHtcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoaW5kZXggPT09IGkgPyByZXMgOiBpdGVtKSk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlIDwgMCkge1xuICAgICAgcmV0dXJuIFsuLi5pdGVtcy5zbGljZSgwLCBpKSwgcmVzLCAuLi5pdGVtcy5zbGljZShpKV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc01vcmUgPyBpdGVtcyA6IFsuLi5pdGVtcywgcmVzXTtcbn1cblxuZnVuY3Rpb24gcmVzb3VyY2VDb21wYXJlKGE6IEt1YmVybmV0ZXNSZXNvdXJjZSwgYjogS3ViZXJuZXRlc1Jlc291cmNlKSB7XG4gIGNvbnN0IG5zQ29tcGFyZSA9XG4gICAgYS5tZXRhZGF0YS5uYW1lc3BhY2U/LmxvY2FsZUNvbXBhcmUoYi5tZXRhZGF0YS5uYW1lc3BhY2UpID8/IDA7XG4gIHJldHVybiBuc0NvbXBhcmUgPT09IDBcbiAgICA/IGEubWV0YWRhdGEubmFtZS5sb2NhbGVDb21wYXJlKGIubWV0YWRhdGEubmFtZSlcbiAgICA6IG5zQ29tcGFyZTtcbn1cbiJdfQ==
|