@rancher/shell 0.5.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/data/aws-regions.json +9 -0
- package/assets/images/vendor/openid.svg +18 -0
- package/assets/styles/app.scss +1 -2
- package/assets/styles/fonts/_icons.scss +3 -3
- package/assets/styles/global/_columns.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +2 -0
- package/assets/styles/themes/_csp.scss +2 -2
- package/assets/styles/themes/_dark.scss +8 -2
- package/assets/styles/themes/_light.scss +2 -1
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +5 -0
- package/assets/translations/en-us.yaml +296 -58
- package/assets/translations/zh-hans.yaml +5 -27
- package/babel.config.js +1 -1
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/monitoring/grafana/index.vue +6 -2
- package/chart/monitoring/prometheus/index.vue +2 -2
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +15 -5
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +18 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +14 -8
- package/components/Certificates.vue +8 -11
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +44 -16
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +73 -38
- package/components/CommunityLinks.vue +12 -8
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +51 -27
- package/components/DetailTop.vue +2 -2
- package/components/Dialog.vue +6 -5
- package/components/DisableAuthProviderModal.vue +14 -8
- package/components/DraggableZone.vue +2 -2
- package/components/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +6 -6
- package/components/FixedBanner.vue +47 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- package/components/MessageLink.vue +2 -2
- package/components/ModalWithCard.vue +5 -8
- package/components/MoveModal.vue +35 -33
- package/components/PodSecurityAdmission.vue +3 -3
- package/components/PromptChangePassword.vue +33 -33
- package/components/PromptModal.vue +11 -21
- package/components/PromptRemove.vue +11 -17
- package/components/PromptRestore.vue +18 -16
- package/components/Questions/__tests__/Boolean.test.ts +9 -19
- package/components/Questions/__tests__/Float.test.ts +9 -19
- package/components/Questions/__tests__/Int.test.ts +9 -19
- package/components/Questions/__tests__/String.test.ts +9 -19
- package/components/Questions/__tests__/Yaml.test.ts +9 -20
- package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
- package/components/Questions/index.vue +18 -2
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +23 -7
- package/components/ResourceDetail/index.vue +5 -0
- package/components/ResourceList/Masthead.vue +28 -10
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +73 -19
- package/components/ResourceYaml.vue +1 -0
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +15 -37
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +26 -12
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +142 -42
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/TabTitle.vue +84 -0
- package/components/Tabbed/index.vue +6 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.vue +1 -0
- package/components/__tests__/AppModal.test.ts +98 -0
- package/components/__tests__/AsyncButton.test.ts +1 -3
- package/components/__tests__/BackLink.test.ts +1 -1
- package/components/__tests__/ButtonGroup.test.ts +3 -6
- package/components/__tests__/Carousel.test.ts +43 -0
- package/components/__tests__/Certificates.test.ts +29 -0
- package/components/__tests__/{CodeMirror.spec.ts → CodeMirror.test.ts} +5 -17
- package/components/__tests__/CruResource.test.ts +10 -9
- package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
- package/components/__tests__/FixedBanner.test.ts +5 -20
- package/components/__tests__/NamespaceFilter.test.ts +9 -18
- package/components/__tests__/TabTitle.test.ts +129 -0
- package/components/auth/AzureWarning.vue +2 -2
- package/components/auth/RoleDetailEdit.vue +10 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/oidc.vue +7 -1
- package/components/fleet/FleetClusters.vue +9 -9
- package/components/fleet/FleetIntro.vue +11 -17
- package/components/fleet/FleetNoWorkspaces.vue +2 -2
- package/components/fleet/FleetRepos.vue +1 -0
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/form/ArrayList.vue +30 -19
- package/components/form/ArrayListSelect.vue +9 -4
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +67 -48
- package/components/form/LabeledSelect.vue +143 -43
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- package/components/form/ResourceLabeledSelect.vue +187 -0
- package/components/form/ResourceTabs/index.vue +31 -15
- package/components/form/SecretSelector.vue +93 -18
- package/components/form/Select.vue +1 -1
- package/components/form/SelectOrCreateAuthSecret.vue +135 -62
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +121 -12
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/NameNsDescription.test.ts +25 -15
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
- package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
- package/components/formatter/AppSummaryGraph.vue +2 -2
- package/components/formatter/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/FleetSummaryGraph.vue +2 -1
- package/components/formatter/ImagePercentageBar.vue +0 -4
- package/components/formatter/IngressTarget.vue +18 -7
- package/components/formatter/Link.vue +2 -2
- package/components/formatter/LinkDetail.vue +2 -2
- package/components/formatter/LinkDetailImage.vue +2 -2
- package/components/formatter/LinkName.vue +2 -2
- package/components/formatter/LiveDate.vue +16 -0
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/nav/Group.vue +7 -5
- package/components/nav/Header.vue +82 -43
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +336 -125
- package/components/nav/Type.vue +58 -102
- package/components/nav/__tests__/TopLevelMenu.test.ts +370 -9
- package/components/nav/__tests__/Type.test.ts +321 -126
- package/components/nuxt/nuxt-child.js +0 -5
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/components/templates/default.vue +3 -3
- package/components/templates/error.vue +6 -10
- package/components/templates/standalone.vue +0 -4
- package/components/templates/unauthenticated.vue +1 -2
- package/components/user.retention/user-retention-header.vue +34 -0
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +2 -2
- package/composables/useI18n.ts +26 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useStore.ts +16 -0
- package/config/home-links.js +32 -1
- package/config/labels-annotations.js +2 -1
- package/config/middleware.js +0 -6
- package/config/pagination-table-headers.js +57 -0
- package/config/pod-security-admission.ts +1 -1
- package/config/private-label.js +1 -3
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +167 -46
- package/config/product/legacy.js +3 -95
- package/config/product/manager.js +44 -11
- package/config/query-params.js +1 -0
- package/config/roles.ts +23 -0
- package/config/router/index.js +23 -0
- package/config/router/navigation-guards/attempt-first-login.js +73 -0
- package/config/router/navigation-guards/authentication.js +63 -0
- package/config/router/navigation-guards/index.js +15 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +38 -2
- package/config/store.js +7 -3
- package/config/table-headers.js +46 -1
- package/config/types.js +36 -16
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +1 -1
- package/core/plugin.ts +2 -1
- package/core/plugins.js +289 -282
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.vscode/settings.json +0 -1
- package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
- package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
- package/creators/pkg/init +32 -0
- package/detail/__tests__/service.test.ts +62 -0
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +14 -3
- package/detail/fleet.cattle.io.gitrepo.vue +15 -9
- package/detail/namespace.vue +2 -2
- package/detail/networking.k8s.io.ingress.vue +52 -19
- package/detail/node.vue +20 -43
- package/detail/pod.vue +1 -68
- package/detail/provisioning.cattle.io.cluster.vue +2 -1
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +2 -15
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +118 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- package/directives/clean-html.js +15 -0
- package/directives/clean-tooltip.js +32 -0
- package/directives/focus.js +41 -0
- package/directives/int-number.js +21 -0
- package/directives/positive-int-number.js +19 -0
- package/directives/trim-whitespace.js +19 -0
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
- package/edit/__tests__/kontainerDriver.test.ts +107 -0
- package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
- package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
- package/edit/__tests__/nodeDriver.test.ts +107 -0
- package/edit/__tests__/service.test.ts +1 -5
- package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
- package/edit/auth/AuthProviderWarningBanners.vue +34 -0
- package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
- package/edit/auth/__tests__/azuread.test.ts +241 -0
- package/edit/auth/__tests__/oidc.test.ts +137 -0
- package/edit/auth/azuread.vue +133 -31
- package/edit/auth/github.vue +5 -17
- package/edit/auth/googleoauth.vue +5 -18
- package/edit/auth/ldap/index.vue +5 -17
- package/edit/auth/oidc.vue +143 -42
- package/edit/auth/saml.vue +5 -14
- package/edit/catalog.cattle.io.clusterrepo.vue +175 -20
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +26 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +7 -4
- package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
- package/edit/kontainerDriver.vue +65 -0
- package/edit/logging-flow/Match.vue +10 -9
- package/edit/logging-flow/index.vue +4 -19
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
- package/edit/logging.banzaicloud.io.output/index.vue +43 -26
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
- package/edit/management.cattle.io.project.vue +2 -1
- package/edit/management.cattle.io.setting.vue +20 -0
- package/edit/management.cattle.io.user.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +1 -0
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -0
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -0
- package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
- package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
- package/edit/networking.k8s.io.ingress/index.vue +64 -8
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +45 -6
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/selectors.test.ts +1 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
- package/edit/nodeDriver.vue +65 -0
- package/edit/persistentvolume/index.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +18 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +165 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +0 -3
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +70 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +5 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +21 -15
- package/edit/provisioning.cattle.io.cluster/rke2.vue +185 -114
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +67 -7
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +19 -6
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +7 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +1 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/mixins/workload.js +34 -1
- package/edit/workload/storage/emptyDir.vue +2 -2
- package/initialize/App.vue +75 -0
- package/initialize/app-extended.js +128 -0
- package/initialize/entry-helpers.js +549 -0
- package/initialize/entry.js +32 -0
- package/initialize/install-components.js +23 -0
- package/initialize/install-directives.js +59 -0
- package/initialize/install-plugins.js +123 -0
- package/list/__tests__/workload.test.ts +1 -1
- package/list/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +11 -7
- package/list/management.cattle.io.user.vue +36 -3
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +211 -73
- package/list/provisioning.cattle.io.cluster.vue +17 -4
- package/list/ui.cattle.io.navlink.vue +2 -2
- package/list/workload.vue +22 -0
- package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +162 -59
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +38 -21
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +20 -11
- package/middleware/authenticated.js +9 -361
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +3 -2
- package/mixins/brand.js +75 -57
- package/mixins/chart.js +27 -13
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/fetch.client.js +42 -48
- package/mixins/labeled-form-element.ts +21 -1
- package/mixins/page-actions.js +7 -5
- package/mixins/resource-fetch-api-pagination.js +304 -0
- package/mixins/resource-fetch-namespaced.js +1 -1
- package/mixins/resource-fetch.js +46 -5
- package/models/__tests__/cluster.test.ts +44 -0
- package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
- package/models/__tests__/schema.tests.ts +24 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/workload.test.ts +1 -1
- package/models/catalog.cattle.io.app.js +8 -0
- package/models/catalog.cattle.io.clusterrepo.js +9 -1
- package/models/catalog.cattle.io.uiplugin.js +7 -8
- package/models/cis.cattle.io.clusterscan.js +29 -8
- package/models/cloudcredential.js +9 -1
- package/models/cluster/node.js +4 -0
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/driver.js +62 -0
- package/models/fleet.cattle.io.cluster.js +23 -11
- package/models/fleet.cattle.io.gitrepo.js +10 -0
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +68 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +5 -4
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.user.js +67 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +68 -0
- package/models/provisioning.cattle.io.cluster.js +34 -1
- package/models/schema.js +28 -7
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/workload.js +1 -0
- package/package.json +6 -5
- package/pages/about.vue +12 -5
- package/pages/account/index.vue +7 -2
- package/pages/auth/login.vue +106 -102
- package/pages/auth/logout.vue +2 -2
- package/pages/auth/setup.vue +57 -64
- package/pages/auth/verify.vue +17 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +37 -13
- package/pages/c/_cluster/apps/charts/install.vue +4 -4
- package/pages/c/_cluster/auth/config/_id.vue +0 -6
- package/pages/c/_cluster/auth/config/index.vue +15 -9
- package/pages/c/_cluster/auth/roles/index.vue +8 -10
- package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
- package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
- package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
- package/pages/c/_cluster/explorer/index.vue +231 -72
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +12 -176
- package/pages/c/_cluster/fleet/index.vue +88 -93
- package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
- package/pages/c/_cluster/longhorn/index.vue +52 -17
- package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
- package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +94 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +63 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- package/pages/c/_cluster/monitoring/index.vue +1 -17
- package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -0
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
- package/pages/c/_cluster/settings/banners.vue +86 -8
- package/pages/c/_cluster/settings/brand.vue +258 -36
- package/pages/c/_cluster/settings/index.vue +4 -4
- package/pages/c/_cluster/settings/links.vue +5 -3
- package/pages/c/_cluster/settings/performance.vue +71 -2
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +10 -7
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
- package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
- package/pages/c/_cluster/uiplugins/index.vue +38 -52
- package/pages/diagnostic.vue +1 -0
- package/pages/fail-whale.vue +103 -41
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -3
- package/pages/support/index.vue +12 -2
- package/plugins/clean-html-directive.js +5 -12
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror.js +0 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +296 -313
- package/plugins/dashboard-store/actions.js +140 -32
- package/plugins/dashboard-store/getters.js +86 -39
- package/plugins/dashboard-store/index.js +0 -99
- package/plugins/dashboard-store/mutations.js +150 -48
- package/plugins/dashboard-store/resource-class.js +14 -109
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +90 -56
- package/plugins/int-number.js +6 -20
- package/plugins/plugin.js +3 -3
- package/plugins/positive-int-number.js +6 -17
- package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +124 -31
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +0 -1
- package/plugins/steve/getters.js +183 -63
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +29 -5
- package/plugins/steve/norman-class.js +123 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +37 -75
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/public/index.html +1 -0
- package/rancher-components/Accordion/Accordion.vue +3 -2
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.test.ts +1 -5
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +4 -4
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +66 -30
- package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.vue +8 -8
- package/rancher-components/components/Accordion/Accordion.vue +3 -2
- package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/components/Banner/Banner.test.ts +1 -5
- package/rancher-components/components/Banner/Banner.vue +2 -2
- package/rancher-components/components/Card/Card.vue +4 -4
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +1 -1
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +66 -30
- package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/components/StringList/StringList.vue +8 -8
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +27 -8
- package/scripts/clean +1 -1
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/package/Dockerfile +1 -1
- package/scripts/extension/helm/scripts/patch +27 -0
- package/scripts/extension/publish +6 -6
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +6 -6
- package/scripts/vue-migrate.js +683 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +21 -5
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +6 -4
- package/store/index.js +132 -39
- package/store/plugins.js +8 -4
- package/store/type-map.js +143 -143
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +0 -1
- package/tsconfig.paths.json +4 -1
- package/types/components/labeledSelect.ts +50 -0
- package/types/resources/settings.d.ts +32 -0
- package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
- package/types/shell/index.d.ts +996 -782
- package/types/store/dashboard-store.types.ts +42 -0
- package/types/store/pagination.types.ts +457 -0
- package/types/store/type-map.ts +30 -0
- package/types/store/vuex.d.ts +9 -0
- package/types/vue-shim.d.ts +51 -0
- package/utils/__tests__/cluster.test.ts +20 -18
- package/utils/__tests__/create-yaml.test.ts +359 -2
- package/utils/__tests__/kontainer.test.ts +92 -0
- package/utils/__tests__/pod-security-admission.test.ts +1 -1
- package/utils/alertmanagerconfig.js +19 -0
- package/utils/array.ts +40 -1
- package/utils/async.ts +2 -0
- package/utils/auth.js +152 -4
- package/utils/axios.js +2 -2
- package/utils/banners.js +103 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +54 -27
- package/utils/error.js +25 -0
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +186 -0
- package/utils/monitoring.js +2 -37
- package/utils/pagination-utils.ts +154 -0
- package/utils/pod-security-admission.ts +1 -1
- package/utils/router.js +86 -0
- package/utils/settings.ts +46 -0
- package/utils/socket.js +1 -0
- package/utils/time.js +1 -0
- package/utils/title.ts +3 -0
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/validators/formRules/__tests__/index.test.ts +21 -0
- package/utils/validators/formRules/index.ts +3 -0
- package/utils/validators/index.js +1 -0
- package/vue.config.js +376 -421
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/chart/monitoring/steps/uninstall-v1.vue +0 -135
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -425
- package/initialize/App.js +0 -152
- package/initialize/client.js +0 -734
- package/initialize/index.js +0 -287
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/v1-workload-metrics.js +0 -43
- package/pages/c/_cluster/apps/index.vue +0 -15
- package/pages/c/_cluster/auth/index.vue +0 -17
- package/pages/c/_cluster/index.vue +0 -15
- package/pages/c/_cluster/legacy/index.vue +0 -22
- package/pages/c/_cluster/manager/index.vue +0 -22
- package/pages/c/_cluster/mcapps/index.vue +0 -21
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
- package/plugins/dashboard-store/rehydrate-all.js +0 -44
- package/plugins/index.js +0 -11
- package/plugins/portal-vue.js +0 -4
- package/plugins/portal.js +0 -4
- package/plugins/resize.js +0 -5
- package/plugins/shortkey.js +0 -4
- package/plugins/tooltip.js +0 -4
- package/plugins/v-select.js +0 -4
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -638
- package/utils/router.scrollBehavior.js +0 -78
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/plugins/steve/__tests__/{steve-class.spec.ts → steve-class.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
package/utils/nuxt.js
DELETED
|
@@ -1,638 +0,0 @@
|
|
|
1
|
-
import Vue from 'vue';
|
|
2
|
-
import {
|
|
3
|
-
isSamePath as _isSamePath, joinURL, normalizeURL, withQuery, withoutTrailingSlash
|
|
4
|
-
} from 'ufo';
|
|
5
|
-
|
|
6
|
-
// window.{{globals.loadedCallback}} hook
|
|
7
|
-
// Useful for jsdom testing or plugins (https://github.com/tmpvar/jsdom#dealing-with-asynchronous-script-loading)
|
|
8
|
-
window.onNuxtReadyCbs = [];
|
|
9
|
-
window.onNuxtReady = (cb) => {
|
|
10
|
-
window.onNuxtReadyCbs.push(cb);
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export function createGetCounter(counterObject, defaultKey = '') {
|
|
14
|
-
return function getCounter(id = defaultKey) {
|
|
15
|
-
if (counterObject[id] === undefined) {
|
|
16
|
-
counterObject[id] = 0;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return counterObject[id]++;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function empty() {}
|
|
24
|
-
|
|
25
|
-
export function globalHandleError(error) {
|
|
26
|
-
if (Vue.config.errorHandler) {
|
|
27
|
-
Vue.config.errorHandler(error);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function interopDefault(promise) {
|
|
32
|
-
return promise.then((m) => m.default || m);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function hasFetch(vm) {
|
|
36
|
-
return vm.$options && typeof vm.$options.fetch === 'function' && !vm.$options.fetch.length;
|
|
37
|
-
}
|
|
38
|
-
export function purifyData(data) {
|
|
39
|
-
if (process.env.NODE_ENV === 'production') {
|
|
40
|
-
return data;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return Object.entries(data).filter(
|
|
44
|
-
([key, value]) => {
|
|
45
|
-
const valid = !(value instanceof Function) && !(value instanceof Promise);
|
|
46
|
-
|
|
47
|
-
if (!valid) {
|
|
48
|
-
console.warn(`${ key } is not able to be stringified. This will break in a production environment.`); // eslint-disable-line no-console
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return valid;
|
|
52
|
-
}
|
|
53
|
-
).reduce((obj, [key, value]) => {
|
|
54
|
-
obj[key] = value;
|
|
55
|
-
|
|
56
|
-
return obj;
|
|
57
|
-
}, {});
|
|
58
|
-
}
|
|
59
|
-
export function getChildrenComponentInstancesUsingFetch(vm, instances = []) {
|
|
60
|
-
const children = vm.$children || [];
|
|
61
|
-
|
|
62
|
-
for (const child of children) {
|
|
63
|
-
if (child.$fetch) {
|
|
64
|
-
instances.push(child);
|
|
65
|
-
continue; // Don't get the children since it will reload the template
|
|
66
|
-
}
|
|
67
|
-
if (child.$children) {
|
|
68
|
-
getChildrenComponentInstancesUsingFetch(child, instances);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return instances;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function applyAsyncData(Component, asyncData) {
|
|
76
|
-
if (
|
|
77
|
-
// For SSR, we once all this function without second param to just apply asyncData
|
|
78
|
-
// Prevent doing this for each SSR request
|
|
79
|
-
!asyncData && Component.options.__hasNuxtData
|
|
80
|
-
) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const ComponentData = Component.options._originDataFn || Component.options.data || function() {
|
|
85
|
-
return {};
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
Component.options._originDataFn = ComponentData;
|
|
89
|
-
|
|
90
|
-
Component.options.data = function() {
|
|
91
|
-
const data = ComponentData.call(this, this);
|
|
92
|
-
|
|
93
|
-
return { ...data, ...asyncData };
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
Component.options.__hasNuxtData = true;
|
|
97
|
-
|
|
98
|
-
if (Component._Ctor && Component._Ctor.options) {
|
|
99
|
-
Component._Ctor.options.data = Component.options.data;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export function sanitizeComponent(Component) {
|
|
104
|
-
// If Component already sanitized
|
|
105
|
-
if (Component.options && Component._Ctor === Component) {
|
|
106
|
-
return Component;
|
|
107
|
-
}
|
|
108
|
-
if (!Component.options) {
|
|
109
|
-
Component = Vue.extend(Component); // fix issue #6
|
|
110
|
-
Component._Ctor = Component;
|
|
111
|
-
} else {
|
|
112
|
-
Component._Ctor = Component;
|
|
113
|
-
Component.extendOptions = Component.options;
|
|
114
|
-
}
|
|
115
|
-
// If no component name defined, set file path as name, (also fixes #5703)
|
|
116
|
-
if (!Component.options.name && Component.options.__file) {
|
|
117
|
-
Component.options.name = Component.options.__file;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return Component;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function getMatchedComponents(route, matches = false, prop = 'components') {
|
|
124
|
-
return Array.prototype.concat.apply([], route.matched.map((m, index) => {
|
|
125
|
-
return Object.keys(m[prop]).map((key) => {
|
|
126
|
-
matches && matches.push(index);
|
|
127
|
-
|
|
128
|
-
return m[prop][key];
|
|
129
|
-
});
|
|
130
|
-
}));
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export function getMatchedComponentsInstances(route, matches = false) {
|
|
134
|
-
return getMatchedComponents(route, matches, 'instances');
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export function flatMapComponents(route, fn) {
|
|
138
|
-
return Array.prototype.concat.apply([], route.matched.map((m, index) => {
|
|
139
|
-
return Object.keys(m.components).reduce((promises, key) => {
|
|
140
|
-
if (m.components[key]) {
|
|
141
|
-
promises.push(fn(m.components[key], m.instances[key], m, key, index));
|
|
142
|
-
} else {
|
|
143
|
-
delete m.components[key];
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return promises;
|
|
147
|
-
}, []);
|
|
148
|
-
}));
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export function resolveRouteComponents(route, fn) {
|
|
152
|
-
return Promise.all(
|
|
153
|
-
flatMapComponents(route, async(Component, instance, match, key) => {
|
|
154
|
-
// If component is a function, resolve it
|
|
155
|
-
if (typeof Component === 'function' && !Component.options) {
|
|
156
|
-
try {
|
|
157
|
-
Component = await Component();
|
|
158
|
-
} catch (error) {
|
|
159
|
-
// Handle webpack chunk loading errors
|
|
160
|
-
// This may be due to a new deployment or a network problem
|
|
161
|
-
if (
|
|
162
|
-
error &&
|
|
163
|
-
error.name === 'ChunkLoadError' &&
|
|
164
|
-
typeof window !== 'undefined' &&
|
|
165
|
-
window.sessionStorage
|
|
166
|
-
) {
|
|
167
|
-
const timeNow = Date.now();
|
|
168
|
-
const previousReloadTime = parseInt(window.sessionStorage.getItem('nuxt-reload'));
|
|
169
|
-
|
|
170
|
-
// check for previous reload time not to reload infinitely
|
|
171
|
-
if (!previousReloadTime || previousReloadTime + 60000 < timeNow) {
|
|
172
|
-
window.sessionStorage.setItem('nuxt-reload', timeNow);
|
|
173
|
-
window.location.reload(true /* skip cache */);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
throw error;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
match.components[key] = Component = sanitizeComponent(Component);
|
|
181
|
-
|
|
182
|
-
return typeof fn === 'function' ? fn(Component, instance, match, key) : Component;
|
|
183
|
-
})
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export async function getRouteData(route) {
|
|
188
|
-
if (!route) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
// Make sure the components are resolved (code-splitting)
|
|
192
|
-
await resolveRouteComponents(route);
|
|
193
|
-
|
|
194
|
-
// Send back a copy of route with meta based on Component definition
|
|
195
|
-
return {
|
|
196
|
-
...route,
|
|
197
|
-
meta: getMatchedComponents(route).map((Component, index) => {
|
|
198
|
-
return { ...Component.options.meta, ...(route.matched[index] || {}).meta };
|
|
199
|
-
})
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
export async function setContext(app, context) {
|
|
204
|
-
// If context not defined, create it
|
|
205
|
-
if (!app.context) {
|
|
206
|
-
app.context = {
|
|
207
|
-
isDev: true,
|
|
208
|
-
isHMR: false,
|
|
209
|
-
app,
|
|
210
|
-
store: app.store,
|
|
211
|
-
payload: context.payload,
|
|
212
|
-
error: context.error,
|
|
213
|
-
base: app.router.options.base,
|
|
214
|
-
env: {
|
|
215
|
-
commit: 'head', version: '0.1.2', dev: true, pl: 1, perfTest: false, rancherEnv: 'web', api: 'http://localhost:8989'
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
// Only set once
|
|
219
|
-
|
|
220
|
-
if (context.req) {
|
|
221
|
-
app.context.req = context.req;
|
|
222
|
-
}
|
|
223
|
-
if (context.res) {
|
|
224
|
-
app.context.res = context.res;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
app.context.redirect = (status, path, query) => {
|
|
228
|
-
if (!status) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
app.context._redirected = true;
|
|
232
|
-
// if only 1 or 2 arguments: redirect('/') or redirect('/', { foo: 'bar' })
|
|
233
|
-
let pathType = typeof path;
|
|
234
|
-
|
|
235
|
-
if (typeof status !== 'number' && (pathType === 'undefined' || pathType === 'object')) {
|
|
236
|
-
query = path || {};
|
|
237
|
-
path = status;
|
|
238
|
-
pathType = typeof path;
|
|
239
|
-
status = 302;
|
|
240
|
-
}
|
|
241
|
-
if (pathType === 'object') {
|
|
242
|
-
path = app.router.resolve(path).route.fullPath;
|
|
243
|
-
}
|
|
244
|
-
// "/absolute/route", "./relative/route" or "../relative/route"
|
|
245
|
-
if (/(^[.]{1,2}\/)|(^\/(?!\/))/.test(path)) {
|
|
246
|
-
app.context.next({
|
|
247
|
-
path,
|
|
248
|
-
query,
|
|
249
|
-
status
|
|
250
|
-
});
|
|
251
|
-
} else {
|
|
252
|
-
path = withQuery(path, query);
|
|
253
|
-
|
|
254
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/Location/replace
|
|
255
|
-
window.location.replace(path);
|
|
256
|
-
|
|
257
|
-
// Throw a redirect error
|
|
258
|
-
throw new Error('ERR_REDIRECT');
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
app.context.nuxtState = window.__NUXT__;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// Dynamic keys
|
|
266
|
-
const [currentRouteData, fromRouteData] = await Promise.all([
|
|
267
|
-
getRouteData(context.route),
|
|
268
|
-
getRouteData(context.from)
|
|
269
|
-
]);
|
|
270
|
-
|
|
271
|
-
if (context.route) {
|
|
272
|
-
app.context.route = currentRouteData;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
if (context.from) {
|
|
276
|
-
app.context.from = fromRouteData;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
app.context.next = context.next;
|
|
280
|
-
app.context._redirected = false;
|
|
281
|
-
app.context._errored = false;
|
|
282
|
-
app.context.isHMR = Boolean(context.isHMR);
|
|
283
|
-
app.context.params = app.context.route.params || {};
|
|
284
|
-
app.context.query = app.context.route.query || {};
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
export function middlewareSeries(promises, appContext) {
|
|
288
|
-
if (!promises.length || appContext._redirected || appContext._errored) {
|
|
289
|
-
return Promise.resolve();
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
return promisify(promises[0], appContext)
|
|
293
|
-
.then(() => {
|
|
294
|
-
return middlewareSeries(promises.slice(1), appContext);
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
export function promisify(fn, context) {
|
|
299
|
-
let promise;
|
|
300
|
-
|
|
301
|
-
if (fn.length === 2) {
|
|
302
|
-
console.warn('Callback-based asyncData, fetch or middleware calls are deprecated. Please switch to promises or async/await syntax'); // eslint-disable-line no-console
|
|
303
|
-
|
|
304
|
-
// fn(context, callback)
|
|
305
|
-
promise = new Promise((resolve) => {
|
|
306
|
-
fn(context, (err, data) => {
|
|
307
|
-
if (err) {
|
|
308
|
-
context.error(err);
|
|
309
|
-
}
|
|
310
|
-
data = data || {};
|
|
311
|
-
resolve(data);
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
} else {
|
|
315
|
-
promise = fn(context);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
if (promise && promise instanceof Promise && typeof promise.then === 'function') {
|
|
319
|
-
return promise;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
return Promise.resolve(promise);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// Imported from vue-router
|
|
326
|
-
export function getLocation(base, mode) {
|
|
327
|
-
if (mode === 'hash') {
|
|
328
|
-
return window.location.hash.replace(/^#\//, '');
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
base = decodeURI(base).slice(0, -1); // consideration is base is normalized with trailing slash
|
|
332
|
-
let path = decodeURI(window.location.pathname);
|
|
333
|
-
|
|
334
|
-
if (base && path.startsWith(base)) {
|
|
335
|
-
path = path.slice(base.length);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
const fullPath = (path || '/') + window.location.search + window.location.hash;
|
|
339
|
-
|
|
340
|
-
return normalizeURL(fullPath);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Imported from path-to-regexp
|
|
344
|
-
|
|
345
|
-
/**
|
|
346
|
-
* Compile a string to a template function for the path.
|
|
347
|
-
*
|
|
348
|
-
* @param {string} str
|
|
349
|
-
* @param {Object=} options
|
|
350
|
-
* @return {!function(Object=, Object=)}
|
|
351
|
-
*/
|
|
352
|
-
export function compile(str, options) {
|
|
353
|
-
return tokensToFunction(parse(str, options), options);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
export function getQueryDiff(toQuery, fromQuery) {
|
|
357
|
-
const diff = {};
|
|
358
|
-
const queries = { ...toQuery, ...fromQuery };
|
|
359
|
-
|
|
360
|
-
for (const k in queries) {
|
|
361
|
-
if (String(toQuery[k]) !== String(fromQuery[k])) {
|
|
362
|
-
diff[k] = true;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
return diff;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
export function normalizeError(err) {
|
|
370
|
-
let message;
|
|
371
|
-
|
|
372
|
-
if (!(err.message || typeof err === 'string')) {
|
|
373
|
-
try {
|
|
374
|
-
message = JSON.stringify(err, null, 2);
|
|
375
|
-
} catch (e) {
|
|
376
|
-
message = `[${ err.constructor.name }]`;
|
|
377
|
-
}
|
|
378
|
-
} else {
|
|
379
|
-
message = err.message || err;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
return {
|
|
383
|
-
...err,
|
|
384
|
-
message,
|
|
385
|
-
statusCode: (err.statusCode || err.status || (err.response && err.response.status) || 500)
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
* The main path matching regexp utility.
|
|
391
|
-
*
|
|
392
|
-
* @type {RegExp}
|
|
393
|
-
*/
|
|
394
|
-
const PATH_REGEXP = new RegExp([
|
|
395
|
-
// Match escaped characters that would otherwise appear in future matches.
|
|
396
|
-
// This allows the user to escape special characters that won't transform.
|
|
397
|
-
'(\\\\.)',
|
|
398
|
-
// Match Express-style parameters and un-named parameters with a prefix
|
|
399
|
-
// and optional suffixes. Matches appear as:
|
|
400
|
-
//
|
|
401
|
-
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
|
|
402
|
-
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined]
|
|
403
|
-
// "/*" => ["/", undefined, undefined, undefined, undefined, "*"]
|
|
404
|
-
'([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
|
|
405
|
-
].join('|'), 'g');
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Parse a string for the raw tokens.
|
|
409
|
-
*
|
|
410
|
-
* @param {string} str
|
|
411
|
-
* @param {Object=} options
|
|
412
|
-
* @return {!Array}
|
|
413
|
-
*/
|
|
414
|
-
function parse(str, options) {
|
|
415
|
-
const tokens = [];
|
|
416
|
-
let key = 0;
|
|
417
|
-
let index = 0;
|
|
418
|
-
let path = '';
|
|
419
|
-
const defaultDelimiter = (options && options.delimiter) || '/';
|
|
420
|
-
let res;
|
|
421
|
-
|
|
422
|
-
while ((res = PATH_REGEXP.exec(str)) !== null) {
|
|
423
|
-
const m = res[0];
|
|
424
|
-
const escaped = res[1];
|
|
425
|
-
const offset = res.index;
|
|
426
|
-
|
|
427
|
-
path += str.slice(index, offset);
|
|
428
|
-
index = offset + m.length;
|
|
429
|
-
|
|
430
|
-
// Ignore already escaped sequences.
|
|
431
|
-
if (escaped) {
|
|
432
|
-
path += escaped[1];
|
|
433
|
-
continue;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
const next = str[index];
|
|
437
|
-
const prefix = res[2];
|
|
438
|
-
const name = res[3];
|
|
439
|
-
const capture = res[4];
|
|
440
|
-
const group = res[5];
|
|
441
|
-
const modifier = res[6];
|
|
442
|
-
const asterisk = res[7];
|
|
443
|
-
|
|
444
|
-
// Push the current path onto the tokens.
|
|
445
|
-
if (path) {
|
|
446
|
-
tokens.push(path);
|
|
447
|
-
path = '';
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
const partial = prefix !== null && next !== null && next !== prefix;
|
|
451
|
-
const repeat = modifier === '+' || modifier === '*';
|
|
452
|
-
const optional = modifier === '?' || modifier === '*';
|
|
453
|
-
const delimiter = res[2] || defaultDelimiter;
|
|
454
|
-
const pattern = capture || group;
|
|
455
|
-
|
|
456
|
-
tokens.push({
|
|
457
|
-
name: name || key++,
|
|
458
|
-
prefix: prefix || '',
|
|
459
|
-
delimiter,
|
|
460
|
-
optional,
|
|
461
|
-
repeat,
|
|
462
|
-
partial,
|
|
463
|
-
asterisk: Boolean(asterisk),
|
|
464
|
-
pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : `[^${ escapeString(delimiter) }]+?`)
|
|
465
|
-
});
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
// Match any characters still remaining.
|
|
469
|
-
if (index < str.length) {
|
|
470
|
-
path += str.substr(index);
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
// If the path exists, push it onto the end.
|
|
474
|
-
if (path) {
|
|
475
|
-
tokens.push(path);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
return tokens;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* Prettier encoding of URI path segments.
|
|
483
|
-
*
|
|
484
|
-
* @param {string}
|
|
485
|
-
* @return {string}
|
|
486
|
-
*/
|
|
487
|
-
function encodeURIComponentPretty(str, slashAllowed) {
|
|
488
|
-
const re = slashAllowed ? /[?#]/g : /[/?#]/g;
|
|
489
|
-
|
|
490
|
-
return encodeURI(str).replace(re, (c) => {
|
|
491
|
-
return `%${ c.charCodeAt(0).toString(16).toUpperCase() }`;
|
|
492
|
-
});
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
/**
|
|
496
|
-
* Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
|
|
497
|
-
*
|
|
498
|
-
* @param {string}
|
|
499
|
-
* @return {string}
|
|
500
|
-
*/
|
|
501
|
-
function encodeAsterisk(str) {
|
|
502
|
-
return encodeURIComponentPretty(str, true);
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
/**
|
|
506
|
-
* Escape a regular expression string.
|
|
507
|
-
*
|
|
508
|
-
* @param {string} str
|
|
509
|
-
* @return {string}
|
|
510
|
-
*/
|
|
511
|
-
function escapeString(str) {
|
|
512
|
-
return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
/**
|
|
516
|
-
* Escape the capturing group by escaping special characters and meaning.
|
|
517
|
-
*
|
|
518
|
-
* @param {string} group
|
|
519
|
-
* @return {string}
|
|
520
|
-
*/
|
|
521
|
-
function escapeGroup(group) {
|
|
522
|
-
return group.replace(/([=!:$/()])/g, '\\$1');
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
/**
|
|
526
|
-
* Expose a method for transforming tokens into the path function.
|
|
527
|
-
*/
|
|
528
|
-
function tokensToFunction(tokens, options) {
|
|
529
|
-
// Compile all the tokens into regexps.
|
|
530
|
-
const matches = new Array(tokens.length);
|
|
531
|
-
|
|
532
|
-
// Compile all the patterns before compilation.
|
|
533
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
534
|
-
if (typeof tokens[i] === 'object') {
|
|
535
|
-
matches[i] = new RegExp(`^(?:${ tokens[i].pattern })$`, flags(options));
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
return function(obj, opts) {
|
|
540
|
-
let path = '';
|
|
541
|
-
const data = obj || {};
|
|
542
|
-
const options = opts || {};
|
|
543
|
-
const encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;
|
|
544
|
-
|
|
545
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
546
|
-
const token = tokens[i];
|
|
547
|
-
|
|
548
|
-
if (typeof token === 'string') {
|
|
549
|
-
path += token;
|
|
550
|
-
|
|
551
|
-
continue;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
const value = data[token.name || 'pathMatch'];
|
|
555
|
-
let segment;
|
|
556
|
-
|
|
557
|
-
if (value === null) {
|
|
558
|
-
if (token.optional) {
|
|
559
|
-
// Prepend partial segment prefixes.
|
|
560
|
-
if (token.partial) {
|
|
561
|
-
path += token.prefix;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
continue;
|
|
565
|
-
} else {
|
|
566
|
-
throw new TypeError(`Expected "${ token.name }" to be defined`);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
if (Array.isArray(value)) {
|
|
571
|
-
if (!token.repeat) {
|
|
572
|
-
throw new TypeError(`Expected "${ token.name }" to not repeat, but received \`${ JSON.stringify(value) }\``);
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
if (value.length === 0) {
|
|
576
|
-
if (token.optional) {
|
|
577
|
-
continue;
|
|
578
|
-
} else {
|
|
579
|
-
throw new TypeError(`Expected "${ token.name }" to not be empty`);
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
for (let j = 0; j < value.length; j++) {
|
|
584
|
-
segment = encode(value[j]);
|
|
585
|
-
|
|
586
|
-
if (!matches[i].test(segment)) {
|
|
587
|
-
throw new TypeError(`Expected all "${ token.name }" to match "${ token.pattern }", but received \`${ JSON.stringify(segment) }\``);
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
path += (j === 0 ? token.prefix : token.delimiter) + segment;
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
continue;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
segment = token.asterisk ? encodeAsterisk(value) : encode(value);
|
|
597
|
-
|
|
598
|
-
if (!matches[i].test(segment)) {
|
|
599
|
-
throw new TypeError(`Expected "${ token.name }" to match "${ token.pattern }", but received "${ segment }"`);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
path += token.prefix + segment;
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
return path;
|
|
606
|
-
};
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
/**
|
|
610
|
-
* Get the flags for a regexp from the options.
|
|
611
|
-
*
|
|
612
|
-
* @param {Object} options
|
|
613
|
-
* @return {string}
|
|
614
|
-
*/
|
|
615
|
-
function flags(options) {
|
|
616
|
-
return options && options.sensitive ? '' : 'i';
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
export function addLifecycleHook(vm, hook, fn) {
|
|
620
|
-
if (!vm.$options[hook]) {
|
|
621
|
-
vm.$options[hook] = [];
|
|
622
|
-
}
|
|
623
|
-
if (!vm.$options[hook].includes(fn)) {
|
|
624
|
-
vm.$options[hook].push(fn);
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
export const urlJoin = joinURL;
|
|
629
|
-
|
|
630
|
-
export const stripTrailingSlash = withoutTrailingSlash;
|
|
631
|
-
|
|
632
|
-
export const isSamePath = _isSamePath;
|
|
633
|
-
|
|
634
|
-
export function setScrollRestoration(newVal) {
|
|
635
|
-
try {
|
|
636
|
-
window.history.scrollRestoration = newVal;
|
|
637
|
-
} catch (e) {}
|
|
638
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { getMatchedComponents, setScrollRestoration } from './nuxt';
|
|
2
|
-
|
|
3
|
-
if ('scrollRestoration' in window.history) {
|
|
4
|
-
setScrollRestoration('manual');
|
|
5
|
-
|
|
6
|
-
// reset scrollRestoration to auto when leaving page, allowing page reload
|
|
7
|
-
// and back-navigation from other pages to use the browser to restore the
|
|
8
|
-
// scrolling position.
|
|
9
|
-
window.addEventListener('beforeunload', () => {
|
|
10
|
-
setScrollRestoration('auto');
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
// Setting scrollRestoration to manual again when returning to this page.
|
|
14
|
-
window.addEventListener('load', () => {
|
|
15
|
-
setScrollRestoration('manual');
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function shouldScrollToTop(route) {
|
|
20
|
-
const Pages = getMatchedComponents(route);
|
|
21
|
-
|
|
22
|
-
if (Pages.length === 1) {
|
|
23
|
-
const { options = {} } = Pages[0];
|
|
24
|
-
|
|
25
|
-
return options.scrollToTop !== false;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return Pages.some(({ options }) => options && options.scrollToTop);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default function(to, from, savedPosition) {
|
|
32
|
-
// If the returned position is falsy or an empty object, will retain current scroll position
|
|
33
|
-
let position = false;
|
|
34
|
-
const isRouteChanged = to !== from;
|
|
35
|
-
|
|
36
|
-
// savedPosition is only available for popstate navigations (back button)
|
|
37
|
-
if (savedPosition) {
|
|
38
|
-
position = savedPosition;
|
|
39
|
-
} else if (isRouteChanged && shouldScrollToTop(to)) {
|
|
40
|
-
position = { x: 0, y: 0 };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const nuxt = window.$nuxt;
|
|
44
|
-
|
|
45
|
-
if (
|
|
46
|
-
// Initial load (vuejs/vue-router#3199)
|
|
47
|
-
!isRouteChanged ||
|
|
48
|
-
// Route hash changes
|
|
49
|
-
(to.path === from.path && to.hash !== from.hash)
|
|
50
|
-
) {
|
|
51
|
-
nuxt.$nextTick(() => nuxt.$emit('triggerScroll'));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return new Promise((resolve) => {
|
|
55
|
-
// wait for the out transition to complete (if necessary)
|
|
56
|
-
nuxt.$once('triggerScroll', () => {
|
|
57
|
-
// coords will be used if no selector is provided,
|
|
58
|
-
// or if the selector didn't match any element.
|
|
59
|
-
if (to.hash) {
|
|
60
|
-
let hash = to.hash;
|
|
61
|
-
|
|
62
|
-
// CSS.escape() is not supported with IE and Edge.
|
|
63
|
-
if (typeof window.CSS !== 'undefined' && typeof window.CSS.escape !== 'undefined') {
|
|
64
|
-
hash = `#${ window.CSS.escape(hash.substr(1)) }`;
|
|
65
|
-
}
|
|
66
|
-
try {
|
|
67
|
-
if (document.querySelector(hash)) {
|
|
68
|
-
// scroll to anchor by returning the selector
|
|
69
|
-
position = { selector: hash };
|
|
70
|
-
}
|
|
71
|
-
} catch (e) {
|
|
72
|
-
console.warn('Failed to save scroll position. Please add CSS.escape() polyfill (https://github.com/mathiasbynens/CSS.escape).'); // eslint-disable-line no-console
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
resolve(position);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|