@alauda-fe/dynamic-plugin-shared 0.0.1-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/README.md +7 -0
- package/array-form-table/base-string-map-form.component.d.ts +22 -0
- package/array-form-table/form/component.d.ts +106 -0
- package/array-form-table/form/index.d.ts +2 -0
- package/array-form-table/index.d.ts +10 -0
- package/array-form-table/key-value-form/component.d.ts +38 -0
- package/array-form-table/key-value-table/component.d.ts +9 -0
- package/array-form-table/string-array-form/component.d.ts +41 -0
- package/assets/images/abnormal.svg +1 -0
- package/assets/images/dark/disconnected.svg +1 -0
- package/assets/images/dark/license-abnormal.svg +1 -0
- package/assets/images/dark/network-abnormal.svg +1 -0
- package/assets/images/dark/no-data.svg +1 -0
- package/assets/images/dark/no-message.svg +1 -0
- package/assets/images/dark/no-permission.svg +1 -0
- package/assets/images/dark/no_realtime_alarm.svg +1 -0
- package/assets/images/dark/not-deployed.svg +1 -0
- package/assets/images/dark/not-found.svg +1 -0
- package/assets/images/dark/not-supported.svg +1 -0
- package/assets/images/dark/system-abnormal.svg +1 -0
- package/assets/images/light/disconnected.svg +1 -0
- package/assets/images/light/license-abnormal.svg +1 -0
- package/assets/images/light/network-abnormal.svg +1 -0
- package/assets/images/light/no-data.svg +1 -0
- package/assets/images/light/no-message.svg +1 -0
- package/assets/images/light/no-permission.svg +1 -0
- package/assets/images/light/no_realtime_alarm.svg +1 -0
- package/assets/images/light/not-deployed.svg +1 -0
- package/assets/images/light/not-found.svg +1 -0
- package/assets/images/light/not-supported.svg +1 -0
- package/assets/images/light/system-abnormal.svg +1 -0
- package/assets/images/no-data.png +0 -0
- package/async-data/async-data-loader.d.ts +31 -0
- package/async-data/error-page/component.d.ts +30 -0
- package/async-data/index.d.ts +13 -0
- package/async-data/page-state/component.d.ts +21 -0
- package/async-data/types.d.ts +29 -0
- package/code-editor/code-display-dialog/component.d.ts +17 -0
- package/code-editor/code-editor-configs.d.ts +19 -0
- package/code-editor/index.d.ts +10 -0
- package/code-editor/k8s-yaml-display-dialog/component.d.ts +16 -0
- package/code-editor/resource-yaml-display/component.d.ts +21 -0
- package/components/card-section/card-section.component.d.ts +9 -0
- package/components/confirm-delete/confirm-delete.component.d.ts +57 -0
- package/components/confirm-delete/utils.d.ts +25 -0
- package/components/current-time/component.d.ts +14 -0
- package/components/custom-columns-setting/component.d.ts +16 -0
- package/components/custom-columns-setting/index.d.ts +1 -0
- package/components/date-range-picker/component.d.ts +55 -0
- package/components/date-range-picker/index.d.ts +3 -0
- package/components/date-range-picker/type.d.ts +36 -0
- package/components/date-range-picker/util.d.ts +11 -0
- package/components/disabled-container/disabled-container.component.d.ts +21 -0
- package/components/disabled-container/index.d.ts +7 -0
- package/components/field-set/column/component.d.ts +10 -0
- package/components/field-set/group/component.d.ts +6 -0
- package/components/field-set/index.d.ts +7 -0
- package/components/field-set/item/component.d.ts +13 -0
- package/components/foldable-block/component.d.ts +17 -0
- package/components/foldable-item-in-table/component.d.ts +21 -0
- package/components/help-document/component.d.ts +29 -0
- package/components/help-document/directive.d.ts +20 -0
- package/components/help-document/index.d.ts +8 -0
- package/components/help-document/service.d.ts +20 -0
- package/components/index.d.ts +31 -0
- package/components/loading-mask/loading-mask.component.d.ts +13 -0
- package/components/page-guard/component/component.d.ts +40 -0
- package/components/page-guard/component/helper-directives.d.ts +17 -0
- package/components/page-guard/component/page-guard.type.d.ts +86 -0
- package/components/page-guard/index.d.ts +12 -0
- package/components/password-input/component.d.ts +39 -0
- package/components/pod-status/component.d.ts +25 -0
- package/components/pod-status/index.d.ts +3 -0
- package/components/pod-status/status.d.ts +4 -0
- package/components/pod-status/typings.d.ts +16 -0
- package/components/relative-time/component.d.ts +15 -0
- package/components/resource-label/component.d.ts +25 -0
- package/components/resource-multi-select/component.d.ts +41 -0
- package/components/resource-multi-select/util.d.ts +10 -0
- package/components/search-panel/component.d.ts +16 -0
- package/components/search-panel/helper.directive.d.ts +5 -0
- package/components/search-panel/search-item/component.d.ts +7 -0
- package/components/select-prefix-label/directive.d.ts +17 -0
- package/components/status-icon/status-icon.component.d.ts +16 -0
- package/components/tags-label/component.d.ts +56 -0
- package/components/terminating-tag/component.d.ts +7 -0
- package/components/text-ellipsis/component.d.ts +9 -0
- package/components/text-tooltip/directive.d.ts +21 -0
- package/components/text-with-url/component.d.ts +12 -0
- package/components/upload-file/component.d.ts +32 -0
- package/components/zero-state/zero-state.component.d.ts +16 -0
- package/constants/common.d.ts +64 -0
- package/constants/index.d.ts +6 -0
- package/constants/k8s.d.ts +12 -0
- package/constants/patterns.d.ts +124 -0
- package/constants/resource-definitions.d.ts +414 -0
- package/constants/status-icons.d.ts +34 -0
- package/constants/timezones.d.ts +6 -0
- package/directives/aui-code-editor.directive.d.ts +13 -0
- package/directives/click-outside.directive.d.ts +12 -0
- package/directives/declare.directive.d.ts +8 -0
- package/directives/disabled.directive.d.ts +28 -0
- package/directives/effect-directive/coerce-number.directive.d.ts +8 -0
- package/directives/effect-directive/e2e-attribute-binding.directive.d.ts +10 -0
- package/directives/effect-directive/event.directive.d.ts +47 -0
- package/directives/effect-directive/index.d.ts +12 -0
- package/directives/effect-directive/min-max.directive.d.ts +30 -0
- package/directives/effect-directive/trim.directive.d.ts +7 -0
- package/directives/effect-directive/validators.directive.d.ts +12 -0
- package/directives/feature-gate.directive.d.ts +31 -0
- package/directives/index.d.ts +12 -0
- package/directives/last-form-item.directive.d.ts +8 -0
- package/directives/readonly-field.directive.d.ts +39 -0
- package/directives/resize.directive.d.ts +17 -0
- package/directives/scroll-border-observer.directive.d.ts +23 -0
- package/directives/scroll-to-first-invalid.directive.d.ts +24 -0
- package/directives/value-trace.directive.d.ts +27 -0
- package/esm2022/alauda-fe-dynamic-plugin-shared.mjs +5 -0
- package/esm2022/array-form-table/base-string-map-form.component.mjs +92 -0
- package/esm2022/array-form-table/form/component.mjs +266 -0
- package/esm2022/array-form-table/form/index.mjs +12 -0
- package/esm2022/array-form-table/index.mjs +11 -0
- package/esm2022/array-form-table/key-value-form/component.mjs +135 -0
- package/esm2022/array-form-table/key-value-table/component.mjs +24 -0
- package/esm2022/array-form-table/string-array-form/component.mjs +168 -0
- package/esm2022/async-data/async-data-loader.mjs +63 -0
- package/esm2022/async-data/error-page/component.mjs +54 -0
- package/esm2022/async-data/index.mjs +18 -0
- package/esm2022/async-data/page-state/component.mjs +62 -0
- package/esm2022/async-data/types.mjs +6 -0
- package/esm2022/code-editor/code-display-dialog/component.mjs +35 -0
- package/esm2022/code-editor/code-editor-configs.mjs +66 -0
- package/esm2022/code-editor/index.mjs +11 -0
- package/esm2022/code-editor/k8s-yaml-display-dialog/component.mjs +26 -0
- package/esm2022/code-editor/resource-yaml-display/component.mjs +67 -0
- package/esm2022/components/card-section/card-section.component.mjs +24 -0
- package/esm2022/components/confirm-delete/confirm-delete.component.mjs +192 -0
- package/esm2022/components/confirm-delete/utils.mjs +8 -0
- package/esm2022/components/current-time/component.mjs +39 -0
- package/esm2022/components/custom-columns-setting/component.mjs +75 -0
- package/esm2022/components/custom-columns-setting/index.mjs +2 -0
- package/esm2022/components/date-range-picker/component.mjs +215 -0
- package/esm2022/components/date-range-picker/index.mjs +4 -0
- package/esm2022/components/date-range-picker/type.mjs +2 -0
- package/esm2022/components/date-range-picker/util.mjs +57 -0
- package/esm2022/components/disabled-container/disabled-container.component.mjs +81 -0
- package/esm2022/components/disabled-container/index.mjs +8 -0
- package/esm2022/components/field-set/column/component.mjs +25 -0
- package/esm2022/components/field-set/group/component.mjs +16 -0
- package/esm2022/components/field-set/index.mjs +14 -0
- package/esm2022/components/field-set/item/component.mjs +41 -0
- package/esm2022/components/foldable-block/component.mjs +60 -0
- package/esm2022/components/foldable-item-in-table/component.mjs +56 -0
- package/esm2022/components/help-document/component.mjs +69 -0
- package/esm2022/components/help-document/directive.mjs +70 -0
- package/esm2022/components/help-document/index.mjs +9 -0
- package/esm2022/components/help-document/service.mjs +43 -0
- package/esm2022/components/index.mjs +32 -0
- package/esm2022/components/loading-mask/loading-mask.component.mjs +35 -0
- package/esm2022/components/page-guard/component/component.mjs +101 -0
- package/esm2022/components/page-guard/component/helper-directives.mjs +51 -0
- package/esm2022/components/page-guard/component/page-guard.type.mjs +82 -0
- package/esm2022/components/page-guard/index.mjs +19 -0
- package/esm2022/components/password-input/component.mjs +143 -0
- package/esm2022/components/pod-status/component.mjs +49 -0
- package/esm2022/components/pod-status/index.mjs +4 -0
- package/esm2022/components/pod-status/status.mjs +84 -0
- package/esm2022/components/pod-status/typings.mjs +19 -0
- package/esm2022/components/relative-time/component.mjs +58 -0
- package/esm2022/components/resource-label/component.mjs +100 -0
- package/esm2022/components/resource-multi-select/component.mjs +152 -0
- package/esm2022/components/resource-multi-select/util.mjs +24 -0
- package/esm2022/components/search-panel/component.mjs +51 -0
- package/esm2022/components/search-panel/helper.directive.mjs +14 -0
- package/esm2022/components/search-panel/search-item/component.mjs +15 -0
- package/esm2022/components/select-prefix-label/directive.mjs +89 -0
- package/esm2022/components/status-icon/status-icon.component.mjs +56 -0
- package/esm2022/components/tags-label/component.mjs +224 -0
- package/esm2022/components/terminating-tag/component.mjs +16 -0
- package/esm2022/components/text-ellipsis/component.mjs +28 -0
- package/esm2022/components/text-tooltip/directive.mjs +71 -0
- package/esm2022/components/text-with-url/component.mjs +40 -0
- package/esm2022/components/upload-file/component.mjs +95 -0
- package/esm2022/components/zero-state/zero-state.component.mjs +51 -0
- package/esm2022/constants/common.mjs +86 -0
- package/esm2022/constants/index.mjs +7 -0
- package/esm2022/constants/k8s.mjs +13 -0
- package/esm2022/constants/patterns.mjs +142 -0
- package/esm2022/constants/resource-definitions.mjs +424 -0
- package/esm2022/constants/status-icons.mjs +65 -0
- package/esm2022/constants/timezones.mjs +234 -0
- package/esm2022/directives/aui-code-editor.directive.mjs +30 -0
- package/esm2022/directives/click-outside.directive.mjs +49 -0
- package/esm2022/directives/declare.directive.mjs +27 -0
- package/esm2022/directives/disabled.directive.mjs +76 -0
- package/esm2022/directives/effect-directive/coerce-number.directive.mjs +54 -0
- package/esm2022/directives/effect-directive/e2e-attribute-binding.directive.mjs +57 -0
- package/esm2022/directives/effect-directive/event.directive.mjs +129 -0
- package/esm2022/directives/effect-directive/index.mjs +21 -0
- package/esm2022/directives/effect-directive/min-max.directive.mjs +107 -0
- package/esm2022/directives/effect-directive/trim.directive.mjs +40 -0
- package/esm2022/directives/effect-directive/validators.directive.mjs +43 -0
- package/esm2022/directives/feature-gate.directive.mjs +90 -0
- package/esm2022/directives/index.mjs +13 -0
- package/esm2022/directives/last-form-item.directive.mjs +18 -0
- package/esm2022/directives/readonly-field.directive.mjs +145 -0
- package/esm2022/directives/resize.directive.mjs +39 -0
- package/esm2022/directives/scroll-border-observer.directive.mjs +77 -0
- package/esm2022/directives/scroll-to-first-invalid.directive.mjs +126 -0
- package/esm2022/directives/value-trace.directive.mjs +61 -0
- package/esm2022/form/base-form-container.mjs +126 -0
- package/esm2022/form/base-nested-form-control.mjs +190 -0
- package/esm2022/form/errors-mapper/base-errors-mapper.mjs +41 -0
- package/esm2022/form/errors-mapper/default-errors-mapper.service.mjs +65 -0
- package/esm2022/form/errors-mapper/errors-mapper-component/component.mjs +53 -0
- package/esm2022/form/errors-mapper/errors-mapper.directive.mjs +109 -0
- package/esm2022/form/errors-mapper/index.mjs +10 -0
- package/esm2022/form/errors-mapper/types.mjs +2 -0
- package/esm2022/form/index.mjs +6 -0
- package/esm2022/form/utils.mjs +61 -0
- package/esm2022/form/validators/async-function-validator.directive.mjs +49 -0
- package/esm2022/form/validators/dns1123-subdomain.mjs +42 -0
- package/esm2022/form/validators/function-validator.directive.mjs +49 -0
- package/esm2022/form/validators/index.mjs +10 -0
- package/esm2022/form/validators/maxlength-minlength-validator.directive.mjs +71 -0
- package/esm2022/form/validators/not-be-validator.directive.mjs +56 -0
- package/esm2022/form/validators/one-of-validator.directive.mjs +57 -0
- package/esm2022/form/validators/resource-limit.mjs +79 -0
- package/esm2022/form/validators/strong-password/index.mjs +4 -0
- package/esm2022/form/validators/strong-password/strong-password-tooltip/component.mjs +15 -0
- package/esm2022/form/validators/strong-password/strong-password-validator.directive.mjs +171 -0
- package/esm2022/form/validators/strong-password/strong-password-validator.module.mjs +36 -0
- package/esm2022/form/validators/utils.mjs +155 -0
- package/esm2022/index.mjs +15 -0
- package/esm2022/k8s-resource-list/footer/component.mjs +156 -0
- package/esm2022/k8s-resource-list/index.mjs +18 -0
- package/esm2022/k8s-resource-list/k8s-resource-list.mjs +224 -0
- package/esm2022/k8s-resource-list/k8s-resource-paged-list.mjs +174 -0
- package/esm2022/k8s-resource-list/types.mjs +11 -0
- package/esm2022/k8s-resource-list/utils.mjs +84 -0
- package/esm2022/k8s-shared/constants.mjs +53 -0
- package/esm2022/k8s-shared/index.mjs +12 -0
- package/esm2022/k8s-shared/k8s-resource-translate-key.pipe.mjs +31 -0
- package/esm2022/k8s-shared/k8s-shared-util.service.mjs +152 -0
- package/esm2022/k8s-shared/resource-mark/component.mjs +54 -0
- package/esm2022/k8s-shared/resource-mark/util.mjs +137 -0
- package/esm2022/k8s-shared/update-description-dialog/component.mjs +66 -0
- package/esm2022/k8s-shared/update-display-name-dialog/component.mjs +59 -0
- package/esm2022/k8s-shared/update-key-value-dialog/component.mjs +76 -0
- package/esm2022/page-deactivate/deactivate.directive.mjs +50 -0
- package/esm2022/page-deactivate/deactivate.guard.mjs +41 -0
- package/esm2022/page-deactivate/deactivate.service.mjs +78 -0
- package/esm2022/page-deactivate/index.mjs +4 -0
- package/esm2022/pipes/calc.pipe.mjs +21 -0
- package/esm2022/pipes/cron-human-readable.pipe.mjs +30 -0
- package/esm2022/pipes/crontab-next.pipe.mjs +67 -0
- package/esm2022/pipes/duration.pipe.mjs +51 -0
- package/esm2022/pipes/field-not-available.pipe.mjs +25 -0
- package/esm2022/pipes/img-header.pipe.mjs +18 -0
- package/esm2022/pipes/img-theme.pipe.mjs +38 -0
- package/esm2022/pipes/index.mjs +19 -0
- package/esm2022/pipes/keyvalue.pipe.mjs +20 -0
- package/esm2022/pipes/marked.pipe.mjs +18 -0
- package/esm2022/pipes/minimum-format.pipe.mjs +25 -0
- package/esm2022/pipes/page-env.pipe.mjs +69 -0
- package/esm2022/pipes/parse-json-translate.pipe.mjs +28 -0
- package/esm2022/pipes/parse-json.pipe.mjs +22 -0
- package/esm2022/pipes/pure.pipe.mjs +26 -0
- package/esm2022/pipes/safe.pipe.mjs +49 -0
- package/esm2022/pipes/sanitize.pipe.mjs +31 -0
- package/esm2022/pipes/time.pipe.mjs +113 -0
- package/esm2022/pipes/timezone-display.pipe.mjs +21 -0
- package/esm2022/services/form-row-duplicate/form-row-duplicate.service.mjs +280 -0
- package/esm2022/services/index.mjs +4 -0
- package/esm2022/services/on-resize.service.mjs +52 -0
- package/esm2022/services/yaml-util.service.mjs +99 -0
- package/esm2022/types/common.mjs +6 -0
- package/esm2022/types/helpers.mjs +12 -0
- package/esm2022/types/index.mjs +9 -0
- package/esm2022/types/k8s/core.mjs +2 -0
- package/esm2022/types/k8s/crd.mjs +57 -0
- package/esm2022/types/k8s/index.mjs +4 -0
- package/esm2022/types/k8s/raw.mjs +77 -0
- package/esm2022/types/schema.mjs +2 -0
- package/esm2022/utils/browser.mjs +21 -0
- package/esm2022/utils/cache-store.mjs +83 -0
- package/esm2022/utils/color-helpers.mjs +6 -0
- package/esm2022/utils/common.mjs +315 -0
- package/esm2022/utils/cron-util.mjs +44 -0
- package/esm2022/utils/decorators.mjs +137 -0
- package/esm2022/utils/disabled-state.mjs +47 -0
- package/esm2022/utils/format-number.mjs +227 -0
- package/esm2022/utils/index.mjs +24 -0
- package/esm2022/utils/local-storage-constants.mjs +2 -0
- package/esm2022/utils/node.mjs +18 -0
- package/esm2022/utils/observable.mjs +32 -0
- package/esm2022/utils/operators.mjs +38 -0
- package/esm2022/utils/request-pool.mjs +37 -0
- package/esm2022/utils/resources.mjs +66 -0
- package/esm2022/utils/router.mjs +20 -0
- package/esm2022/utils/sort-fn.mjs +7 -0
- package/esm2022/utils/tree.mjs +79 -0
- package/esm2022/utils/unit.mjs +191 -0
- package/esm2022/utils/version.mjs +76 -0
- package/esm2022/utils/with-load-state.mjs +21 -0
- package/esm2022/utils/workload.mjs +183 -0
- package/esm2022/utils/workspace.mjs +59 -0
- package/esm2022/utils/yaml.mjs +54 -0
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs +11151 -0
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs.map +1 -0
- package/form/base-form-container.d.ts +41 -0
- package/form/base-nested-form-control.d.ts +58 -0
- package/form/errors-mapper/base-errors-mapper.d.ts +13 -0
- package/form/errors-mapper/default-errors-mapper.service.d.ts +10 -0
- package/form/errors-mapper/errors-mapper-component/component.d.ts +19 -0
- package/form/errors-mapper/errors-mapper.directive.d.ts +39 -0
- package/form/errors-mapper/index.d.ts +6 -0
- package/form/errors-mapper/types.d.ts +16 -0
- package/form/index.d.ts +5 -0
- package/form/utils.d.ts +40 -0
- package/form/validators/async-function-validator.directive.d.ts +11 -0
- package/form/validators/dns1123-subdomain.d.ts +28 -0
- package/form/validators/function-validator.directive.d.ts +11 -0
- package/form/validators/index.d.ts +9 -0
- package/form/validators/maxlength-minlength-validator.directive.d.ts +20 -0
- package/form/validators/not-be-validator.directive.d.ts +12 -0
- package/form/validators/one-of-validator.directive.d.ts +12 -0
- package/form/validators/resource-limit.d.ts +17 -0
- package/form/validators/strong-password/index.d.ts +3 -0
- package/form/validators/strong-password/strong-password-tooltip/component.d.ts +6 -0
- package/form/validators/strong-password/strong-password-validator.directive.d.ts +34 -0
- package/form/validators/strong-password/strong-password-validator.module.d.ts +12 -0
- package/form/validators/utils.d.ts +67 -0
- package/index.d.ts +14 -0
- package/k8s-resource-list/footer/component.d.ts +42 -0
- package/k8s-resource-list/index.d.ts +13 -0
- package/k8s-resource-list/k8s-resource-list.d.ts +42 -0
- package/k8s-resource-list/k8s-resource-paged-list.d.ts +61 -0
- package/k8s-resource-list/types.d.ts +70 -0
- package/k8s-resource-list/utils.d.ts +19 -0
- package/k8s-shared/constants.d.ts +7 -0
- package/k8s-shared/index.d.ts +11 -0
- package/k8s-shared/k8s-resource-translate-key.pipe.d.ts +9 -0
- package/k8s-shared/k8s-shared-util.service.d.ts +48 -0
- package/k8s-shared/resource-mark/component.d.ts +16 -0
- package/k8s-shared/resource-mark/util.d.ts +2 -0
- package/k8s-shared/update-description-dialog/component.d.ts +33 -0
- package/k8s-shared/update-display-name-dialog/component.d.ts +27 -0
- package/k8s-shared/update-key-value-dialog/component.d.ts +38 -0
- package/package.json +56 -0
- package/page-deactivate/deactivate.directive.d.ts +18 -0
- package/page-deactivate/deactivate.guard.d.ts +13 -0
- package/page-deactivate/deactivate.service.d.ts +28 -0
- package/page-deactivate/index.d.ts +3 -0
- package/pipes/calc.pipe.d.ts +11 -0
- package/pipes/cron-human-readable.pipe.d.ts +9 -0
- package/pipes/crontab-next.pipe.d.ts +18 -0
- package/pipes/duration.pipe.d.ts +10 -0
- package/pipes/field-not-available.pipe.d.ts +13 -0
- package/pipes/img-header.pipe.d.ts +7 -0
- package/pipes/img-theme.pipe.d.ts +13 -0
- package/pipes/index.d.ts +18 -0
- package/pipes/keyvalue.pipe.d.ts +9 -0
- package/pipes/marked.pipe.d.ts +8 -0
- package/pipes/minimum-format.pipe.d.ts +10 -0
- package/pipes/page-env.pipe.d.ts +34 -0
- package/pipes/parse-json-translate.pipe.d.ts +8 -0
- package/pipes/parse-json.pipe.d.ts +7 -0
- package/pipes/pure.pipe.d.ts +17 -0
- package/pipes/safe.pipe.d.ts +10 -0
- package/pipes/sanitize.pipe.d.ts +10 -0
- package/pipes/time.pipe.d.ts +40 -0
- package/pipes/timezone-display.pipe.d.ts +10 -0
- package/services/form-row-duplicate/form-row-duplicate.service.d.ts +45 -0
- package/services/index.d.ts +3 -0
- package/services/on-resize.service.d.ts +20 -0
- package/services/yaml-util.service.d.ts +20 -0
- package/styles/ansi-color.scss +131 -0
- package/styles/global.scss +904 -0
- package/styles/lib.scss +1 -0
- package/styles/markdown-body.scss +107 -0
- package/styles/mixins.scss +710 -0
- package/styles/var.scss +30 -0
- package/types/common.d.ts +42 -0
- package/types/helpers.d.ts +35 -0
- package/types/index.d.ts +8 -0
- package/types/k8s/core.d.ts +100 -0
- package/types/k8s/crd.d.ts +497 -0
- package/types/k8s/index.d.ts +3 -0
- package/types/k8s/raw.d.ts +860 -0
- package/types/schema.d.ts +14 -0
- package/utils/browser.d.ts +4 -0
- package/utils/cache-store.d.ts +35 -0
- package/utils/color-helpers.d.ts +4 -0
- package/utils/common.d.ts +64 -0
- package/utils/cron-util.d.ts +8 -0
- package/utils/decorators.d.ts +14 -0
- package/utils/disabled-state.d.ts +20 -0
- package/utils/format-number.d.ts +11 -0
- package/utils/index.d.ts +23 -0
- package/utils/local-storage-constants.d.ts +1 -0
- package/utils/node.d.ts +8 -0
- package/utils/observable.d.ts +5 -0
- package/utils/operators.d.ts +22 -0
- package/utils/request-pool.d.ts +12 -0
- package/utils/resources.d.ts +19 -0
- package/utils/router.d.ts +3 -0
- package/utils/sort-fn.d.ts +2 -0
- package/utils/tree.d.ts +16 -0
- package/utils/unit.d.ts +21 -0
- package/utils/version.d.ts +39 -0
- package/utils/with-load-state.d.ts +11 -0
- package/utils/workload.d.ts +66 -0
- package/utils/workspace.d.ts +28 -0
- package/utils/yaml.d.ts +11 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* @module utils
|
|
4
|
+
*/
|
|
5
|
+
// reduceTree :: String -> (a -> Tree -> [Tree] -> [Number] -> a) -> a -> [Tree] -> a
|
|
6
|
+
export const reduceTrees = (subtreeKey) => (fn) => (seed) => (trees) => {
|
|
7
|
+
const reducer = (nodes, parents, path, acc) => nodes.reduce((prev, curr, index) => {
|
|
8
|
+
const result = fn(prev, curr, parents, [...path, index]);
|
|
9
|
+
return curr[subtreeKey]
|
|
10
|
+
? reducer(curr[subtreeKey], [...parents, curr], [...path, index], result)
|
|
11
|
+
: result;
|
|
12
|
+
}, acc);
|
|
13
|
+
return reducer(trees, [], [], seed);
|
|
14
|
+
};
|
|
15
|
+
// mapTree :: String -> (Tree -> [Tree] -> [Number] -> Tree) -> [Tree] -> [Tree]
|
|
16
|
+
export const mapTrees = (subtreeKey) => (fn) => (trees) => {
|
|
17
|
+
const mapper = (acc, curr, parents, path) => {
|
|
18
|
+
const mapped = fn(curr, parents, path);
|
|
19
|
+
return setNode(subtreeKey, path, acc, mapped);
|
|
20
|
+
};
|
|
21
|
+
return reduceTrees(subtreeKey)(mapper)([])(trees);
|
|
22
|
+
};
|
|
23
|
+
export const filterTrees = (subtreeKey) => (fn) => (trees) => {
|
|
24
|
+
const filter = (nodes, parents, path) => nodes
|
|
25
|
+
?.filter(node => fn(node, parents, path))
|
|
26
|
+
.map((node, index) => node[subtreeKey]
|
|
27
|
+
? {
|
|
28
|
+
...node,
|
|
29
|
+
[subtreeKey]: filter(node[subtreeKey], [...parents, node], [...path, index]),
|
|
30
|
+
}
|
|
31
|
+
: node);
|
|
32
|
+
return filter(trees, [], []);
|
|
33
|
+
};
|
|
34
|
+
export const findPath = (subtreeKey) => (fn) => (trees) => {
|
|
35
|
+
const endPoint = [];
|
|
36
|
+
const finder = (nodes, parents, path) => {
|
|
37
|
+
const result = nodes.find((node, index) => {
|
|
38
|
+
if (fn(node, parents, path)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (node[subtreeKey]) {
|
|
42
|
+
return finder(node[subtreeKey], [...parents, node], [...path, index]);
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
});
|
|
46
|
+
if (result) {
|
|
47
|
+
endPoint.unshift(result);
|
|
48
|
+
}
|
|
49
|
+
return !!result;
|
|
50
|
+
};
|
|
51
|
+
finder(trees, [], []);
|
|
52
|
+
return endPoint;
|
|
53
|
+
};
|
|
54
|
+
export const firstPath = (subtreeKey) => (trees) => {
|
|
55
|
+
const head = trees[0];
|
|
56
|
+
if (head) {
|
|
57
|
+
return head.children
|
|
58
|
+
? [head, ...firstPath(subtreeKey)(head[subtreeKey])]
|
|
59
|
+
: [head];
|
|
60
|
+
}
|
|
61
|
+
return [];
|
|
62
|
+
};
|
|
63
|
+
export function setNode(subtreeKey, path, source, target) {
|
|
64
|
+
const iterator = ([head, ...tail], trees) => {
|
|
65
|
+
if (tail.length > 0) {
|
|
66
|
+
const point = trees[head] || {};
|
|
67
|
+
const tree = {
|
|
68
|
+
...point,
|
|
69
|
+
[subtreeKey]: iterator(tail, (point[subtreeKey] || [])),
|
|
70
|
+
};
|
|
71
|
+
trees[head] = tree;
|
|
72
|
+
return trees;
|
|
73
|
+
}
|
|
74
|
+
trees[head] = target;
|
|
75
|
+
return trees;
|
|
76
|
+
};
|
|
77
|
+
return iterator(path, source);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZHluYW1pYy1wbHVnaW4tc2hhcmVkL3NyYy91dGlscy90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQ3RCLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQ3ZCLENBQW9CLEVBQXFCLEVBQUUsRUFBRSxDQUM3QyxDQUFDLElBQU8sRUFBRSxFQUFFLENBQ1osQ0FBQyxLQUFVLEVBQUUsRUFBRTtJQUNiLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBVSxFQUFFLE9BQVksRUFBRSxJQUFjLEVBQUUsR0FBTSxFQUFLLEVBQUUsQ0FDdEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FDTCxJQUFJLENBQUMsVUFBVSxDQUFRLEVBQ3ZCLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQ2xCLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQ2hCLE1BQU0sQ0FDUDtZQUNILENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDYixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFSixnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUNuQixDQUFDLFVBQWtCLEVBQUUsRUFB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bnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgdXRpbHNcbiAqL1xuXG4vLyByZWR1Y2VUcmVlIDo6IFN0cmluZyAtPiAoYSAtPiBUcmVlIC0+IFtUcmVlXSAtPiBbTnVtYmVyXSAtPiBhKSAtPiBhIC0+IFtUcmVlXSAtPiBhXG5leHBvcnQgY29uc3QgcmVkdWNlVHJlZXMgPVxuICAoc3VidHJlZUtleTogc3RyaW5nKSA9PlxuICA8VCBleHRlbmRzIFRyZWUsIFI+KGZuOiBUcmVlUmVkdWNlcjxULCBSPikgPT5cbiAgKHNlZWQ6IFIpID0+XG4gICh0cmVlczogVFtdKSA9PiB7XG4gICAgY29uc3QgcmVkdWNlciA9IChub2RlczogVFtdLCBwYXJlbnRzOiBUW10sIHBhdGg6IG51bWJlcltdLCBhY2M6IFIpOiBSID0+XG4gICAgICBub2Rlcy5yZWR1Y2UoKHByZXYsIGN1cnIsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKHByZXYsIGN1cnIsIHBhcmVudHMsIFsuLi5wYXRoLCBpbmRleF0pO1xuICAgICAgICByZXR1cm4gY3VycltzdWJ0cmVlS2V5XVxuICAgICAgICAgID8gcmVkdWNlcihcbiAgICAgICAgICAgICAgY3VycltzdWJ0cmVlS2V5XSBhcyBUW10sXG4gICAgICAgICAgICAgIFsuLi5wYXJlbnRzLCBjdXJyXSxcbiAgICAgICAgICAgICAgWy4uLnBhdGgsIGluZGV4XSxcbiAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogcmVzdWx0O1xuICAgICAgfSwgYWNjKTtcbiAgICByZXR1cm4gcmVkdWNlcih0cmVlcywgW10sIFtdLCBzZWVkKTtcbiAgfTtcblxuLy8gbWFwVHJlZSA6OiBTdHJpbmcgLT4gKFRyZWUgLT4gW1RyZWVdIC0+IFtOdW1iZXJdIC0+IFRyZWUpIC0+IFtUcmVlXSAtPiBbVHJlZV1cbmV4cG9ydCBjb25zdCBtYXBUcmVlcyA9XG4gIChzdWJ0cmVlS2V5OiBzdHJpbmcpID0+XG4gIDxUIGV4dGVuZHMgVHJlZSwgUiBleHRlbmRzIFRyZWU+KGZuOiBUcmVlTWFwcGVyPFQsIFI+KSA9PlxuICAodHJlZXM6IFRbXSkgPT4ge1xuICAgIGNvbnN0IG1hcHBlciA9IChhY2M6IFJbXSwgY3VycjogVCwgcGFyZW50czogVFtdLCBwYXRoOiBudW1iZXJbXSkgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkID0gZm4oY3VyciwgcGFyZW50cywgcGF0aCk7XG4gICAgICByZXR1cm4gc2V0Tm9kZTxSPihzdWJ0cmVlS2V5LCBwYXRoLCBhY2MsIG1hcHBlZCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVkdWNlVHJlZXMoc3VidHJlZUtleSk8VCwgUltdPihtYXBwZXIpKFtdKSh0cmVlcyk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJUcmVlcyA9XG4gIChzdWJ0cmVlS2V5OiBzdHJpbmcpID0+XG4gIDxUIGV4dGVuZHMgVHJlZT4oZm46IFRyZWVGaWx0ZXI8VD4pID0+XG4gICh0cmVlczogVFtdKSA9PiB7XG4gICAgY29uc3QgZmlsdGVyID0gKG5vZGVzOiBUW10sIHBhcmVudHM6IFRbXSwgcGF0aDogbnVtYmVyW10pOiBUW10gPT5cbiAgICAgIG5vZGVzXG4gICAgICAgID8uZmlsdGVyKG5vZGUgPT4gZm4obm9kZSwgcGFyZW50cywgcGF0aCkpXG4gICAgICAgIC5tYXAoKG5vZGUsIGluZGV4KSA9PlxuICAgICAgICAgIG5vZGVbc3VidHJlZUtleV1cbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAgICAgW3N1YnRyZWVLZXldOiBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICBub2RlW3N1YnRyZWVLZXldIGFzIFRbXSxcbiAgICAgICAgICAgICAgICAgIFsuLi5wYXJlbnRzLCBub2RlXSxcbiAgICAgICAgICAgICAgICAgIFsuLi5wYXRoLCBpbmRleF0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBub2RlLFxuICAgICAgICApO1xuICAgIHJldHVybiBmaWx0ZXIodHJlZXMsIFtdLCBbXSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBmaW5kUGF0aCA9XG4gIChzdWJ0cmVlS2V5OiBzdHJpbmcpID0+XG4gIDxUIGV4dGVuZHMgVHJlZT4oZm46IFRyZWVGaWx0ZXI8VD4pID0+XG4gICh0cmVlczogVFtdKSA9PiB7XG4gICAgY29uc3QgZW5kUG9pbnQ6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGZpbmRlciA9IChub2RlczogVFtdLCBwYXJlbnRzOiBUW10sIHBhdGg6IG51bWJlcltdKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBub2Rlcy5maW5kKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoZm4obm9kZSwgcGFyZW50cywgcGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZVtzdWJ0cmVlS2V5XSkge1xuICAgICAgICAgIHJldHVybiBmaW5kZXIoXG4gICAgICAgICAgICBub2RlW3N1YnRyZWVLZXldIGFzIFRbXSxcbiAgICAgICAgICAgIFsuLi5wYXJlbnRzLCBub2RlXSxcbiAgICAgICAgICAgIFsuLi5wYXRoLCBpbmRleF0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgZW5kUG9pbnQudW5zaGlmdChyZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgIH07XG5cbiAgICBmaW5kZXIodHJlZXMsIFtdLCBbXSk7XG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9O1xuXG5leHBvcnQgY29uc3QgZmlyc3RQYXRoID1cbiAgKHN1YnRyZWVLZXk6IHN0cmluZykgPT5cbiAgPFQgZXh0ZW5kcyBUcmVlPih0cmVlczogVFtdKTogVFtdID0+IHtcbiAgICBjb25zdCBoZWFkID0gdHJlZXNbMF07XG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIHJldHVybiBoZWFkLmNoaWxkcmVuXG4gICAgICAgID8gW2hlYWQsIC4uLmZpcnN0UGF0aChzdWJ0cmVlS2V5KTxUPihoZWFkW3N1YnRyZWVLZXldIGFzIFRbXSldXG4gICAgICAgIDogW2hlYWRdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXROb2RlPFQgZXh0ZW5kcyBUcmVlPihcbiAgc3VidHJlZUtleTogc3RyaW5nLFxuICBwYXRoOiBudW1iZXJbXSxcbiAgc291cmNlOiBUW10sXG4gIHRhcmdldDogVCxcbikge1xuICBjb25zdCBpdGVyYXRvciA9IChbaGVhZCwgLi4udGFpbF06IG51bWJlcltdLCB0cmVlczogVFtdKSA9PiB7XG4gICAgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcG9pbnQgPSB0cmVlc1toZWFkXSB8fCAoe30gYXMgVCk7XG4gICAgICBjb25zdCB0cmVlID0ge1xuICAgICAgICAuLi5wb2ludCxcbiAgICAgICAgW3N1YnRyZWVLZXldOiBpdGVyYXRvcih0YWlsLCAocG9pbnRbc3VidHJlZUtleV0gfHwgW10pIGFzIFRbXSksXG4gICAgICB9O1xuICAgICAgdHJlZXNbaGVhZF0gPSB0cmVlO1xuICAgICAgcmV0dXJuIHRyZWVzO1xuICAgIH1cbiAgICB0cmVlc1toZWFkXSA9IHRhcmdldDtcbiAgICByZXR1cm4gdHJlZXM7XG4gIH07XG4gIHJldHVybiBpdGVyYXRvcihwYXRoLCBzb3VyY2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWUge1xuICBba2V5OiBzdHJpbmddOiBUcmVlW107XG59XG5cbmV4cG9ydCB0eXBlIFRyZWVSZWR1Y2VyPFQgZXh0ZW5kcyBUcmVlLCBSPiA9IChcbiAgYWNjOiBSLFxuICBjdXJyZW50Tm9kZTogVCxcbiAgcGFyZW50czogVFtdLFxuICBwYXRoOiBudW1iZXJbXSxcbikgPT4gUjtcblxuZXhwb3J0IHR5cGUgVHJlZU1hcHBlcjxUIGV4dGVuZHMgVHJlZSwgUiBleHRlbmRzIFRyZWU+ID0gKFxuICB0cmVlOiBULFxuICBwYXJlbnRzOiBUW10sXG4gIHBhdGg6IG51bWJlcltdLFxuKSA9PiBSO1xuXG5leHBvcnQgdHlwZSBUcmVlRmlsdGVyPFQgZXh0ZW5kcyBUcmVlPiA9IChcbiAgdHJlZTogVCxcbiAgcGFyZW50czogVFtdLFxuICBwYXRoOiBudW1iZXJbXSxcbikgPT4gYm9vbGVhbjtcbiJdfQ==
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { isBlank, numToStr } from './common';
|
|
2
|
+
const COMMON_UNITS = ['M', 'G', 'T', 'P', 'E'];
|
|
3
|
+
export const CORE_UNITS = ['m', '', 'k', ...COMMON_UNITS];
|
|
4
|
+
export const CORE_UNIT_REG = new RegExp(`[${CORE_UNITS.join('')}]$`);
|
|
5
|
+
const toUnitNumBase = (coreStr, isUnitM = false) => {
|
|
6
|
+
if (typeof coreStr === 'number') {
|
|
7
|
+
return numToStr(coreStr * Math.pow(1000, +isUnitM));
|
|
8
|
+
}
|
|
9
|
+
if (isBlank(coreStr)) {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
coreStr = coreStr.trim();
|
|
13
|
+
const num = +coreStr.replace(CORE_UNIT_REG, '');
|
|
14
|
+
if (Number.isNaN(num)) {
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
if (num <= 0) {
|
|
18
|
+
return '0';
|
|
19
|
+
}
|
|
20
|
+
const lastChar = coreStr.at(-1);
|
|
21
|
+
let unitIndex = CORE_UNITS.indexOf(lastChar);
|
|
22
|
+
unitIndex = (unitIndex === -1 ? 0 : unitIndex - 1) + +isUnitM;
|
|
23
|
+
return numToStr(num * Math.pow(1000, unitIndex));
|
|
24
|
+
};
|
|
25
|
+
export const toUnitNumM = (coreStr) => toUnitNumBase(coreStr, true);
|
|
26
|
+
export const toUnitNum = (coreStr) => toUnitNumBase(coreStr);
|
|
27
|
+
export const UNITS = ['', 'K', ...COMMON_UNITS];
|
|
28
|
+
export const UNIT_REG = new RegExp(`[${UNITS.join('')}]i?$`);
|
|
29
|
+
// TODO: UNITS 临时被其他地方当成了枚举项使用,先临时添加MEMORY_UNITS来处理 toUnitI 中兼容 k、Ki 的问题
|
|
30
|
+
const MEMORY_UNITS = ['', ['k', 'K'], ...COMMON_UNITS];
|
|
31
|
+
const MEMORY_UNIT_REG = new RegExp(`[${MEMORY_UNITS.join('')}]i?$`);
|
|
32
|
+
export const toUnitI = (str, negative = false) => {
|
|
33
|
+
if (typeof str === 'number') {
|
|
34
|
+
if (str <= 0 && !negative) {
|
|
35
|
+
return '0';
|
|
36
|
+
}
|
|
37
|
+
return numToStr(str);
|
|
38
|
+
}
|
|
39
|
+
if (isBlank(str)) {
|
|
40
|
+
return '';
|
|
41
|
+
}
|
|
42
|
+
str = str.trim();
|
|
43
|
+
const num = +str.replace(MEMORY_UNIT_REG, '');
|
|
44
|
+
if (Number.isNaN(num)) {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
if (num <= 0 && !negative) {
|
|
48
|
+
return '0';
|
|
49
|
+
}
|
|
50
|
+
let base = 1000;
|
|
51
|
+
if (str.endsWith('i')) {
|
|
52
|
+
base = 1024;
|
|
53
|
+
str = str.replace(/i$/, '');
|
|
54
|
+
}
|
|
55
|
+
const lastChar = str.at(-1);
|
|
56
|
+
const unitIndex = MEMORY_UNITS.findIndex(unit => Array.isArray(unit) ? unit.includes(lastChar) : unit === lastChar);
|
|
57
|
+
return numToStr(num * Math.pow(base, unitIndex === -1 ? 0 : unitIndex));
|
|
58
|
+
};
|
|
59
|
+
export const toUnitMi = (str, negative) => {
|
|
60
|
+
const unitI = toUnitI(str, negative);
|
|
61
|
+
if (!unitI) {
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
return numToStr(+unitI / 1024 / 1024);
|
|
65
|
+
};
|
|
66
|
+
export const toUnitGi = (str, negative) => {
|
|
67
|
+
const unitI = toUnitI(str, negative);
|
|
68
|
+
if (!unitI) {
|
|
69
|
+
return '';
|
|
70
|
+
}
|
|
71
|
+
return numToStr(+unitI / 1024 / 1024 / 1024);
|
|
72
|
+
};
|
|
73
|
+
export const addUnitCoreM = (coreStr) => {
|
|
74
|
+
if (isBlank(coreStr)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return numToStr(+coreStr) + 'm';
|
|
78
|
+
};
|
|
79
|
+
export const addUnitMi = (miStr) => {
|
|
80
|
+
if (isBlank(miStr)) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return numToStr(+miStr) + 'Mi';
|
|
84
|
+
};
|
|
85
|
+
export const addUnitGi = (giStr) => {
|
|
86
|
+
if (isBlank(giStr)) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return numToStr(+giStr) + 'Gi';
|
|
90
|
+
};
|
|
91
|
+
const POWER_MEMORY_UNITS = ['Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei'];
|
|
92
|
+
export function getAppropriateMemory(base) {
|
|
93
|
+
let unit = -1;
|
|
94
|
+
while (base >= 800 || unit >= POWER_MEMORY_UNITS.length - 1) {
|
|
95
|
+
base /= 1024;
|
|
96
|
+
unit++;
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
value: base,
|
|
100
|
+
unit: POWER_MEMORY_UNITS[unit],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const reg = /^(\d?\.?\d+)(\w+)*$/;
|
|
104
|
+
export const parseValueAndUnit = (str) => {
|
|
105
|
+
const [_, value, unit] = /^(\d?\.?\d+)(\w+)*$/.exec(str) || [];
|
|
106
|
+
return [value, unit];
|
|
107
|
+
};
|
|
108
|
+
export function formatMemory(mem) {
|
|
109
|
+
const base = parseFloat(mem);
|
|
110
|
+
const res = reg.exec(mem);
|
|
111
|
+
const unit = res?.[2];
|
|
112
|
+
return unit ? getMemory(base, unit) : base;
|
|
113
|
+
}
|
|
114
|
+
export function getMemory(base, unit) {
|
|
115
|
+
switch (unit) {
|
|
116
|
+
case 'm': {
|
|
117
|
+
return base * 1e-3;
|
|
118
|
+
}
|
|
119
|
+
case 'K': {
|
|
120
|
+
return base * 1e3;
|
|
121
|
+
}
|
|
122
|
+
case 'Ki': {
|
|
123
|
+
return base * 1024;
|
|
124
|
+
}
|
|
125
|
+
case 'M': {
|
|
126
|
+
return base * 1e6;
|
|
127
|
+
}
|
|
128
|
+
case 'Mi': {
|
|
129
|
+
return base * 1024 ** 2;
|
|
130
|
+
}
|
|
131
|
+
case 'G': {
|
|
132
|
+
return base * 1e9;
|
|
133
|
+
}
|
|
134
|
+
case 'Gi': {
|
|
135
|
+
return base * 1024 ** 3;
|
|
136
|
+
}
|
|
137
|
+
case 'T': {
|
|
138
|
+
return base * 1e12;
|
|
139
|
+
}
|
|
140
|
+
case 'Ti': {
|
|
141
|
+
return base * 1024 ** 4;
|
|
142
|
+
}
|
|
143
|
+
case 'P': {
|
|
144
|
+
return base * 1e15;
|
|
145
|
+
}
|
|
146
|
+
case 'Pi': {
|
|
147
|
+
return base * 1024 ** 5;
|
|
148
|
+
}
|
|
149
|
+
case 'E': {
|
|
150
|
+
return base * 1e18;
|
|
151
|
+
}
|
|
152
|
+
case 'Ei': {
|
|
153
|
+
return base * 1024 ** 6;
|
|
154
|
+
}
|
|
155
|
+
default: {
|
|
156
|
+
return base;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export function getCpu(base, unit) {
|
|
161
|
+
switch (unit) {
|
|
162
|
+
case 'm': {
|
|
163
|
+
return base;
|
|
164
|
+
}
|
|
165
|
+
case 'c': {
|
|
166
|
+
return base * 1e3;
|
|
167
|
+
}
|
|
168
|
+
case 'k': {
|
|
169
|
+
return base * 1e6;
|
|
170
|
+
}
|
|
171
|
+
case 'M': {
|
|
172
|
+
return base * 1e9;
|
|
173
|
+
}
|
|
174
|
+
case 'G': {
|
|
175
|
+
return base * 1e12;
|
|
176
|
+
}
|
|
177
|
+
case 'T': {
|
|
178
|
+
return base * 1e15;
|
|
179
|
+
}
|
|
180
|
+
default: {
|
|
181
|
+
return base * 1e3;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export function formatCPU(cpu) {
|
|
186
|
+
const base = parseFloat(cpu);
|
|
187
|
+
const res = reg.exec(cpu);
|
|
188
|
+
const unit = res?.[2];
|
|
189
|
+
return getCpu(base, unit);
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZHluYW1pYy1wbHVnaW4tc2hhcmVkL3NyYy91dGlscy91bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTdDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFckUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUF5QixFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsRUFBRTtJQUNuRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8s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Q0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQztRQUNELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBVztJQUNuQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQmxhbmssIG51bVRvU3RyIH0gZnJvbSAnLi9jb21tb24nO1xuXG5jb25zdCBDT01NT05fVU5JVFMgPSBbJ00nLCAnRycsICdUJywgJ1AnLCAnRSddO1xuXG5leHBvcnQgY29uc3QgQ09SRV9VTklUUyA9IFsnbScsICcnLCAnaycsIC4uLkNPTU1PTl9VTklUU107XG5cbmV4cG9ydCBjb25zdCBDT1JFX1VOSVRfUkVHID0gbmV3IFJlZ0V4cChgWyR7Q09SRV9VTklUUy5qb2luKCcnKX1dJGApO1xuXG5jb25zdCB0b1VuaXROdW1CYXNlID0gKGNvcmVTdHI/OiBzdHJpbmcgfCBudW1iZXIsIGlzVW5pdE0gPSBmYWxzZSkgPT4ge1xuICBpZiAodHlwZW9mIGNvcmVTdHIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG51bVRvU3RyKGNvcmVTdHIgKiBNYXRoLnBvdygxMDAwLCAraXNVbml0TSkpO1xuICB9XG5cbiAgaWYgKGlzQmxhbmsoY29yZVN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29yZVN0ciA9IGNvcmVTdHIudHJpbSgpO1xuICBjb25zdCBudW0gPSArY29yZVN0ci5yZXBsYWNlKENPUkVfVU5JVF9SRUcsICcnKTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChudW0gPD0gMCkge1xuICAgIHJldHVybiAnMCc7XG4gIH1cbiAgY29uc3QgbGFzdENoYXIgPSBjb3JlU3RyLmF0KC0xKTtcbiAgbGV0IHVuaXRJbmRleCA9IENPUkVfVU5JVFMuaW5kZXhPZihsYXN0Q2hhcik7XG4gIHVuaXRJbmRleCA9ICh1bml0SW5kZXggPT09IC0xID8gMCA6IHVuaXRJbmRleCAtIDEpICsgK2lzVW5pdE07XG4gIHJldHVybiBudW1Ub1N0cihudW0gKiBNYXRoLnBvdygxMDAwLCB1bml0SW5kZXgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1VuaXROdW1NID0gKGNvcmVTdHI/OiBzdHJpbmcgfCBudW1iZXIpID0+XG4gIHRvVW5pdE51bUJhc2UoY29yZVN0ciwgdHJ1ZSk7XG5cbmV4cG9ydCBjb25zdCB0b1VuaXROdW0gPSAoY29yZVN0cj86IHN0cmluZyB8IG51bWJlcikgPT4gdG9Vbml0TnVtQmFzZShjb3JlU3RyKTtcblxuZXhwb3J0IGNvbnN0IFVOSVRTID0gWycnLCAnSycsIC4uLkNPTU1PTl9VTklUU107XG5leHBvcnQgY29uc3QgVU5JVF9SRUcgPSBuZXcgUmVnRXhwKGBbJHtVTklUUy5qb2luKCcnKX1daT8kYCk7XG5cbi8vIFRPRE86IFVOSVRTIOS4tOaXtuiiq+WFtuS7luWcsOaWueW9k+aIkOS6huaemuS4vumhueS9v+eUqO+8jOWFiOS4tOaXtua3u+WKoE1FTU9SWV9VTklUU+adpeWkhOeQhiB0b1VuaXRJIOS4reWFvOWuuSBr44CBS2kg55qE6Zeu6aKYXG5jb25zdCBNRU1PUllfVU5JVFMgPSBbJycsIFsnaycsICdLJ10sIC4uLkNPTU1PTl9VTklUU107XG5jb25zdCBNRU1PUllfVU5JVF9SRUcgPSBuZXcgUmVnRXhwKGBbJHtNRU1PUllfVU5JVFMuam9pbignJyl9XWk/JGApO1xuXG5leHBvcnQgY29uc3QgdG9Vbml0SSA9IChzdHI/OiBzdHJpbmcgfCBudW1iZXIsIG5lZ2F0aXZlID0gZmFsc2UpID0+IHtcbiAgaWYgKHR5cGVvZiBzdHIgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHN0ciA8PSAwICYmICFuZWdhdGl2ZSkge1xuICAgICAgcmV0dXJuICcwJztcbiAgICB9XG4gICAgcmV0dXJuIG51bVRvU3RyKHN0cik7XG4gIH1cblxuICBpZiAoaXNCbGFuayhzdHIpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHN0ciA9IHN0ci50cmltKCk7XG4gIGNvbnN0IG51bSA9ICtzdHIucmVwbGFjZShNRU1PUllfVU5JVF9SRUcsICcnKTtcbiAgaWYgKE51bWJlci5pc05hTihudW0pKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChudW0gPD0gMCAmJiAhbmVnYXRpdmUpIHtcbiAgICByZXR1cm4gJzAnO1xuICB9XG5cbiAgbGV0IGJhc2UgPSAxMDAwO1xuXG4gIGlmIChzdHIuZW5kc1dpdGgoJ2knKSkge1xuICAgIGJhc2UgPSAxMDI0O1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9pJC8sICcnKTtcbiAgfVxuXG4gIGNvbnN0IGxhc3RDaGFyID0gc3RyLmF0KC0xKTtcbiAgY29uc3QgdW5pdEluZGV4ID0gTUVNT1JZX1VOSVRTLmZpbmRJbmRleCh1bml0ID0+XG4gICAgQXJyYXkuaXNBcnJheSh1bml0KSA/IHVuaXQuaW5jbHVkZXMobGFzdENoYXIpIDogdW5pdCA9PT0gbGFzdENoYXIsXG4gICk7XG4gIHJldHVybiBudW1Ub1N0cihudW0gKiBNYXRoLnBvdyhiYXNlLCB1bml0SW5kZXggPT09IC0xID8gMCA6IHVuaXRJbmRleCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvVW5pdE1pID0gKHN0cj86IHN0cmluZyB8IG51bWJlciwgbmVnYXRpdmU/OiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IHVuaXRJID0gdG9Vbml0SShzdHIsIG5lZ2F0aXZlKTtcbiAgaWYgKCF1bml0SSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gbnVtVG9TdHIoK3VuaXRJIC8gMTAyNCAvIDEwMjQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvVW5pdEdpID0gKHN0cj86IHN0cmluZyB8IG51bWJlciwgbmVnYXRpdmU/OiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IHVuaXRJID0gdG9Vbml0SShzdHIsIG5lZ2F0aXZlKTtcbiAgaWYgKCF1bml0SSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gbnVtVG9TdHIoK3VuaXRJIC8gMTAyNCAvIDEwMjQgLyAxMDI0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVbml0Q29yZU0gPSAoY29yZVN0cj86IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICBpZiAoaXNCbGFuayhjb3JlU3RyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBudW1Ub1N0cigrY29yZVN0cikgKyAnbSc7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVW5pdE1pID0gKG1pU3RyPzogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGlmIChpc0JsYW5rKG1pU3RyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBudW1Ub1N0cigrbWlTdHIpICsgJ01pJztcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVbml0R2kgPSAoZ2lTdHI/OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgaWYgKGlzQmxhbmsoZ2lTdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bVRvU3RyKCtnaVN0cikgKyAnR2knO1xufTtcblxuY29uc3QgUE9XRVJfTUVNT1JZX1VOSVRTID0gWydLaScsICdNaScsICdHaScsICdUaScsICdQaScsICdFaSddO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwcm9wcmlhdGVNZW1vcnkoYmFzZTogbnVtYmVyKSB7XG4gIGxldCB1bml0ID0gLTE7XG4gIHdoaWxlIChiYXNlID49IDgwMCB8fCB1bml0ID49IFBPV0VSX01FTU9SWV9VTklUUy5sZW5ndGggLSAxKSB7XG4gICAgYmFzZSAvPSAxMDI0O1xuICAgIHVuaXQrKztcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbHVlOiBiYXNlLFxuICAgIHVuaXQ6IFBPV0VSX01FTU9SWV9VTklUU1t1bml0XSxcbiAgfTtcbn1cblxuY29uc3QgcmVnID0gL14oXFxkP1xcLj9cXGQrKShcXHcrKSokLztcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmFsdWVBbmRVbml0ID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtfLCB2YWx1ZSwgdW5pdF0gPSAvXihcXGQ/XFwuP1xcZCspKFxcdyspKiQvLmV4ZWMoc3RyKSB8fCBbXTtcbiAgcmV0dXJuIFt2YWx1ZSwgdW5pdF07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TWVtb3J5KG1lbTogc3RyaW5nKSB7XG4gIGNvbnN0IGJhc2UgPSBwYXJzZUZsb2F0KG1lbSk7XG4gIGNvbnN0IHJlcyA9IHJlZy5leGVjKG1lbSk7XG4gIGNvbnN0IHVuaXQgPSByZXM/LlsyXTtcbiAgcmV0dXJuIHVuaXQgPyBnZXRNZW1vcnkoYmFzZSwgdW5pdCkgOiBiYXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtb3J5KGJhc2U6IG51bWJlciwgdW5pdDogc3RyaW5nKSB7XG4gIHN3aXRjaCAodW5pdCkge1xuICAgIGNhc2UgJ20nOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlLTM7XG4gICAgfVxuICAgIGNhc2UgJ0snOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMztcbiAgICB9XG4gICAgY2FzZSAnS2knOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDEwMjQ7XG4gICAgfVxuICAgIGNhc2UgJ00nOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlNjtcbiAgICB9XG4gICAgY2FzZSAnTWknOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDEwMjQgKiogMjtcbiAgICB9XG4gICAgY2FzZSAnRyc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWU5O1xuICAgIH1cbiAgICBjYXNlICdHaSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMTAyNCAqKiAzO1xuICAgIH1cbiAgICBjYXNlICdUJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTEyO1xuICAgIH1cbiAgICBjYXNlICdUaSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMTAyNCAqKiA0O1xuICAgIH1cbiAgICBjYXNlICdQJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTE1O1xuICAgIH1cbiAgICBjYXNlICdQaSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMTAyNCAqKiA1O1xuICAgIH1cbiAgICBjYXNlICdFJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTE4O1xuICAgIH1cbiAgICBjYXNlICdFaSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMTAyNCAqKiA2O1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENwdShiYXNlOiBudW1iZXIsIHVuaXQ6IHN0cmluZykge1xuICBzd2l0Y2ggKHVuaXQpIHtcbiAgICBjYXNlICdtJzoge1xuICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfVxuICAgIGNhc2UgJ2MnOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMztcbiAgICB9XG4gICAgY2FzZSAnayc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWU2O1xuICAgIH1cbiAgICBjYXNlICdNJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTk7XG4gICAgfVxuICAgIGNhc2UgJ0cnOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMTI7XG4gICAgfVxuICAgIGNhc2UgJ1QnOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMTU7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWUzO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q1BVKGNwdTogc3RyaW5nKSB7XG4gIGNvbnN0IGJhc2UgPSBwYXJzZUZsb2F0KGNwdSk7XG4gIGNvbnN0IHJlcyA9IHJlZy5leGVjKGNwdSk7XG4gIGNvbnN0IHVuaXQgPSByZXM/LlsyXTtcbiAgcmV0dXJuIGdldENwdShiYXNlLCB1bml0KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基于相对严格的版本号规则,规范可以参考https://semver.org/
|
|
3
|
+
* 但在比较版本号时使用相对宽松的规则,具体可以查看compare-versions库的实现
|
|
4
|
+
* 自测用例:https://stackblitz.com/edit/typescript-jqszbj
|
|
5
|
+
*/
|
|
6
|
+
import { compare } from 'compare-versions';
|
|
7
|
+
export { compareVersions as compareVersionToNum, satisfies as satisfiesVersion, } from 'compare-versions';
|
|
8
|
+
export const versionRegex = /^(\d+)\.(\d+)\.(\d+)(?:-([\da-z-]+(?:\.[\da-z-]+)*))?$/;
|
|
9
|
+
const removeFirstV = (version) => {
|
|
10
|
+
version = version.trim();
|
|
11
|
+
if (/^v\d/.test(version)) {
|
|
12
|
+
version = version.slice(1);
|
|
13
|
+
}
|
|
14
|
+
return version;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* 获取有效的版本号,如果符合规范则返回,否则返回null
|
|
18
|
+
* eg: getValidVersion('v1.2.3') // '1.2.3'
|
|
19
|
+
*/
|
|
20
|
+
export const getValidVersion = (version) => {
|
|
21
|
+
version = removeFirstV(version);
|
|
22
|
+
return versionRegex.test(version) ? version : null;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 解析版本号,如果符合规范则返回一个包含版本信息的对象
|
|
26
|
+
*/
|
|
27
|
+
export const parseVersion = (version) => {
|
|
28
|
+
version = removeFirstV(version);
|
|
29
|
+
const match = version.match(versionRegex);
|
|
30
|
+
if (match?.length) {
|
|
31
|
+
return {
|
|
32
|
+
version: match[0],
|
|
33
|
+
major: +match[1],
|
|
34
|
+
minor: +match[2],
|
|
35
|
+
patch: +match[3],
|
|
36
|
+
prerelease: match[4]?.split('.').map(str => {
|
|
37
|
+
if (/^\d*$/.test(str)) {
|
|
38
|
+
return +str;
|
|
39
|
+
}
|
|
40
|
+
return str;
|
|
41
|
+
}) || [],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const _getCompare = (operator) => (v1, v2) => compare(v1, v2, operator);
|
|
46
|
+
/**
|
|
47
|
+
* 使用给定规则比较两个版本
|
|
48
|
+
* lt: v1小于v2; gt: v1大于v2; lte: v1小于等于v2; gte: v1大于等于v2;
|
|
49
|
+
* eg: compareVersion.lt('1.2.3', '9.8.7') // true
|
|
50
|
+
* compareVersion.cmp('1.2.3', '9.8.7', '<') // true
|
|
51
|
+
*/
|
|
52
|
+
export const compareVersion = {
|
|
53
|
+
lt: _getCompare('<'),
|
|
54
|
+
gt: _getCompare('>'),
|
|
55
|
+
eq: _getCompare('='),
|
|
56
|
+
lte: _getCompare('<='),
|
|
57
|
+
gte: _getCompare('>='),
|
|
58
|
+
cmp: compare,
|
|
59
|
+
};
|
|
60
|
+
// 允许使用宽松的版本号进行 minor 版本比较
|
|
61
|
+
export const compareMinorVersion = (v1, v2) => {
|
|
62
|
+
const v1Arr = v1.split('.').map(v => parseInt(v));
|
|
63
|
+
const v2Arr = v2.split('.').map(v => parseInt(v));
|
|
64
|
+
for (let i = 0; i < 2; i++) {
|
|
65
|
+
const v1Part = v1Arr[i] || 0;
|
|
66
|
+
const v2Part = v2Arr[i] || 0;
|
|
67
|
+
if (v1Part > v2Part) {
|
|
68
|
+
return 1;
|
|
69
|
+
}
|
|
70
|
+
if (v1Part < v2Part) {
|
|
71
|
+
return -1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return 0;
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZHluYW1pYy1wbHVnaW4tc2hhcmVkL3NyYy91dGlscy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBRTVELE9BQU8sRUFFTCxlQUFlLElBQUksbUJBQW1CLEVBQ3RDLFNBQVMsSUFBSSxnQkFBZ0IsR0FDOUIsTUFBTSxrQkFBa0IsQ0FBQztBQVUxQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3ZCLHdEQUF3RCxDQUFDO0FBRTNELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7SUFDdkMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBQ0Y7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7SUFDekQsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBZSxFQUFpQixFQUFFO0lBQzdELE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNsQixPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakIsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoQixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEIsVUFBVSxFQUNSLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDZCxDQUFDO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUNYLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxRQUF5QixFQUFFLEVBQUUsQ0FDOUIsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFXLEVBQUUsQ0FDbEMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDcEIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDcEIsRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDcEIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDdEIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDdEIsR0FBRyxFQUFFLE9BQU87Q0FDYixDQUFDO0FBRUYsMEJBQTBCO0FBQzFCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFFO0lBQzVELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDln7rkuo7nm7jlr7nkuKXmoLznmoTniYjmnKzlj7fop4TliJnvvIzop4TojIPlj6/ku6Xlj4LogINodHRwczovL3NlbXZlci5vcmcvXG4gKiDkvYblnKjmr5TovoPniYjmnKzlj7fml7bkvb/nlKjnm7jlr7nlrr3mnb7nmoTop4TliJnvvIzlhbfkvZPlj6/ku6Xmn6XnnItjb21wYXJlLXZlcnNpb25z5bqT55qE5a6e546wXG4gKiDoh6rmtYvnlKjkvovvvJpodHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvdHlwZXNjcmlwdC1qcXN6YmpcbiAqL1xuXG5pbXBvcnQgeyBjb21wYXJlLCBDb21wYXJlT3BlcmF0b3IgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcblxuZXhwb3J0IHtcbiAgQ29tcGFyZU9wZXJhdG9yIGFzIFZlcnNpb25Db21wYXJlT3BlcmF0b3IsXG4gIGNvbXBhcmVWZXJzaW9ucyBhcyBjb21wYXJlVmVyc2lvblRvTnVtLFxuICBzYXRpc2ZpZXMgYXMgc2F0aXNmaWVzVmVyc2lvbixcbn0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbk9iamVjdCB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgbWFqb3I6IG51bWJlcjtcbiAgbWlub3I6IG51bWJlcjtcbiAgcGF0Y2g6IG51bWJlcjtcbiAgcHJlcmVsZWFzZT86IEFycmF5PG51bWJlciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBjb25zdCB2ZXJzaW9uUmVnZXggPVxuICAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSg/Oi0oW1xcZGEtei1dKyg/OlxcLltcXGRhLXotXSspKikpPyQvO1xuXG5jb25zdCByZW1vdmVGaXJzdFYgPSAodmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gIHZlcnNpb24gPSB2ZXJzaW9uLnRyaW0oKTtcbiAgaWYgKC9edlxcZC8udGVzdCh2ZXJzaW9uKSkge1xuICAgIHZlcnNpb24gPSB2ZXJzaW9uLnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiB2ZXJzaW9uO1xufTtcbi8qKlxuICog6I635Y+W5pyJ5pWI55qE54mI5pys5Y+377yM5aaC5p6c56ym5ZCI6KeE6IyD5YiZ6L+U5Zue77yM5ZCm5YiZ6L+U5ZuebnVsbFxuICogZWc6IGdldFZhbGlkVmVyc2lvbigndjEuMi4zJykgLy8gJzEuMi4zJ1xuICovXG5leHBvcnQgY29uc3QgZ2V0VmFsaWRWZXJzaW9uID0gKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHZlcnNpb24gPSByZW1vdmVGaXJzdFYodmVyc2lvbik7XG4gIHJldHVybiB2ZXJzaW9uUmVnZXgudGVzdCh2ZXJzaW9uKSA/IHZlcnNpb24gOiBudWxsO1xufTtcblxuLyoqXG4gKiDop6PmnpDniYjmnKzlj7fvvIzlpoLmnpznrKblkIjop4TojIPliJnov5Tlm57kuIDkuKrljIXlkKvniYjmnKzkv6Hmga/nmoTlr7nosaFcbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlVmVyc2lvbiA9ICh2ZXJzaW9uOiBzdHJpbmcpOiBWZXJzaW9uT2JqZWN0ID0+IHtcbiAgdmVyc2lvbiA9IHJlbW92ZUZpcnN0Vih2ZXJzaW9uKTtcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKHZlcnNpb25SZWdleCk7XG4gIGlmIChtYXRjaD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IG1hdGNoWzBdLFxuICAgICAgbWFqb3I6ICttYXRjaFsxXSxcbiAgICAgIG1pbm9yOiArbWF0Y2hbMl0sXG4gICAgICBwYXRjaDogK21hdGNoWzNdLFxuICAgICAgcHJlcmVsZWFzZTpcbiAgICAgICAgbWF0Y2hbNF0/LnNwbGl0KCcuJykubWFwKHN0ciA9PiB7XG4gICAgICAgICAgaWYgKC9eXFxkKiQvLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuICtzdHI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0pIHx8IFtdLFxuICAgIH07XG4gIH1cbn07XG5cbmNvbnN0IF9nZXRDb21wYXJlID1cbiAgKG9wZXJhdG9yOiBDb21wYXJlT3BlcmF0b3IpID0+XG4gICh2MTogc3RyaW5nLCB2Mjogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAgIGNvbXBhcmUodjEsIHYyLCBvcGVyYXRvcik7XG4vKipcbiAqIOS9v+eUqOe7meWumuinhOWImeavlOi+g+S4pOS4queJiOacrFxuICogbHQ6IHYx5bCP5LqOdjI7ICBndDogdjHlpKfkuo52MjsgIGx0ZTogdjHlsI/kuo7nrYnkuo52MjsgIGd0ZTogdjHlpKfkuo7nrYnkuo52MjtcbiAqIGVnOiBjb21wYXJlVmVyc2lvbi5sdCgnMS4yLjMnLCAnOS44LjcnKSAvLyB0cnVlXG4gKiAgICAgY29tcGFyZVZlcnNpb24uY21wKCcxLjIuMycsICc5LjguNycsICc8JykgLy8gdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgY29tcGFyZVZlcnNpb24gPSB7XG4gIGx0OiBfZ2V0Q29tcGFyZSgnPCcpLFxuICBndDogX2dldENvbXBhcmUoJz4nKSxcbiAgZXE6IF9nZXRDb21wYXJlKCc9JyksXG4gIGx0ZTogX2dldENvbXBhcmUoJzw9JyksXG4gIGd0ZTogX2dldENvbXBhcmUoJz49JyksXG4gIGNtcDogY29tcGFyZSxcbn07XG5cbi8vIOWFgeiuuOS9v+eUqOWuveadvueahOeJiOacrOWPt+i/m+ihjCBtaW5vciDniYjmnKzmr5TovoNcbmV4cG9ydCBjb25zdCBjb21wYXJlTWlub3JWZXJzaW9uID0gKHYxOiBzdHJpbmcsIHYyOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdjFBcnIgPSB2MS5zcGxpdCgnLicpLm1hcCh2ID0+IHBhcnNlSW50KHYpKTtcbiAgY29uc3QgdjJBcnIgPSB2Mi5zcGxpdCgnLicpLm1hcCh2ID0+IHBhcnNlSW50KHYpKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICBjb25zdCB2MVBhcnQgPSB2MUFycltpXSB8fCAwO1xuICAgIGNvbnN0IHYyUGFydCA9IHYyQXJyW2ldIHx8IDA7XG4gICAgaWYgKHYxUGFydCA+IHYyUGFydCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICh2MVBhcnQgPCB2MlBhcnQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* @module utils
|
|
4
|
+
*/
|
|
5
|
+
import { of, catchError, map, startWith } from 'rxjs';
|
|
6
|
+
export function withLoadState(input, defaultValue = null) {
|
|
7
|
+
return input.pipe(map(data => ({
|
|
8
|
+
loading: false,
|
|
9
|
+
data,
|
|
10
|
+
error: null,
|
|
11
|
+
})), startWith({
|
|
12
|
+
loading: true,
|
|
13
|
+
data: defaultValue,
|
|
14
|
+
error: null,
|
|
15
|
+
}), catchError(error => of({
|
|
16
|
+
loading: false,
|
|
17
|
+
data: defaultValue,
|
|
18
|
+
error,
|
|
19
|
+
})));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1sb2FkLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL3V0aWxzL3dpdGgtbG9hZC1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUWxFLE1BQU0sVUFBVSxhQUFhLENBQzNCLEtBQW9CLEVBQ3BCLGVBQWtCLElBQUk7SUFFdEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDWCxPQUFPLEVBQUUsS0FBSztRQUNkLElBQUk7UUFDSixLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUMsQ0FBQyxFQUNILFNBQVMsQ0FBQztRQUNSLE9BQU8sRUFBRSxJQUFJO1FBQ2IsSUFBSSxFQUFFLFlBQVk7UUFDbEIsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2pCLEVBQUUsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLO1FBQ2QsSUFBSSxFQUFFLFlBQVk7UUFDbEIsS0FBSztLQUNOLENBQUMsQ0FDSCxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgdXRpbHNcbiAqL1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgY2F0Y2hFcnJvciwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoTG9hZFN0YXRlPFQsIEUgPSB1bmtub3duPiB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGRhdGE6IFQ7XG4gIGVycm9yOiBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aExvYWRTdGF0ZTxUPihcbiAgaW5wdXQ6IE9ic2VydmFibGU8VD4sXG4gIGRlZmF1bHRWYWx1ZTogVCA9IG51bGwsXG4pOiBPYnNlcnZhYmxlPFdpdGhMb2FkU3RhdGU8VD4+IHtcbiAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgbWFwKGRhdGEgPT4gKHtcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgZGF0YSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgIH0pKSxcbiAgICBzdGFydFdpdGgoe1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGRhdGE6IGRlZmF1bHRWYWx1ZSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgIH0pLFxuICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgIG9mKHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGRhdGE6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { get } from 'lodash-es';
|
|
2
|
+
import { GenericStatusColor, GenericStatusIcon, } from '../constants/status-icons';
|
|
3
|
+
export var WorkloadKind;
|
|
4
|
+
(function (WorkloadKind) {
|
|
5
|
+
WorkloadKind["Deployment"] = "Deployment";
|
|
6
|
+
WorkloadKind["StatefulSet"] = "StatefulSet";
|
|
7
|
+
WorkloadKind["DaemonSet"] = "DaemonSet";
|
|
8
|
+
})(WorkloadKind || (WorkloadKind = {}));
|
|
9
|
+
export var JobStatusEnum;
|
|
10
|
+
(function (JobStatusEnum) {
|
|
11
|
+
JobStatusEnum["EXECUTING"] = "executing";
|
|
12
|
+
JobStatusEnum["EXECUTE_SUCCEEDED"] = "execute_succeeded";
|
|
13
|
+
JobStatusEnum["EXECUTE_FAILED"] = "execute_failed";
|
|
14
|
+
JobStatusEnum["UNKNOWN"] = "unknown";
|
|
15
|
+
})(JobStatusEnum || (JobStatusEnum = {}));
|
|
16
|
+
export const JobStatusColorMapper = {
|
|
17
|
+
[JobStatusEnum.EXECUTING]: GenericStatusColor.Pending,
|
|
18
|
+
[JobStatusEnum.EXECUTE_SUCCEEDED]: GenericStatusColor.Succeeded,
|
|
19
|
+
[JobStatusEnum.EXECUTE_FAILED]: GenericStatusColor.Failed,
|
|
20
|
+
[JobStatusEnum.UNKNOWN]: GenericStatusColor.Empty,
|
|
21
|
+
};
|
|
22
|
+
export const JobStatusIconMapper = {
|
|
23
|
+
[JobStatusEnum.EXECUTING]: GenericStatusIcon.Pending,
|
|
24
|
+
[JobStatusEnum.EXECUTE_SUCCEEDED]: GenericStatusIcon.Check,
|
|
25
|
+
[JobStatusEnum.EXECUTE_FAILED]: GenericStatusIcon.Error,
|
|
26
|
+
[JobStatusEnum.UNKNOWN]: GenericStatusIcon.Question,
|
|
27
|
+
};
|
|
28
|
+
export var WorkloadStatusEnum;
|
|
29
|
+
(function (WorkloadStatusEnum) {
|
|
30
|
+
WorkloadStatusEnum["running"] = "running";
|
|
31
|
+
WorkloadStatusEnum["stopped"] = "stopped";
|
|
32
|
+
WorkloadStatusEnum["pending"] = "pending";
|
|
33
|
+
WorkloadStatusEnum["killed"] = "killed";
|
|
34
|
+
})(WorkloadStatusEnum || (WorkloadStatusEnum = {}));
|
|
35
|
+
export const WorkloadStatusColorMapper = {
|
|
36
|
+
[WorkloadStatusEnum.running]: GenericStatusColor.Running,
|
|
37
|
+
[WorkloadStatusEnum.pending]: GenericStatusColor.Pending,
|
|
38
|
+
[WorkloadStatusEnum.stopped]: GenericStatusColor.Stopped,
|
|
39
|
+
[WorkloadStatusEnum.killed]: GenericStatusColor.Stopped,
|
|
40
|
+
};
|
|
41
|
+
export const WorkloadStatusIconMapper = {
|
|
42
|
+
[WorkloadStatusEnum.running]: GenericStatusIcon.Running,
|
|
43
|
+
[WorkloadStatusEnum.pending]: GenericStatusIcon.Pending,
|
|
44
|
+
[WorkloadStatusEnum.stopped]: GenericStatusIcon.Stopped,
|
|
45
|
+
[WorkloadStatusEnum.killed]: GenericStatusIcon.Stopped,
|
|
46
|
+
};
|
|
47
|
+
export const STATUS = 'status';
|
|
48
|
+
export function parseDeploymentStatus(res) {
|
|
49
|
+
const status = res.status;
|
|
50
|
+
if (larger(res.spec.replicas, 0) &&
|
|
51
|
+
equal(status.updatedReplicas, res.spec.replicas) &&
|
|
52
|
+
equal(status.replicas, res.spec.replicas) &&
|
|
53
|
+
equal(status.availableReplicas, res.spec.replicas) &&
|
|
54
|
+
largerEqual(status.observedGeneration, res.metadata.generation)) {
|
|
55
|
+
return WorkloadStatusEnum.running;
|
|
56
|
+
}
|
|
57
|
+
if (equal(res.spec.replicas, 0) &&
|
|
58
|
+
equal(status.replicas, res.spec.replicas) &&
|
|
59
|
+
equal(status.updatedReplicas, res.spec.replicas) &&
|
|
60
|
+
equal(status.availableReplicas, res.spec.replicas) &&
|
|
61
|
+
largerEqual(status.observedGeneration, res.metadata.generation)) {
|
|
62
|
+
return WorkloadStatusEnum.stopped;
|
|
63
|
+
}
|
|
64
|
+
return WorkloadStatusEnum.pending;
|
|
65
|
+
}
|
|
66
|
+
export function parseDaemonSetStatus(res) {
|
|
67
|
+
const status = res.status;
|
|
68
|
+
if (larger(status.desiredNumberScheduled, 0) &&
|
|
69
|
+
largerEqual(status.observedGeneration, res.metadata.generation) &&
|
|
70
|
+
equal(status.desiredNumberScheduled, status.currentNumberScheduled) &&
|
|
71
|
+
equal(status.numberReady, status.desiredNumberScheduled) &&
|
|
72
|
+
equal(status.numberAvailable, status.desiredNumberScheduled) &&
|
|
73
|
+
(res.spec.updateStrategy.type !== 'RollingUpdate' ||
|
|
74
|
+
equal(status.updatedNumberScheduled, status.desiredNumberScheduled))) {
|
|
75
|
+
return WorkloadStatusEnum.running;
|
|
76
|
+
}
|
|
77
|
+
if (equal(status.desiredNumberScheduled, 0) &&
|
|
78
|
+
largerEqual(status.observedGeneration, res.metadata.generation) &&
|
|
79
|
+
equal(status.desiredNumberScheduled, status.desiredNumberScheduled) &&
|
|
80
|
+
equal(status.numberReady, status.desiredNumberScheduled) &&
|
|
81
|
+
equal(status.numberAvailable, status.desiredNumberScheduled) &&
|
|
82
|
+
equal(status.currentNumberScheduled, status.desiredNumberScheduled) &&
|
|
83
|
+
(res.spec.updateStrategy.type !== 'RollingUpdate' ||
|
|
84
|
+
equal(status.updatedNumberScheduled, status.desiredNumberScheduled))) {
|
|
85
|
+
return WorkloadStatusEnum.stopped;
|
|
86
|
+
}
|
|
87
|
+
return WorkloadStatusEnum.pending;
|
|
88
|
+
}
|
|
89
|
+
export function parseStatefulSetStatus(res) {
|
|
90
|
+
const status = res.status;
|
|
91
|
+
if (larger(res.spec.replicas, 0) &&
|
|
92
|
+
equal(status.replicas, res.spec.replicas) &&
|
|
93
|
+
equal(status.readyReplicas, res.spec.replicas) &&
|
|
94
|
+
largerEqual(status.observedGeneration, res.metadata.generation) &&
|
|
95
|
+
(res.spec.updateStrategy.type !== 'RollingUpdate' ||
|
|
96
|
+
(equal(status.currentRevision, status.updateRevision)
|
|
97
|
+
? equal(status.currentReplicas, res.spec.replicas)
|
|
98
|
+
: largerEqual(status?.updatedReplicas, status.replicas - +res.spec.updateStrategy.rollingUpdate?.partition)))) {
|
|
99
|
+
return WorkloadStatusEnum.running;
|
|
100
|
+
}
|
|
101
|
+
if (equal(res.spec.replicas, 0) &&
|
|
102
|
+
equal(status.replicas, res.spec.replicas) &&
|
|
103
|
+
equal(status.readyReplicas, res.spec.replicas) &&
|
|
104
|
+
largerEqual(status.observedGeneration, res.metadata.generation) &&
|
|
105
|
+
(res.spec.updateStrategy.type !== 'RollingUpdate' ||
|
|
106
|
+
(equal(status.currentRevision, status.updateRevision) &&
|
|
107
|
+
equal(status.currentReplicas, res.spec.replicas)))) {
|
|
108
|
+
return WorkloadStatusEnum.stopped;
|
|
109
|
+
}
|
|
110
|
+
return WorkloadStatusEnum.pending;
|
|
111
|
+
}
|
|
112
|
+
export function parseToWorkloadStatus(data) {
|
|
113
|
+
switch (data?.kind) {
|
|
114
|
+
case WorkloadKind.Deployment: {
|
|
115
|
+
return {
|
|
116
|
+
status: parseDeploymentStatus(data),
|
|
117
|
+
desired: get(data, ['spec', 'replicas'], 0),
|
|
118
|
+
current: get(data, [STATUS, 'availableReplicas'], 0),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
case WorkloadKind.DaemonSet: {
|
|
122
|
+
return {
|
|
123
|
+
status: parseDaemonSetStatus(data),
|
|
124
|
+
desired: get(data, [STATUS, 'desiredNumberScheduled'], 0),
|
|
125
|
+
current: get(data, [STATUS, 'numberReady'], 0),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
case WorkloadKind.StatefulSet: {
|
|
129
|
+
return {
|
|
130
|
+
status: parseStatefulSetStatus(data),
|
|
131
|
+
desired: get(data, ['spec', 'replicas'], 0),
|
|
132
|
+
current: get(data, [STATUS, 'readyReplicas'], 0),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
default: {
|
|
136
|
+
return {
|
|
137
|
+
status: WorkloadStatusEnum.stopped,
|
|
138
|
+
desired: 0,
|
|
139
|
+
current: 0,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function equal(x, y) {
|
|
145
|
+
return defaultZero(x) === defaultZero(y);
|
|
146
|
+
}
|
|
147
|
+
function largerEqual(x, y) {
|
|
148
|
+
return defaultZero(x) >= defaultZero(y);
|
|
149
|
+
}
|
|
150
|
+
function larger(x, y) {
|
|
151
|
+
return defaultZero(x) > defaultZero(y);
|
|
152
|
+
}
|
|
153
|
+
function defaultZero(x) {
|
|
154
|
+
return x || 0;
|
|
155
|
+
}
|
|
156
|
+
export function getJobStatus(data) {
|
|
157
|
+
const status = data.status;
|
|
158
|
+
if (status.conditions?.some(_item => _item.type === 'Failed')) {
|
|
159
|
+
return JobStatusEnum.EXECUTE_FAILED;
|
|
160
|
+
}
|
|
161
|
+
// when Complete and succeeded, judge to execute_succeeded
|
|
162
|
+
if (status.conditions?.some(_item => _item.type === 'Complete')) {
|
|
163
|
+
if (status.succeeded) {
|
|
164
|
+
return JobStatusEnum.EXECUTE_SUCCEEDED;
|
|
165
|
+
}
|
|
166
|
+
if (status.failed) {
|
|
167
|
+
return JobStatusEnum.EXECUTE_FAILED;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// no condition and no Complete when running
|
|
171
|
+
if (status.active) {
|
|
172
|
+
return JobStatusEnum.EXECUTING;
|
|
173
|
+
}
|
|
174
|
+
return JobStatusEnum.UNKNOWN;
|
|
175
|
+
}
|
|
176
|
+
export function getWorkloadStatus(status) {
|
|
177
|
+
return status.status.toLowerCase();
|
|
178
|
+
}
|
|
179
|
+
export function getPodIPs(pod) {
|
|
180
|
+
const podIPs = pod.status.podIPs?.map(({ ip }) => ip);
|
|
181
|
+
return podIPs?.length ? podIPs : [pod.status.podIP].filter(Boolean);
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2xvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvdXRpbHMvd29ya2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLDJCQUEyQixDQUFDO0FBS25DLE1BQU0sQ0FBTixJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdEIseUNBQXlCLENBQUE7SUFDekIsMkNBQTJCLENBQUE7SUFDM0IsdUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUpXLFlBQVksS0FBWixZQUFZLFFBSXZCO0FBRUQsTUFBTSxDQUFOLElBQVksYUFLWDtBQUxELFdBQVksYUFBYTtJQUN2Qix3Q0FBdUIsQ0FBQTtJQUN2Qix3REFBdUMsQ0FBQTtJQUN2QyxrREFBaUMsQ0FBQTtJQUNqQyxvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsYUFBYSxLQUFiLGFBQWEsUUFLeEI7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO0lBQ3JELENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsU0FBUztJQUMvRCxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO0lBQ3pELENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGtCQUFrQixDQUFDLEtBQUs7Q0FDbEQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE9BQU87SUFDcEQsQ0FBQyxhQUFhLENBQUMsaUJBQWlC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TSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsT0FBTyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7XG4gIEdlbmVyaWNTdGF0dXNDb2xvcixcbiAgR2VuZXJpY1N0YXR1c0ljb24sXG59IGZyb20gJy4uL2NvbnN0YW50cy9zdGF0dXMtaWNvbnMnO1xuaW1wb3J0IHsgRGFlbW9uU2V0LCBEZXBsb3ltZW50LCBKb2IsIFBvZCwgU3RhdGVmdWxTZXQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFdvcmtsb2FkID0gRGVwbG95bWVudCB8IFN0YXRlZnVsU2V0IHwgRGFlbW9uU2V0O1xuXG5leHBvcnQgZW51bSBXb3JrbG9hZEtpbmQge1xuICBEZXBsb3ltZW50ID0gJ0RlcGxveW1lbnQnLFxuICBTdGF0ZWZ1bFNldCA9ICdTdGF0ZWZ1bFNldCcsXG4gIERhZW1vblNldCA9ICdEYWVtb25TZXQnLFxufVxuXG5leHBvcnQgZW51bSBKb2JTdGF0dXNFbnVtIHtcbiAgRVhFQ1VUSU5HID0gJ2V4ZWN1dGluZycsXG4gIEVYRUNVVEVfU1VDQ0VFREVEID0gJ2V4ZWN1dGVfc3VjY2VlZGVkJyxcbiAgRVhFQ1VURV9GQUlMRUQgPSAnZXhlY3V0ZV9mYWlsZWQnLFxuICBVTktOT1dOID0gJ3Vua25vd24nLCAvLyDmr5TlpoIgbmFtZXNwYWNlIHBvZCDmlbDph4/ovr7liLDpmZDpop3kuIrpmZDvvIzku7vliqHlsLHkvJrlj6rop6blj5HvvIzkvYbmmK/msqHmnInnirbmgIFcbn1cblxuZXhwb3J0IGNvbnN0IEpvYlN0YXR1c0NvbG9yTWFwcGVyID0ge1xuICBbSm9iU3RhdHVzRW51bS5FWEVDVVRJTkddOiBHZW5lcmljU3RhdHVzQ29sb3IuUGVuZGluZyxcbiAgW0pvYlN0YXR1c0VudW0uRVhFQ1VURV9TVUNDRUVERURdOiBHZW5lcmljU3RhdHVzQ29sb3IuU3VjY2VlZGVkLFxuICBbSm9iU3RhdHVzRW51bS5FWEVDVVRFX0ZBSUxFRF06IEdlbmVyaWNTdGF0dXNDb2xvci5GYWlsZWQsXG4gIFtKb2JTdGF0dXNFbnVtLlVOS05PV05dOiBHZW5lcmljU3RhdHVzQ29sb3IuRW1wdHksXG59O1xuXG5leHBvcnQgY29uc3QgSm9iU3RhdHVzSWNvbk1hcHBlciA9IHtcbiAgW0pvYlN0YXR1c0VudW0uRVhFQ1VUSU5HXTogR2VuZXJpY1N0YXR1c0ljb24uUGVuZGluZyxcbiAgW0pvYlN0YXR1c0VudW0uRVhFQ1VURV9TVUNDRUVERURdOiBHZW5lcmljU3RhdHVzSWNvbi5DaGVjayxcbiAgW0pvYlN0YXR1c0VudW0uRVhFQ1VURV9GQUlMRURdOiBHZW5lcmljU3RhdHVzSWNvbi5FcnJvcixcbiAgW0pvYlN0YXR1c0VudW0uVU5LTk9XTl06IEdlbmVyaWNTdGF0dXNJY29uLlF1ZXN0aW9uLFxufTtcblxuZXhwb3J0IGVudW0gV29ya2xvYWRTdGF0dXNFbnVtIHtcbiAgcnVubmluZyA9ICdydW5uaW5nJyxcbiAgc3RvcHBlZCA9ICdzdG9wcGVkJyxcbiAgcGVuZGluZyA9ICdwZW5kaW5nJyxcbiAga2lsbGVkID0gJ2tpbGxlZCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY1dvcmtsb2FkU3RhdHVzIHtcbiAgc3RhdHVzPzogV29ya2xvYWRTdGF0dXNFbnVtO1xuICBkZXNpcmVkPzogbnVtYmVyO1xuICBjdXJyZW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtsb2FkU3RhdHVzIGV4dGVuZHMgR2VuZXJpY1dvcmtsb2FkU3RhdHVzIHtcbiAgbmFtZT86IHN0cmluZztcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIG1lc3NhZ2VzPzogQXJyYXk8e1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICByZWFzb24/OiBzdHJpbmc7XG4gIH0+O1xufVxuXG5leHBvcnQgY29uc3QgV29ya2xvYWRTdGF0dXNDb2xvck1hcHBlciA9IHtcbiAgW1dvcmtsb2FkU3RhdHVzRW51bS5ydW5uaW5nXTogR2VuZXJpY1N0YXR1c0NvbG9yLlJ1bm5pbmcsXG4gIFtXb3JrbG9hZFN0YXR1c0VudW0ucGVuZGluZ106IEdlbmVyaWNTdGF0dXNDb2xvci5QZW5kaW5nLFxuICBbV29ya2xvYWRTdGF0dXNFbnVtLnN0b3BwZWRdOiBHZW5lcmljU3RhdHVzQ29sb3IuU3RvcHBlZCxcbiAgW1dvcmtsb2FkU3RhdHVzRW51bS5raWxsZWRdOiBHZW5lcmljU3RhdHVzQ29sb3IuU3RvcHBlZCxcbn07XG5cbmV4cG9ydCBjb25zdCBXb3JrbG9hZFN0YXR1c0ljb25NYXBwZXIgPSB7XG4gIFtXb3JrbG9hZFN0YXR1c0VudW0ucnVubmluZ106IEdlbmVyaWNTdGF0dXNJY29uLlJ1bm5pbmcsXG4gIFtXb3JrbG9hZFN0YXR1c0VudW0ucGVuZGluZ106IEdlbmVyaWNTdGF0dXNJY29uLlBlbmRpbmcsXG4gIFtXb3JrbG9hZFN0YXR1c0VudW0uc3RvcHBlZF06IEdlbmVyaWNTdGF0dXNJY29uLlN0b3BwZWQsXG4gIFtXb3JrbG9hZFN0YXR1c0VudW0ua2lsbGVkXTogR2VuZXJpY1N0YXR1c0ljb24uU3RvcHBlZCxcbn07XG5cbmV4cG9ydCBjb25zdCBTVEFUVVMgPSAnc3RhdHVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVwbG95bWVudFN0YXR1cyhyZXM6IERlcGxveW1lbnQpIHtcbiAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgaWYgKFxuICAgIGxhcmdlcihyZXMuc3BlYy5yZXBsaWNhcywgMCkgJiZcbiAgICBlcXVhbChzdGF0dXMudXBkYXRlZFJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcykgJiZcbiAgICBlcXVhbChzdGF0dXMucmVwbGljYXMsIHJlcy5zcGVjLnJlcGxpY2FzKSAmJlxuICAgIGVxdWFsKHN0YXR1cy5hdmFpbGFibGVSZXBsaWNhcywgcmVzLnNwZWMucmVwbGljYXMpICYmXG4gICAgbGFyZ2VyRXF1YWwoc3RhdHVzLm9ic2VydmVkR2VuZXJhdGlvbiwgcmVzLm1ldGFkYXRhLmdlbmVyYXRpb24pXG4gICkge1xuICAgIHJldHVybiBXb3JrbG9hZFN0YXR1c0VudW0ucnVubmluZztcbiAgfVxuICBpZiAoXG4gICAgZXF1YWwocmVzLnNwZWMucmVwbGljYXMsIDApICYmXG4gICAgZXF1YWwoc3RhdHVzLnJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcykgJiZcbiAgICBlcXVhbChzdGF0dXMudXBkYXRlZFJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcykgJiZcbiAgICBlcXVhbChzdGF0dXMuYXZhaWxhYmxlUmVwbGljYXMsIHJlcy5zcGVjLnJlcGxpY2FzKSAmJlxuICAgIGxhcmdlckVxdWFsKHN0YXR1cy5vYnNlcnZlZEdlbmVyYXRpb24sIHJlcy5tZXRhZGF0YS5nZW5lcmF0aW9uKVxuICApIHtcbiAgICByZXR1cm4gV29ya2xvYWRTdGF0dXNFbnVtLnN0b3BwZWQ7XG4gIH1cbiAgcmV0dXJuIFdvcmtsb2FkU3RhdHVzRW51bS5wZW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYWVtb25TZXRTdGF0dXMocmVzOiBEYWVtb25TZXQpIHtcbiAgY29uc3Qgc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgaWYgKFxuICAgIGxhcmdlcihzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCwgMCkgJiZcbiAgICBsYXJnZXJFcXVhbChzdGF0dXMub2JzZXJ2ZWRHZW5lcmF0aW9uLCByZXMubWV0YWRhdGEuZ2VuZXJhdGlvbikgJiZcbiAgICBlcXVhbChzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCwgc3RhdHVzLmN1cnJlbnROdW1iZXJTY2hlZHVsZWQpICYmXG4gICAgZXF1YWwoc3RhdHVzLm51bWJlclJlYWR5LCBzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCkgJiZcbiAgICBlcXVhbChzdGF0dXMubnVtYmVyQXZhaWxhYmxlLCBzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCkgJiZcbiAgICAocmVzLnNwZWMudXBkYXRlU3RyYXRlZ3kudHlwZSAhPT0gJ1JvbGxpbmdVcGRhdGUnIHx8XG4gICAgICBlcXVhbChzdGF0dXMudXBkYXRlZE51bWJlclNjaGVkdWxlZCwgc3RhdHVzLmRlc2lyZWROdW1iZXJTY2hlZHVsZWQpKVxuICApIHtcbiAgICByZXR1cm4gV29ya2xvYWRTdGF0dXNFbnVtLnJ1bm5pbmc7XG4gIH1cbiAgaWYgKFxuICAgIGVxdWFsKHN0YXR1cy5kZXNpcmVkTnVtYmVyU2NoZWR1bGVkLCAwKSAmJlxuICAgIGxhcmdlckVxdWFsKHN0YXR1cy5vYnNlcnZlZEdlbmVyYXRpb24sIHJlcy5tZXRhZGF0YS5nZW5lcmF0aW9uKSAmJlxuICAgIGVxdWFsKHN0YXR1cy5kZXNpcmVkTnVtYmVyU2NoZWR1bGVkLCBzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCkgJiZcbiAgICBlcXVhbChzdGF0dXMubnVtYmVyUmVhZHksIHN0YXR1cy5kZXNpcmVkTnVtYmVyU2NoZWR1bGVkKSAmJlxuICAgIGVxdWFsKHN0YXR1cy5udW1iZXJBdmFpbGFibGUsIHN0YXR1cy5kZXNpcmVkTnVtYmVyU2NoZWR1bGVkKSAmJlxuICAgIGVxdWFsKHN0YXR1cy5jdXJyZW50TnVtYmVyU2NoZWR1bGVkLCBzdGF0dXMuZGVzaXJlZE51bWJlclNjaGVkdWxlZCkgJiZcbiAgICAocmVzLnNwZWMudXBkYXRlU3RyYXRlZ3kudHlwZSAhPT0gJ1JvbGxpbmdVcGRhdGUnIHx8XG4gICAgICBlcXVhbChzdGF0dXMudXBkYXRlZE51bWJlclNjaGVkdWxlZCwgc3RhdHVzLmRlc2lyZWROdW1iZXJTY2hlZHVsZWQpKVxuICApIHtcbiAgICByZXR1cm4gV29ya2xvYWRTdGF0dXNFbnVtLnN0b3BwZWQ7XG4gIH1cbiAgcmV0dXJuIFdvcmtsb2FkU3RhdHVzRW51bS5wZW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdGF0ZWZ1bFNldFN0YXR1cyhyZXM6IFN0YXRlZnVsU2V0KSB7XG4gIGNvbnN0IHN0YXR1cyA9IHJlcy5zdGF0dXM7XG4gIGlmIChcbiAgICBsYXJnZXIocmVzLnNwZWMucmVwbGljYXMsIDApICYmXG4gICAgZXF1YWwoc3RhdHVzLnJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcykgJiZcbiAgICBlcXVhbChzdGF0dXMucmVhZHlSZXBsaWNhcywgcmVzLnNwZWMucmVwbGljYXMpICYmXG4gICAgbGFyZ2VyRXF1YWwoc3RhdHVzLm9ic2VydmVkR2VuZXJhdGlvbiwgcmVzLm1ldGFkYXRhLmdlbmVyYXRpb24pICYmXG4gICAgKHJlcy5zcGVjLnVwZGF0ZVN0cmF0ZWd5LnR5cGUgIT09ICdSb2xsaW5nVXBkYXRlJyB8fFxuICAgICAgKGVxdWFsKHN0YXR1cy5jdXJyZW50UmV2aXNpb24sIHN0YXR1cy51cGRhdGVSZXZpc2lvbilcbiAgICAgICAgPyBlcXVhbChzdGF0dXMuY3VycmVudFJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcylcbiAgICAgICAgOiBsYXJnZXJFcXVhbChcbiAgICAgICAgICAgIHN0YXR1cz8udXBkYXRlZFJlcGxpY2FzLFxuICAgICAgICAgICAgc3RhdHVzLnJlcGxpY2FzIC0gK3Jlcy5zcGVjLnVwZGF0ZVN0cmF0ZWd5LnJvbGxpbmdVcGRhdGU/LnBhcnRpdGlvbixcbiAgICAgICAgICApKSlcbiAgKSB7XG4gICAgcmV0dXJuIFdvcmtsb2FkU3RhdHVzRW51bS5ydW5uaW5nO1xuICB9XG4gIGlmIChcbiAgICBlcXVhbChyZXMuc3BlYy5yZXBsaWNhcywgMCkgJiZcbiAgICBlcXVhbChzdGF0dXMucmVwbGljYXMsIHJlcy5zcGVjLnJlcGxpY2FzKSAmJlxuICAgIGVxdWFsKHN0YXR1cy5yZWFkeVJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcykgJiZcbiAgICBsYXJnZXJFcXVhbChzdGF0dXMub2JzZXJ2ZWRHZW5lcmF0aW9uLCByZXMubWV0YWRhdGEuZ2VuZXJhdGlvbikgJiZcbiAgICAocmVzLnNwZWMudXBkYXRlU3RyYXRlZ3kudHlwZSAhPT0gJ1JvbGxpbmdVcGRhdGUnIHx8XG4gICAgICAoZXF1YWwoc3RhdHVzLmN1cnJlbnRSZXZpc2lvbiwgc3RhdHVzLnVwZGF0ZVJldmlzaW9uKSAmJlxuICAgICAgICBlcXVhbChzdGF0dXMuY3VycmVudFJlcGxpY2FzLCByZXMuc3BlYy5yZXBsaWNhcykpKVxuICApIHtcbiAgICByZXR1cm4gV29ya2xvYWRTdGF0dXNFbnVtLnN0b3BwZWQ7XG4gIH1cbiAgcmV0dXJuIFdvcmtsb2FkU3RhdHVzRW51bS5wZW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUb1dvcmtsb2FkU3RhdHVzKGRhdGE6IERlcGxveW1lbnQpOiBHZW5lcmljV29ya2xvYWRTdGF0dXMge1xuICBzd2l0Y2ggKGRhdGE/LmtpbmQpIHtcbiAgICBjYXNlIFdvcmtsb2FkS2luZC5EZXBsb3ltZW50OiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IHBhcnNlRGVwbG95bWVudFN0YXR1cyhkYXRhKSxcbiAgICAgICAgZGVzaXJlZDogZ2V0KGRhdGEsIFsnc3BlYycsICdyZXBsaWNhcyddLCAwKSxcbiAgICAgICAgY3VycmVudDogZ2V0KGRhdGEsIFtTVEFUVVMsICdhdmFpbGFibGVSZXBsaWNhcyddLCAwKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgV29ya2xvYWRLaW5kLkRhZW1vblNldDoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBwYXJzZURhZW1vblNldFN0YXR1cyhkYXRhKSxcbiAgICAgICAgZGVzaXJlZDogZ2V0KGRhdGEsIFtTVEFUVVMsICdkZXNpcmVkTnVtYmVyU2NoZWR1bGVkJ10sIDApLFxuICAgICAgICBjdXJyZW50OiBnZXQoZGF0YSwgW1NUQVRVUywgJ251bWJlclJlYWR5J10sIDApLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBXb3JrbG9hZEtpbmQuU3RhdGVmdWxTZXQ6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogcGFyc2VTdGF0ZWZ1bFNldFN0YXR1cyhkYXRhKSxcbiAgICAgICAgZGVzaXJlZDogZ2V0KGRhdGEsIFsnc3BlYycsICdyZXBsaWNhcyddLCAwKSxcbiAgICAgICAgY3VycmVudDogZ2V0KGRhdGEsIFtTVEFUVVMsICdyZWFkeVJlcGxpY2FzJ10sIDApLFxuICAgICAgfTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBXb3JrbG9hZFN0YXR1c0VudW0uc3RvcHBlZCxcbiAgICAgICAgZGVzaXJlZDogMCxcbiAgICAgICAgY3VycmVudDogMCxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVxdWFsKHg6IG51bWJlciB8IHN0cmluZywgeTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZhdWx0WmVybyh4KSA9PT0gZGVmYXVsdFplcm8oeSk7XG59XG5cbmZ1bmN0aW9uIGxhcmdlckVxdWFsKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gIHJldHVybiBkZWZhdWx0WmVybyh4KSA+PSBkZWZhdWx0WmVybyh5KTtcbn1cblxuZnVuY3Rpb24gbGFyZ2VyKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gIHJldHVybiBkZWZhdWx0WmVybyh4KSA+IGRlZmF1bHRaZXJvKHkpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0WmVybyh4OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgcmV0dXJuIHggfHwgMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpvYlN0YXR1cyhkYXRhOiBKb2IpOiBKb2JTdGF0dXNFbnVtIHtcbiAgY29uc3Qgc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gIGlmIChzdGF0dXMuY29uZGl0aW9ucz8uc29tZShfaXRlbSA9PiBfaXRlbS50eXBlID09PSAnRmFpbGVkJykpIHtcbiAgICByZXR1cm4gSm9iU3RhdHVzRW51bS5FWEVDVVRFX0ZBSUxFRDtcbiAgfVxuICAvLyB3aGVuIENvbXBsZXRlIGFuZCBzdWNjZWVkZWQsIGp1ZGdlIHRvIGV4ZWN1dGVfc3VjY2VlZGVkXG4gIGlmIChzdGF0dXMuY29uZGl0aW9ucz8uc29tZShfaXRlbSA9PiBfaXRlbS50eXBlID09PSAnQ29tcGxldGUnKSkge1xuICAgIGlmIChzdGF0dXMuc3VjY2VlZGVkKSB7XG4gICAgICByZXR1cm4gSm9iU3RhdHVzRW51bS5FWEVDVVRFX1NVQ0NFRURFRDtcbiAgICB9XG4gICAgaWYgKHN0YXR1cy5mYWlsZWQpIHtcbiAgICAgIHJldHVybiBKb2JTdGF0dXNFbnVtLkVYRUNVVEVfRkFJTEVEO1xuICAgIH1cbiAgfVxuICAvLyBubyBjb25kaXRpb24gYW5kIG5vIENvbXBsZXRlIHdoZW4gcnVubmluZ1xuICBpZiAoc3RhdHVzLmFjdGl2ZSkge1xuICAgIHJldHVybiBKb2JTdGF0dXNFbnVtLkVYRUNVVElORztcbiAgfVxuICByZXR1cm4gSm9iU3RhdHVzRW51bS5VTktOT1dOO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2xvYWRTdGF0dXMoc3RhdHVzOiBHZW5lcmljV29ya2xvYWRTdGF0dXMpIHtcbiAgcmV0dXJuIHN0YXR1cy5zdGF0dXMudG9Mb3dlckNhc2UoKSBhcyBXb3JrbG9hZFN0YXR1c0VudW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2RJUHMocG9kOiBQb2QpIHtcbiAgY29uc3QgcG9kSVBzID0gcG9kLnN0YXR1cy5wb2RJUHM/Lm1hcCgoeyBpcCB9KSA9PiBpcCk7XG4gIHJldHVybiBwb2RJUHM/Lmxlbmd0aCA/IHBvZElQcyA6IFtwb2Quc3RhdHVzLnBvZElQXS5maWx0ZXIoQm9vbGVhbik7XG59XG4iXX0=
|