@rancher/shell 1.2.3 → 2.0.1
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 +1 -0
- package/assets/styles/global/_layout.scss +99 -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 +315 -64
- package/assets/translations/zh-hans.yaml +7 -31
- package/babel.config.js +8 -2
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/gatekeeper.vue +2 -11
- package/chart/istio.vue +1 -10
- package/chart/logging/index.vue +2 -11
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +61 -2
- package/chart/monitoring/index.vue +52 -26
- package/chart/monitoring/prometheus/index.vue +39 -45
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +18 -15
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/azure.vue +4 -17
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AlertTable.vue +17 -7
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +27 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +15 -8
- package/components/Certificates.vue +161 -0
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +55 -12
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +111 -17
- package/components/CommunityLinks.vue +12 -8
- package/components/CopyCode.vue +6 -2
- package/components/CopyToClipboard.vue +2 -1
- package/components/CopyToClipboardText.vue +14 -9
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +52 -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/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +31 -7
- package/components/FixedBanner.vue +48 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/GrafanaDashboard.vue +6 -4
- package/components/IconOrSvg.vue +1 -1
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- package/components/Markdown.vue +16 -12
- 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 +12 -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 +19 -3
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +48 -16
- package/components/ResourceDetail/index.vue +6 -4
- package/components/ResourceList/Masthead.vue +10 -9
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +87 -21
- package/components/ResourceYaml.vue +35 -5
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +50 -94
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +33 -21
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +143 -44
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/StatusTable.vue +5 -1
- package/components/Tabbed/index.vue +18 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.vue +1 -0
- package/components/YamlEditor.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.test.ts +87 -0
- package/components/__tests__/CopyCode.test.ts +5 -4
- 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/FleetBundles.vue +5 -11
- 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 +63 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +35 -30
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
- package/components/form/ArrayList.vue +22 -18
- package/components/form/ArrayListSelect.vue +5 -0
- package/components/form/BannerSettings.vue +3 -0
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/FileSelector.vue +1 -0
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +70 -48
- package/components/form/LabeledSelect.vue +145 -41
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- package/components/form/Password.vue +3 -1
- 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/SelectOrCreateAuthSecret.vue +132 -59
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/Taints.vue +13 -7
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +120 -11
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
- package/components/form/__tests__/Taints.test.ts +70 -0
- 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/Checked.vue +11 -3
- package/components/formatter/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/ClusterProvider.vue +1 -18
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +25 -12
- 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/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
- package/components/nav/Group.vue +9 -7
- package/components/nav/Header.vue +85 -46
- package/components/nav/Jump.vue +19 -9
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +392 -136
- package/components/nav/Type.vue +71 -106
- package/components/nav/WindowManager/ContainerLogs.vue +120 -19
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
- package/components/nav/__tests__/Type.test.ts +322 -97
- package/components/nuxt/nuxt-child.js +9 -78
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +11 -101
- package/{layouts → components/templates}/error.vue +13 -26
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -5
- package/{layouts → components/templates}/unauthenticated.vue +2 -3
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/home-links.js +2 -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 +21 -1
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +166 -45
- package/config/product/fleet.js +6 -1
- package/config/product/legacy.js +2 -11
- package/config/product/manager.js +51 -25
- package/config/query-params.js +2 -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/i18n.js +13 -0
- package/config/router/navigation-guards/index.js +16 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +31 -2
- package/config/store.js +8 -4
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +66 -1
- package/config/types.js +35 -20
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +4 -6
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +18 -11
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +289 -285
- package/core/types-provisioning.ts +7 -0
- package/creators/app/app.package.json +2 -1
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.gitlab-ci.yml +14 -0
- package/creators/app/files/.vscode/settings.json +0 -1
- package/creators/app/init +19 -0
- 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__/provisioning.cattle.io.cluster.test.ts +119 -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.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- 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 +22 -3
- package/detail/provisioning.cattle.io.cluster.vue +31 -13
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +137 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- 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 +85 -0
- 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 +6 -23
- 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 +177 -9
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +28 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +3 -1
- 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 +3 -53
- package/edit/management.cattle.io.setting.vue +52 -2
- 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/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
- 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} +46 -7
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → 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 +33 -16
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
- package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
- package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
- package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +13 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/token.vue +3 -1
- package/edit/workload/Upgrading.vue +3 -2
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +35 -2
- 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 +546 -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/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +16 -16
- package/list/management.cattle.io.setting.vue +1 -0
- package/list/management.cattle.io.user.vue +13 -4
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +212 -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 +1 -3
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +2 -1
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +31 -27
- package/middleware/authenticated.js +23 -399
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +5 -9
- package/mixins/brand.js +102 -96
- 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 +27 -2
- 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__/management.cattle.io.cluster.test.ts +23 -0
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
- package/models/__tests__/schema.tests.ts +24 -0
- package/models/__tests__/secret.test.ts +37 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
- package/models/__tests__/workload.test.ts +91 -0
- 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 +8 -4
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/driver.js +63 -0
- package/models/fleet.cattle.io.cluster.js +27 -11
- package/models/fleet.cattle.io.gitrepo.js +66 -13
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +85 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +16 -7
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/management.cattle.io.project.js +0 -36
- package/models/management.cattle.io.setting.js +11 -7
- package/models/management.cattle.io.user.js +2 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/namespace.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +85 -0
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +125 -10
- package/models/schema.js +28 -7
- package/models/secret.js +126 -18
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +17 -0
- package/models/workload.service.js +18 -0
- package/package.json +18 -14
- package/pages/about.vue +12 -6
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +7 -3
- package/pages/auth/login.vue +106 -103
- package/pages/auth/logout.vue +2 -4
- package/pages/auth/setup.vue +92 -66
- package/pages/auth/verify.vue +30 -24
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +99 -69
- package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
- package/pages/c/_cluster/apps/charts/install.vue +12 -11
- 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/ecm/index.vue +0 -2
- 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 +253 -91
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +10 -6
- package/pages/c/_cluster/fleet/index.vue +89 -94
- 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 +91 -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 +60 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/manager/pages/_page.vue +4 -5
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- 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 -10
- package/pages/c/_cluster/settings/brand.vue +261 -38
- package/pages/c/_cluster/settings/index.vue +4 -6
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +71 -3
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
- 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 -54
- package/pages/diagnostic.vue +2 -2
- package/pages/fail-whale.vue +103 -42
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -4
- package/pages/support/index.vue +14 -10
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/clean-html-directive.js +5 -30
- package/plugins/clean-html.js +53 -0
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +132 -25
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +154 -44
- package/plugins/dashboard-store/index.js +0 -111
- package/plugins/dashboard-store/mutations.js +150 -52
- package/plugins/dashboard-store/resource-class.js +77 -127
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +89 -55
- 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} +81 -10
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
- package/plugins/steve/__tests__/steve-class.test.ts +59 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +3 -38
- package/plugins/steve/getters.js +164 -61
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +24 -3
- package/plugins/steve/norman-class.js +142 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/resource-utils.ts +38 -0
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +17 -76
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/promptRemove/pod.vue +15 -7
- package/public/index.html +1 -0
- package/rancher-components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/Accordion/Accordion.vue +86 -0
- package/rancher-components/Accordion/index.ts +1 -0
- 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 +18 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
- 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 +6 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.test.ts +270 -0
- package/rancher-components/StringList/StringList.vue +65 -26
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
- package/scripts/clean +1 -1
- package/scripts/extension/bundle +19 -7
- 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/package +11 -3
- package/scripts/extension/helm/scripts/patch +27 -0
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +25 -14
- package/scripts/publish-shell.sh +11 -1
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +87 -11
- package/scripts/vue-migrate.js +683 -0
- package/server/har-file.js +183 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/__tests__/type-map.test.ts +1122 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +22 -6
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +7 -4
- package/store/i18n.js +11 -0
- package/store/index.js +140 -49
- package/store/plugins.js +8 -4
- package/store/prefs.js +33 -38
- package/store/type-map.js +288 -213
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +34 -9
- package/tsconfig.paths.json +21 -0
- 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 +1045 -770
- 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 +180 -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 -21
- package/utils/azure.js +24 -0
- package/utils/banners.js +103 -0
- package/utils/clipboard.js +5 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +59 -28
- package/utils/custom-validators.js +0 -2
- package/utils/error.js +41 -1
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +190 -0
- package/utils/object.js +24 -0
- 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/time.js +2 -1
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +70 -4
- package/utils/validators/formRules/index.ts +15 -9
- package/utils/validators/index.js +1 -0
- package/utils/validators/setting.js +6 -10
- package/utils/version.js +2 -1
- package/vue.config.js +377 -401
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/components/ChartPsp.vue +0 -76
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/__tests__/ChartPsp.test.ts +0 -75
- package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -408
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
- package/initialize/App.js +0 -198
- package/initialize/client.js +0 -875
- package/initialize/index.js +0 -364
- package/initialize/layouts.ts +0 -26
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/fetch.server.js +0 -73
- package/pages/c/_cluster/apps/index.vue +0 -17
- package/pages/c/_cluster/auth/index.vue +0 -19
- package/pages/c/_cluster/index.vue +0 -17
- 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/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
- package/plugins/dashboard-store/rehydrate-all.js +0 -44
- 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/transitions.js +0 -4
- package/plugins/v-select.js +0 -4
- package/plugins/vue-clipboard2.js +0 -4
- package/tsconfig.default.json +0 -46
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -659
- package/utils/router.scrollBehavior.js +0 -80
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
package/vue.config.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
-
const serveStatic = require('serve-static');
|
|
4
3
|
const webpack = require('webpack');
|
|
5
4
|
const { generateDynamicTypeImport } = require('./pkg/auto-import');
|
|
6
5
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
|
7
6
|
const serverMiddlewares = require('./server/server-middleware.js');
|
|
8
7
|
const configHelper = require('./vue-config-helper.js');
|
|
8
|
+
const har = require('./server/har-file');
|
|
9
|
+
const VirtualModulesPlugin = require('webpack-virtual-modules');
|
|
9
10
|
|
|
10
11
|
// Suppress info level logging messages from http-proxy-middleware
|
|
11
12
|
// This hides all of the "[HPM Proxy created] ..." messages
|
|
12
13
|
const oldInfoLogger = console.info; // eslint-disable-line no-console
|
|
13
14
|
|
|
15
|
+
// TODO: Add explanation of this logic
|
|
14
16
|
console.info = () => {}; // eslint-disable-line no-console
|
|
15
17
|
|
|
16
18
|
const { createProxyMiddleware } = require('http-proxy-middleware');
|
|
@@ -20,29 +22,16 @@ console.info = oldInfoLogger; // eslint-disable-line no-console
|
|
|
20
22
|
// This is currently hardcoded to avoid importing the TS
|
|
21
23
|
// const { STANDARD } = require('./config/private-label');
|
|
22
24
|
const STANDARD = 1;
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const devPorts = configHelper.devPorts;
|
|
26
|
-
|
|
27
|
-
// human readable version used on rancher dashboard about page
|
|
28
|
-
const dashboardVersion = process.env.DASHBOARD_VERSION;
|
|
29
|
-
|
|
25
|
+
const { dev, devPorts, api } = configHelper;
|
|
26
|
+
const dashboardVersion = process.env.DASHBOARD_VERSION; // semver rancher dashboard in about page
|
|
30
27
|
const pl = process.env.PL || STANDARD;
|
|
31
28
|
const commit = process.env.COMMIT || 'head';
|
|
32
29
|
const perfTest = (process.env.PERF_TEST === 'true'); // Enable performance testing when in dev
|
|
33
|
-
const instrumentCode = (process.env.TEST_INSTRUMENT === 'true'); // Instrument code for code coverage in e2e tests
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// Expose a function that can be used by an app to provide a nuxt configuration for building an application
|
|
41
|
-
// This takes the directory of the application as tehfirst argument so that we can derive folder locations
|
|
42
|
-
// from it, rather than from the location of this file
|
|
43
|
-
module.exports = function(dir, _appConfig) {
|
|
44
|
-
// Paths to the shell folder when it is included as a node dependency
|
|
45
|
-
let SHELL = 'node_modules/@rancher/shell';
|
|
31
|
+
/**
|
|
32
|
+
* Paths to the shell folder when it is included as a node dependency
|
|
33
|
+
*/
|
|
34
|
+
const getShellPaths = (dir) => {
|
|
46
35
|
let SHELL_ABS = path.join(dir, 'node_modules/@rancher/shell');
|
|
47
36
|
let COMPONENTS_DIR = path.join(SHELL_ABS, 'rancher-components');
|
|
48
37
|
|
|
@@ -60,15 +49,66 @@ module.exports = function(dir, _appConfig) {
|
|
|
60
49
|
// If we have a local folder named 'shell' then use that rather than the one in node_modules
|
|
61
50
|
// This will be the case in the main dashboard repository.
|
|
62
51
|
if (fs.existsSync(path.join(dir, 'shell'))) {
|
|
63
|
-
SHELL = './shell';
|
|
64
52
|
SHELL_ABS = path.join(dir, 'shell');
|
|
65
53
|
COMPONENTS_DIR = path.join(dir, 'pkg', 'rancher-components', 'src', 'components');
|
|
66
54
|
}
|
|
67
55
|
|
|
56
|
+
return { SHELL_ABS, COMPONENTS_DIR };
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const getProxyConfig = (proxyConfig) => ({
|
|
60
|
+
...proxyConfig,
|
|
61
|
+
'/k8s': configHelper.proxyWsOpts(api), // Straight to a remote cluster (/k8s/clusters/<id>/)
|
|
62
|
+
'/pp': configHelper.proxyWsOpts(api), // For (epinio) standalone API
|
|
63
|
+
'/api': configHelper.proxyWsOpts(api), // Management k8s API
|
|
64
|
+
'/apis': configHelper.proxyWsOpts(api), // Management k8s API
|
|
65
|
+
'/v1': configHelper.proxyWsOpts(api), // Management Steve API
|
|
66
|
+
'/v3': configHelper.proxyWsOpts(api), // Rancher API
|
|
67
|
+
'/v3-public': configHelper.proxyOpts(api), // Rancher Unauthed API
|
|
68
|
+
'/api-ui': configHelper.proxyOpts(api), // Browser API UI
|
|
69
|
+
'/meta': configHelper.proxyMetaOpts(api), // Browser API UI
|
|
70
|
+
'/v1-*': configHelper.proxyOpts(api), // SAML, KDM, etc
|
|
71
|
+
'/rancherversion': configHelper.proxyPrimeOpts(api), // Rancher version endpoint
|
|
72
|
+
// These are for Ember embedding
|
|
73
|
+
'/c/*/edit': configHelper.proxyOpts('https://127.0.0.1:8000'), // Can't proxy all of /c because that's used by Vue too
|
|
74
|
+
'/k/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
75
|
+
'/g/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
76
|
+
'/n/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
77
|
+
'/p/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
78
|
+
'/assets': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
79
|
+
'/translations': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
80
|
+
'/engines-dist': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @pkg imports must be resolved to the package that it importing them - this allows a package to use @pkg as an alias
|
|
85
|
+
* to the root of that particular package
|
|
86
|
+
*/
|
|
87
|
+
const getPackageImport = (dir) => new webpack.NormalModuleReplacementPlugin(/^@pkg/, (resource) => {
|
|
88
|
+
const ctx = resource.context.split('/');
|
|
89
|
+
// Find 'pkg' folder in the context
|
|
90
|
+
const index = ctx.findIndex((s) => s === 'pkg');
|
|
91
|
+
|
|
92
|
+
if (index !== -1 && (index + 1) < ctx.length) {
|
|
93
|
+
const pkg = ctx[index + 1];
|
|
94
|
+
let p = path.resolve(dir, 'pkg', pkg, resource.request.substr(5));
|
|
95
|
+
|
|
96
|
+
if (resource.request.startsWith(`@pkg/${ pkg }`)) {
|
|
97
|
+
p = path.resolve(dir, 'pkg', resource.request.substr(5));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
resource.request = p;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const getLoaders = (SHELL_ABS) => {
|
|
105
|
+
const instrumentCode = (process.env.TEST_INSTRUMENT === 'true'); // Instrument code for code coverage in e2e tests
|
|
106
|
+
// Instrument code for tests
|
|
68
107
|
const babelPlugins = [
|
|
69
|
-
// TODO: Browser support
|
|
108
|
+
// TODO: Browser support; also add explanation to this TODO
|
|
70
109
|
// ['@babel/plugin-transform-modules-commonjs'],
|
|
71
|
-
['@babel/plugin-proposal-private-property-in-object', { loose: true }]
|
|
110
|
+
['@babel/plugin-proposal-private-property-in-object', { loose: true }],
|
|
111
|
+
['@babel/plugin-proposal-class-properties', { loose: true }]
|
|
72
112
|
];
|
|
73
113
|
|
|
74
114
|
if (instrumentCode) {
|
|
@@ -79,271 +119,368 @@ module.exports = function(dir, _appConfig) {
|
|
|
79
119
|
console.warn('Instrumenting code for coverage'); // eslint-disable-line no-console
|
|
80
120
|
}
|
|
81
121
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
122
|
+
return [
|
|
123
|
+
// Ensure there is a fallback for browsers that don't support web workers
|
|
124
|
+
{
|
|
125
|
+
test: /web-worker.[a-z-]+.js/i,
|
|
126
|
+
loader: 'worker-loader',
|
|
127
|
+
options: { inline: 'fallback' },
|
|
128
|
+
},
|
|
129
|
+
// Handler for csv files (e.g. ec2 instance data)
|
|
130
|
+
{
|
|
131
|
+
test: /\.csv$/i,
|
|
132
|
+
loader: 'csv-loader',
|
|
133
|
+
options: {
|
|
134
|
+
dynamicTyping: true,
|
|
135
|
+
header: true,
|
|
136
|
+
skipEmptyLines: true
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
// Handler for yaml files (used for i18n files, for example)
|
|
140
|
+
{
|
|
141
|
+
test: /\.ya?ml$/i,
|
|
142
|
+
loader: 'js-yaml-loader',
|
|
143
|
+
options: { name: '[path][name].[ext]' },
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
test: /\.m?[tj]sx?$/,
|
|
147
|
+
// This excludes no modules except for node_modules/@rancher/... so that plugins can properly compile
|
|
148
|
+
// when referencing @rancher/shell
|
|
149
|
+
exclude: /node_modules\/(?!(@rancher)\/).*/,
|
|
150
|
+
use: [
|
|
151
|
+
{
|
|
152
|
+
loader: 'cache-loader',
|
|
153
|
+
options: {
|
|
154
|
+
cacheDirectory: 'node_modules/.cache/babel-loader',
|
|
155
|
+
cacheIdentifier: 'e93f32da'
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
loader: 'babel-loader',
|
|
160
|
+
options: {
|
|
161
|
+
presets: [
|
|
162
|
+
[
|
|
163
|
+
require.resolve('@nuxt/babel-preset-app'),
|
|
164
|
+
{
|
|
165
|
+
corejs: { version: 3 },
|
|
166
|
+
targets: { browsers: ['last 2 versions'] },
|
|
167
|
+
modern: true
|
|
168
|
+
}
|
|
169
|
+
],
|
|
170
|
+
'@babel/preset-typescript',
|
|
171
|
+
],
|
|
172
|
+
plugins: babelPlugins
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
test: /\.tsx?$/,
|
|
179
|
+
use: [
|
|
180
|
+
{
|
|
181
|
+
loader: 'cache-loader',
|
|
182
|
+
options: {
|
|
183
|
+
cacheDirectory: 'node_modules/.cache/ts-loader',
|
|
184
|
+
cacheIdentifier: '3596741e'
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
loader: 'ts-loader',
|
|
189
|
+
options: {
|
|
190
|
+
transpileOnly: true,
|
|
191
|
+
happyPackMode: false,
|
|
192
|
+
appendTsxSuffixTo: [
|
|
193
|
+
'\\.vue$'
|
|
194
|
+
],
|
|
195
|
+
configFile: path.join(SHELL_ABS, 'tsconfig.json')
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
// Prevent warning in log with the md files in the content folder
|
|
201
|
+
{
|
|
202
|
+
test: /\.md$/,
|
|
203
|
+
use: [
|
|
204
|
+
{
|
|
205
|
+
loader: 'frontmatter-markdown-loader',
|
|
206
|
+
options: { mode: ['body'] }
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
},
|
|
94
210
|
];
|
|
211
|
+
};
|
|
95
212
|
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
const
|
|
213
|
+
const getDevServerConfig = (proxy) => {
|
|
214
|
+
const harFile = process.env.HAR_FILE;
|
|
215
|
+
// HAR File support - load network responses from the specified .har file and use those rather than communicating to the Rancher server
|
|
216
|
+
const harData = harFile ? har.loadFile(harFile, devPorts ? 8005 : 80, '') : undefined;
|
|
217
|
+
|
|
218
|
+
return {
|
|
219
|
+
https: (devPorts ? {
|
|
220
|
+
key: fs.readFileSync(path.resolve(__dirname, 'server/server.key')),
|
|
221
|
+
cert: fs.readFileSync(path.resolve(__dirname, 'server/server.crt'))
|
|
222
|
+
} : null),
|
|
223
|
+
port: (devPorts ? 8005 : 80),
|
|
224
|
+
host: '0.0.0.0',
|
|
225
|
+
public: `https://0.0.0.0:${ devPorts ? 8005 : 80 }`,
|
|
226
|
+
before(app, server) {
|
|
227
|
+
const socketProxies = {};
|
|
228
|
+
|
|
229
|
+
// Close down quickly in response to CTRL + C
|
|
230
|
+
process.once('SIGINT', () => {
|
|
231
|
+
server.close();
|
|
232
|
+
console.log('\n'); // eslint-disable-line no-console
|
|
233
|
+
process.exit(1);
|
|
234
|
+
});
|
|
100
235
|
|
|
101
|
-
|
|
102
|
-
Object.keys(pkg.dependencies).forEach((pkg) => {
|
|
103
|
-
const f = require(path.join(NM, pkg, 'package.json'));
|
|
236
|
+
app.use(serverMiddlewares);
|
|
104
237
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
238
|
+
if (harData) {
|
|
239
|
+
console.log('Installing HAR file middleware'); // eslint-disable-line no-console
|
|
240
|
+
app.use(har.harProxy(harData, process.env.HAR_DIR));
|
|
108
241
|
|
|
109
|
-
|
|
242
|
+
server.websocketProxies.push({
|
|
243
|
+
upgrade(req, socket, head) {
|
|
244
|
+
const responseHeaders = ['HTTP/1.1 101 Web Socket Protocol Handshake', 'Upgrade: WebSocket', 'Connection: Upgrade'];
|
|
110
245
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
path: `/pkg/${ id }`,
|
|
114
|
-
handler: serveStatic(path.join(NM, pkg))
|
|
246
|
+
socket.write(`${ responseHeaders.join('\r\n') }\r\n\r\n`);
|
|
247
|
+
}
|
|
115
248
|
});
|
|
116
249
|
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
serverMiddleware.push({
|
|
121
|
-
path: '/uiplugins-catalog',
|
|
122
|
-
handler: (req, res, next) => {
|
|
123
|
-
const p = req.url.split('?');
|
|
124
250
|
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
251
|
+
Object.keys(proxy).forEach((p) => {
|
|
252
|
+
const px = createProxyMiddleware({
|
|
253
|
+
...proxy[p],
|
|
254
|
+
ws: false // We will handle the web socket upgrade
|
|
129
255
|
});
|
|
130
256
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
});
|
|
257
|
+
if (proxy[p].ws) {
|
|
258
|
+
socketProxies[p] = px;
|
|
259
|
+
}
|
|
260
|
+
app.use(p, px);
|
|
261
|
+
});
|
|
137
262
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
263
|
+
server.websocketProxies.push({
|
|
264
|
+
upgrade(req, socket, head) {
|
|
265
|
+
const path = Object.keys(socketProxies).find((path) => req.url.startsWith(path));
|
|
142
266
|
|
|
143
|
-
|
|
144
|
-
|
|
267
|
+
if (path) {
|
|
268
|
+
const proxy = socketProxies[path];
|
|
145
269
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
270
|
+
if (proxy.upgrade) {
|
|
271
|
+
proxy.upgrade(req, socket, head);
|
|
272
|
+
} else {
|
|
273
|
+
console.log(`Upgrade for Proxy is not defined. Cannot upgrade Web socket for ${ req.url }`); // eslint-disable-line no-console
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
console.log(`Unknown Web socket upgrade request for ${ req.url }`); // eslint-disable-line no-console
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
};
|
|
149
283
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const
|
|
284
|
+
/**
|
|
285
|
+
* Generate a virtual module '@rancher/dynamic.js` which imports all of the packages that should be built into the application
|
|
286
|
+
* This is imported in 'shell/extensions/extension-loader.js` which ensures the all code for plugins to be included is imported in the application
|
|
287
|
+
*/
|
|
288
|
+
const getVirtualModules = (dir, includePkg) => {
|
|
289
|
+
// Find any UI packages in node_modules
|
|
290
|
+
const modulePaths = path.join(dir, 'node_modules');
|
|
291
|
+
const requiredPackages = require(path.join(dir, 'package.json'));
|
|
292
|
+
const librariesIndex = {};
|
|
158
293
|
|
|
159
|
-
if (
|
|
160
|
-
|
|
294
|
+
if (requiredPackages && requiredPackages.dependencies) {
|
|
295
|
+
Object.keys(requiredPackages.dependencies).forEach((requiredPackage) => {
|
|
296
|
+
const library = require(path.join(modulePaths, requiredPackage, 'package.json'));
|
|
161
297
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
298
|
+
// The package.json must have the 'rancher' property to mark it as a UI package
|
|
299
|
+
if (library.rancher) {
|
|
300
|
+
const id = `${ library.name }-${ library.version }`;
|
|
165
301
|
|
|
166
|
-
|
|
167
|
-
if (includePkg(name) && f.rancher) {
|
|
168
|
-
reqs += `$plugin.initPlugin('${ name }', require(\'~/pkg/${ name }\')); `;
|
|
302
|
+
librariesIndex[id] = library.main;
|
|
169
303
|
}
|
|
170
|
-
|
|
171
|
-
// // Serve the code for the UI package in case its used for dynamic loading (but not if the same package was provided in node_modules)
|
|
172
|
-
// if (!nmPackages[name]) {
|
|
173
|
-
// const pkgPackageFile = require(path.join(dir, 'pkg', name, 'package.json'));
|
|
174
|
-
// const pkgRef = `${ name }-${ pkgPackageFile.version }`;
|
|
175
|
-
|
|
176
|
-
// serverMiddleware.push({ path: `/pkg/${ pkgRef }`, handler: serveStatic(`${ dir }/dist-pkg/${ pkgRef }`) });
|
|
177
|
-
// }
|
|
178
|
-
autoImportTypes[`node_modules/@rancher/auto-import/${ name }`] = generateDynamicTypeImport(`@pkg/${ name }`, path.join(dir, `pkg/${ name }`));
|
|
179
304
|
});
|
|
180
305
|
}
|
|
181
306
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
});
|
|
307
|
+
let reqs = '';
|
|
308
|
+
const pkgFolder = path.relative(dir, './pkg');
|
|
185
309
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
310
|
+
if (fs.existsSync(pkgFolder)) {
|
|
311
|
+
fs.readdirSync(pkgFolder)
|
|
312
|
+
.filter((name) => !name.startsWith('.')) // Ignore hidden folders
|
|
313
|
+
.forEach((name) => {
|
|
314
|
+
const library = require(path.join(dir, 'pkg', name, 'package.json'));
|
|
315
|
+
|
|
316
|
+
// Package file must have rancher field to be a plugin
|
|
317
|
+
if (includePkg(name) && library.rancher) {
|
|
318
|
+
reqs += `$plugin.initPlugin('${ name }', require(\'~/pkg/${ name }\')); `;
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
192
322
|
|
|
193
|
-
|
|
323
|
+
Object.keys(librariesIndex).forEach((i) => {
|
|
324
|
+
reqs += `$plugin.loadAsync('${ i }', '/pkg/${ i }/${ librariesIndex[i] }');`;
|
|
194
325
|
});
|
|
195
326
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
const pkgImport = new webpack.NormalModuleReplacementPlugin(/^@pkg/, (resource) => {
|
|
199
|
-
const ctx = resource.context.split('/');
|
|
200
|
-
// Find 'pkg' folder in the contxt
|
|
201
|
-
const index = ctx.findIndex((s) => s === 'pkg');
|
|
202
|
-
|
|
203
|
-
if (index !== -1 && (index + 1) < ctx.length) {
|
|
204
|
-
const pkg = ctx[index + 1];
|
|
205
|
-
let p = path.resolve(dir, 'pkg', pkg, resource.request.substr(5));
|
|
206
|
-
|
|
207
|
-
if (resource.request.startsWith(`@pkg/${ pkg }`)) {
|
|
208
|
-
p = path.resolve(dir, 'pkg', resource.request.substr(5));
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
resource.request = p;
|
|
212
|
-
}
|
|
213
|
-
});
|
|
327
|
+
return new VirtualModulesPlugin({ 'node_modules/@rancher/dynamic.js': `export default function ($plugin) { ${ reqs } };` });
|
|
328
|
+
};
|
|
214
329
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
serverMiddleware.push(path.resolve(dir, SHELL, 'server', 'verdaccio-middleware'));
|
|
330
|
+
const getAutoImport = () => new webpack.NormalModuleReplacementPlugin(/^@rancher\/auto-import$/, (resource) => {
|
|
331
|
+
const ctx = resource.context.split('/');
|
|
332
|
+
const pkg = ctx[ctx.length - 1];
|
|
219
333
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
// ===============================================================================================
|
|
334
|
+
resource.request = `@rancher/auto-import/${ pkg }`;
|
|
335
|
+
});
|
|
223
336
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
337
|
+
/**
|
|
338
|
+
* For each package in the pkg folder that is being compiled into the application,
|
|
339
|
+
* Add in the code to automatically import the types from that package
|
|
340
|
+
* This imports models, edit, detail, list etc
|
|
341
|
+
* When built as a UI package, shell/pkg/vue.config.js does the same thing
|
|
342
|
+
*/
|
|
343
|
+
const getVirtualModulesAutoImport = (dir) => {
|
|
344
|
+
const autoImportTypes = {};
|
|
345
|
+
const pkgFolder = path.relative(dir, './pkg');
|
|
230
346
|
|
|
231
|
-
if (
|
|
232
|
-
|
|
347
|
+
if (fs.existsSync(pkgFolder)) {
|
|
348
|
+
fs.readdirSync(pkgFolder)
|
|
349
|
+
.filter((name) => !name.startsWith('.')) // Ignore hidden folders
|
|
350
|
+
.forEach((name) => {
|
|
351
|
+
autoImportTypes[`node_modules/@rancher/auto-import/${ name }`] = generateDynamicTypeImport(`@pkg/${ name }`, path.join(dir, `pkg/${ name }`));
|
|
352
|
+
});
|
|
233
353
|
}
|
|
234
354
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
355
|
+
return new VirtualModulesPlugin(autoImportTypes);
|
|
356
|
+
};
|
|
238
357
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
358
|
+
// Get current shell version
|
|
359
|
+
const shellPkgRawData = fs.readFileSync(path.join(__dirname, 'package.json'));
|
|
360
|
+
const shellPkgData = JSON.parse(shellPkgRawData);
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* DefinePlugin does string replacement within our code. We may want to consider replacing it with something else. In code we'll see something like
|
|
364
|
+
* process.env.commit even though process and env aren't even defined objects. This could cause people to be mislead.
|
|
365
|
+
*/
|
|
366
|
+
const createEnvVariablesPlugin = (routerBasePath, rancherEnv) => new webpack.DefinePlugin({
|
|
367
|
+
'process.env.UI_EXTENSIONS_API_VERSION': JSON.stringify(shellPkgData.version),
|
|
368
|
+
'process.env.commit': JSON.stringify(commit),
|
|
369
|
+
'process.env.version': JSON.stringify(dashboardVersion),
|
|
370
|
+
'process.env.dev': JSON.stringify(dev),
|
|
371
|
+
'process.env.pl': JSON.stringify(pl),
|
|
372
|
+
'process.env.perfTest': JSON.stringify(perfTest),
|
|
373
|
+
'process.env.loginLocaleSelector': JSON.stringify(process.env.LOGIN_LOCALE_SELECTOR || 'true'),
|
|
374
|
+
'process.env.excludeOperatorPkg': JSON.stringify(process.env.EXCLUDE_OPERATOR_PKG || 'false'),
|
|
375
|
+
'process.env.rancherEnv': JSON.stringify(rancherEnv),
|
|
376
|
+
'process.env.harvesterPkgUrl': JSON.stringify(process.env.HARVESTER_PKG_URL),
|
|
377
|
+
'process.env.api': JSON.stringify(api),
|
|
378
|
+
// Store the Router Base as env variable that we can use in `shell/config/router.js`
|
|
379
|
+
'process.env.routerBase': JSON.stringify(routerBasePath),
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Ensure we process files in the @rancher/shell folder
|
|
384
|
+
*/
|
|
385
|
+
const processShellFiles = (config, SHELL_ABS) => {
|
|
386
|
+
config.module.rules.forEach((r) => {
|
|
387
|
+
if ('test.js'.match(r.test)) {
|
|
388
|
+
if (r.exclude) {
|
|
389
|
+
const orig = r.exclude;
|
|
390
|
+
|
|
391
|
+
r.exclude = function(modulePath) {
|
|
392
|
+
if (modulePath.indexOf(SHELL_ABS) === 0 || typeof orig !== 'function') {
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
242
395
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
396
|
+
return orig(modulePath);
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Update vue-loader to set whitespace to 'preserve'
|
|
405
|
+
* This was the setting with nuxt, but is not the default with vue cli
|
|
406
|
+
* Need to find the vue loader in the webpack config and update the setting
|
|
407
|
+
*/
|
|
408
|
+
const preserveWhitespace = (config) => {
|
|
409
|
+
config.module.rules.forEach((loader) => {
|
|
410
|
+
if (loader.use) {
|
|
411
|
+
loader.use.forEach((use) => {
|
|
412
|
+
if (use.loader.includes('vue-loader')) {
|
|
413
|
+
use.options.compilerOptions.whitespace = 'preserve';
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
};
|
|
246
419
|
|
|
420
|
+
const printLogs = (dev, dashboardVersion, resourceBase, routerBasePath, pl, rancherEnv) => {
|
|
247
421
|
console.log(`Build: ${ dev ? 'Development' : 'Production' }`); // eslint-disable-line no-console
|
|
248
422
|
|
|
249
|
-
if (
|
|
423
|
+
if (!dev) {
|
|
250
424
|
console.log(`Version: ${ dashboardVersion }`); // eslint-disable-line no-console
|
|
251
425
|
}
|
|
252
426
|
|
|
253
|
-
if (
|
|
427
|
+
if (resourceBase) {
|
|
254
428
|
console.log(`Resource Base URL: ${ resourceBase }`); // eslint-disable-line no-console
|
|
255
429
|
}
|
|
256
430
|
|
|
257
|
-
if (
|
|
431
|
+
if (routerBasePath !== '/') {
|
|
258
432
|
console.log(`Router Base Path: ${ routerBasePath }`); // eslint-disable-line no-console
|
|
259
433
|
}
|
|
260
434
|
|
|
261
|
-
if (
|
|
435
|
+
if (pl !== STANDARD) {
|
|
262
436
|
console.log(`PL: ${ pl }`); // eslint-disable-line no-console
|
|
263
437
|
}
|
|
264
|
-
const rancherEnv = process.env.RANCHER_ENV || 'web';
|
|
265
|
-
|
|
266
|
-
const loginLocaleSelector = process.env.LOGIN_LOCALE_SELECTOR || 'true';
|
|
267
|
-
const excludeOperatorPkg = process.env.EXCLUDE_OPERATOR_PKG || 'false';
|
|
268
438
|
|
|
269
439
|
console.log(`API: '${ api }'. Env: '${ rancherEnv }'`); // eslint-disable-line no-console
|
|
270
|
-
|
|
271
|
-
...appConfig.proxies,
|
|
272
|
-
'/k8s': configHelper.proxyWsOpts(api), // Straight to a remote cluster (/k8s/clusters/<id>/)
|
|
273
|
-
'/pp': configHelper.proxyWsOpts(api), // For (epinio) standalone API
|
|
274
|
-
'/api': configHelper.proxyWsOpts(api), // Management k8s API
|
|
275
|
-
'/apis': configHelper.proxyWsOpts(api), // Management k8s API
|
|
276
|
-
'/v1': configHelper.proxyWsOpts(api), // Management Steve API
|
|
277
|
-
'/v3': configHelper.proxyWsOpts(api), // Rancher API
|
|
278
|
-
'/v3-public': configHelper.proxyOpts(api), // Rancher Unauthed API
|
|
279
|
-
'/api-ui': configHelper.proxyOpts(api), // Browser API UI
|
|
280
|
-
'/meta': configHelper.proxyMetaOpts(api), // Browser API UI
|
|
281
|
-
'/v1-*': configHelper.proxyOpts(api), // SAML, KDM, etc
|
|
282
|
-
'/rancherversion': configHelper.proxyPrimeOpts(api), // Rancher version endpoint
|
|
283
|
-
// These are for Ember embedding
|
|
284
|
-
'/c/*/edit': configHelper.proxyOpts('https://127.0.0.1:8000'), // Can't proxy all of /c because that's used by Vue too
|
|
285
|
-
'/k/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
286
|
-
'/g/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
287
|
-
'/n/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
288
|
-
'/p/': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
289
|
-
'/assets': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
290
|
-
'/translations': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
291
|
-
'/engines-dist': configHelper.proxyOpts('https://127.0.0.1:8000'),
|
|
292
|
-
};
|
|
440
|
+
};
|
|
293
441
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
host: '0.0.0.0',
|
|
303
|
-
public: `https://0.0.0.0:${ devPorts ? 8005 : 80 }`,
|
|
304
|
-
before(app, server) {
|
|
305
|
-
const socketProxies = {};
|
|
306
|
-
|
|
307
|
-
// Close down quickly in response to CTRL + C
|
|
308
|
-
process.once('SIGINT', () => {
|
|
309
|
-
server.close();
|
|
310
|
-
console.log('\n'); // eslint-disable-line no-console
|
|
311
|
-
process.exit(1);
|
|
312
|
-
});
|
|
442
|
+
/**
|
|
443
|
+
* Expose a function that can be used by an app to provide a nuxt configuration for building an application
|
|
444
|
+
* This takes the directory of the application as the first argument so that we can derive folder locations
|
|
445
|
+
* from it, rather than from the location of this file
|
|
446
|
+
*/
|
|
447
|
+
module.exports = function(dir, _appConfig) {
|
|
448
|
+
require('events').EventEmitter.defaultMaxListeners = 20;
|
|
449
|
+
require('dotenv').config();
|
|
313
450
|
|
|
314
|
-
|
|
451
|
+
const { SHELL_ABS, COMPONENTS_DIR } = getShellPaths(dir);
|
|
452
|
+
const appConfig = _appConfig || {};
|
|
453
|
+
const excludes = appConfig.excludes || [];
|
|
454
|
+
const watcherIgnores = [
|
|
455
|
+
/.shell/,
|
|
456
|
+
/dist-pkg/,
|
|
457
|
+
/scripts\/standalone/,
|
|
458
|
+
...excludes.map((e) => new RegExp(`/pkg.${ e }`))
|
|
459
|
+
];
|
|
315
460
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
});
|
|
461
|
+
const includePkg = (name) => {
|
|
462
|
+
if (name.startsWith('.') || name === 'node_modules') {
|
|
463
|
+
return false;
|
|
464
|
+
}
|
|
321
465
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
325
|
-
app.use(p, px);
|
|
326
|
-
});
|
|
466
|
+
return !excludes || (excludes && !excludes.includes(name));
|
|
467
|
+
};
|
|
327
468
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
469
|
+
const routerBasePath = process.env.ROUTER_BASE ?? '/';
|
|
470
|
+
let resourceBase = process.env.RESOURCE_BASE ?? '';
|
|
471
|
+
const outputDir = process.env.OUTPUT_DIR ?? 'dist';
|
|
472
|
+
const rancherEnv = process.env.RANCHER_ENV || 'web';
|
|
331
473
|
|
|
332
|
-
|
|
333
|
-
|
|
474
|
+
if ( resourceBase && !resourceBase.endsWith('/') ) {
|
|
475
|
+
resourceBase += '/';
|
|
476
|
+
}
|
|
334
477
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
console.log(`Unknown Web socket upgrade request for ${ req.url }`); // eslint-disable-line no-console
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
});
|
|
345
|
-
},
|
|
346
|
-
},
|
|
478
|
+
printLogs(dev, dashboardVersion, resourceBase, routerBasePath, pl, rancherEnv);
|
|
479
|
+
|
|
480
|
+
const proxy = getProxyConfig(appConfig.proxy);
|
|
481
|
+
const config = {
|
|
482
|
+
// Vue server
|
|
483
|
+
devServer: getDevServerConfig(proxy),
|
|
347
484
|
publicPath: resourceBase || undefined,
|
|
348
485
|
css: {
|
|
349
486
|
extract: false, // inline css styles instead of including with `<links`
|
|
@@ -359,16 +496,13 @@ module.exports = function(dir, _appConfig) {
|
|
|
359
496
|
}
|
|
360
497
|
}
|
|
361
498
|
},
|
|
362
|
-
|
|
363
499
|
outputDir,
|
|
364
|
-
|
|
365
500
|
pages: {
|
|
366
501
|
index: {
|
|
367
|
-
entry: path.join(SHELL_ABS, '/initialize/
|
|
502
|
+
entry: path.join(SHELL_ABS, '/initialize/entry.js'),
|
|
368
503
|
template: path.join(SHELL_ABS, '/public/index.html')
|
|
369
504
|
}
|
|
370
505
|
},
|
|
371
|
-
|
|
372
506
|
configureWebpack(config) {
|
|
373
507
|
config.resolve.alias['~'] = dir;
|
|
374
508
|
config.resolve.alias['@'] = dir;
|
|
@@ -380,34 +514,11 @@ module.exports = function(dir, _appConfig) {
|
|
|
380
514
|
config.resolve.alias['@components'] = COMPONENTS_DIR;
|
|
381
515
|
config.resolve.alias['vue$'] = path.resolve(process.cwd(), 'node_modules', 'vue', 'dist', dev ? 'vue.js' : 'vue.min.js');
|
|
382
516
|
config.resolve.modules.push(__dirname);
|
|
383
|
-
config.plugins.push(
|
|
384
|
-
config.plugins.push(
|
|
385
|
-
config.plugins.push(
|
|
386
|
-
config.plugins.push(
|
|
387
|
-
|
|
388
|
-
// process.env.commit even though process and env aren't even defined objects. This could cause people to be mislead.
|
|
389
|
-
config.plugins.push(new webpack.DefinePlugin({
|
|
390
|
-
'process.client': JSON.stringify(true),
|
|
391
|
-
'process.env.commit': JSON.stringify(commit),
|
|
392
|
-
'process.env.version': JSON.stringify(dashboardVersion),
|
|
393
|
-
'process.env.dev': JSON.stringify(dev),
|
|
394
|
-
'process.env.pl': JSON.stringify(pl),
|
|
395
|
-
'process.env.perfTest': JSON.stringify(perfTest),
|
|
396
|
-
'process.env.loginLocaleSelector': JSON.stringify(loginLocaleSelector),
|
|
397
|
-
'process.env.excludeOperatorPkg': JSON.stringify(excludeOperatorPkg),
|
|
398
|
-
'process.env.rancherEnv': JSON.stringify(rancherEnv),
|
|
399
|
-
'process.env.harvesterPkgUrl': JSON.stringify(process.env.HARVESTER_PKG_URL),
|
|
400
|
-
'process.env.api': JSON.stringify(api),
|
|
401
|
-
// Store the Router Base as env variable that we can use in `shell/config/router.js`
|
|
402
|
-
'process.env.routerBase': JSON.stringify(routerBasePath),
|
|
403
|
-
|
|
404
|
-
// This is a replacement of the nuxt publicRuntimeConfig
|
|
405
|
-
'nuxt.publicRuntimeConfig': JSON.stringify({
|
|
406
|
-
rancherEnv,
|
|
407
|
-
dashboardVersion
|
|
408
|
-
}),
|
|
409
|
-
|
|
410
|
-
}));
|
|
517
|
+
config.plugins.push(getVirtualModules(dir, includePkg));
|
|
518
|
+
config.plugins.push(getAutoImport());
|
|
519
|
+
config.plugins.push(getVirtualModulesAutoImport(dir));
|
|
520
|
+
config.plugins.push(getPackageImport(dir));
|
|
521
|
+
config.plugins.push(createEnvVariablesPlugin(routerBasePath, rancherEnv));
|
|
411
522
|
|
|
412
523
|
// The static assets need to be in the built assets directory in order to get served (primarily the favicon)
|
|
413
524
|
config.plugins.push(new CopyWebpackPlugin([{ from: path.join(SHELL_ABS, 'static'), to: '.' }]));
|
|
@@ -423,144 +534,9 @@ module.exports = function(dir, _appConfig) {
|
|
|
423
534
|
}
|
|
424
535
|
|
|
425
536
|
config.resolve.symlinks = false;
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
config
|
|
429
|
-
if ('test.js'.match(r.test)) {
|
|
430
|
-
if (r.exclude) {
|
|
431
|
-
const orig = r.exclude;
|
|
432
|
-
|
|
433
|
-
r.exclude = function(modulePath) {
|
|
434
|
-
if (modulePath.indexOf(SHELL_ABS) === 0 || typeof orig !== 'function') {
|
|
435
|
-
return false;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
return orig(modulePath);
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
});
|
|
443
|
-
|
|
444
|
-
// Instrument code for tests
|
|
445
|
-
const babelPlugins = [
|
|
446
|
-
// TODO: Browser support
|
|
447
|
-
// ['@babel/plugin-transform-modules-commonjs'],
|
|
448
|
-
['@babel/plugin-proposal-private-property-in-object', { loose: true }],
|
|
449
|
-
['@babel/plugin-proposal-class-properties', { loose: true }]
|
|
450
|
-
];
|
|
451
|
-
|
|
452
|
-
if (instrumentCode) {
|
|
453
|
-
babelPlugins.push([
|
|
454
|
-
'babel-plugin-istanbul', { extension: ['.js', '.vue'] }, 'add-vue'
|
|
455
|
-
]);
|
|
456
|
-
|
|
457
|
-
console.warn('Instrumenting code for coverage'); // eslint-disable-line no-console
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
const loaders = [
|
|
461
|
-
// Ensure there is a fallback for browsers that don't support web workers
|
|
462
|
-
{
|
|
463
|
-
test: /web-worker.[a-z-]+.js/i,
|
|
464
|
-
loader: 'worker-loader',
|
|
465
|
-
options: { inline: 'fallback' },
|
|
466
|
-
},
|
|
467
|
-
// Handler for csv files (e.g. ec2 instance data)
|
|
468
|
-
{
|
|
469
|
-
test: /\.csv$/i,
|
|
470
|
-
loader: 'csv-loader',
|
|
471
|
-
options: {
|
|
472
|
-
dynamicTyping: true,
|
|
473
|
-
header: true,
|
|
474
|
-
skipEmptyLines: true
|
|
475
|
-
},
|
|
476
|
-
},
|
|
477
|
-
// Handler for yaml files (used for i18n files, for example)
|
|
478
|
-
{
|
|
479
|
-
test: /\.ya?ml$/i,
|
|
480
|
-
loader: 'js-yaml-loader',
|
|
481
|
-
options: { name: '[path][name].[ext]' },
|
|
482
|
-
},
|
|
483
|
-
{
|
|
484
|
-
test: /\.m?[tj]sx?$/,
|
|
485
|
-
// This excludes no modules except for node_modules/@rancher/... so that plugins can properly compile
|
|
486
|
-
// when referencing @rancher/shell
|
|
487
|
-
exclude: /node_modules\/(?!(@rancher)\/).*/,
|
|
488
|
-
use: [
|
|
489
|
-
{
|
|
490
|
-
loader: 'cache-loader',
|
|
491
|
-
options: {
|
|
492
|
-
cacheDirectory: 'node_modules/.cache/babel-loader',
|
|
493
|
-
cacheIdentifier: 'e93f32da'
|
|
494
|
-
}
|
|
495
|
-
},
|
|
496
|
-
{
|
|
497
|
-
loader: 'babel-loader',
|
|
498
|
-
options: {
|
|
499
|
-
presets: [
|
|
500
|
-
[
|
|
501
|
-
require.resolve('@nuxt/babel-preset-app'),
|
|
502
|
-
{
|
|
503
|
-
corejs: { version: 3 },
|
|
504
|
-
targets: { browsers: ['last 2 versions'] },
|
|
505
|
-
modern: true
|
|
506
|
-
}
|
|
507
|
-
],
|
|
508
|
-
'@babel/preset-typescript',
|
|
509
|
-
],
|
|
510
|
-
plugins: babelPlugins
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
]
|
|
514
|
-
},
|
|
515
|
-
{
|
|
516
|
-
test: /\.tsx?$/,
|
|
517
|
-
use: [
|
|
518
|
-
{
|
|
519
|
-
loader: 'cache-loader',
|
|
520
|
-
options: {
|
|
521
|
-
cacheDirectory: 'node_modules/.cache/ts-loader',
|
|
522
|
-
cacheIdentifier: '3596741e'
|
|
523
|
-
}
|
|
524
|
-
},
|
|
525
|
-
{
|
|
526
|
-
loader: 'ts-loader',
|
|
527
|
-
options: {
|
|
528
|
-
transpileOnly: true,
|
|
529
|
-
happyPackMode: false,
|
|
530
|
-
appendTsxSuffixTo: [
|
|
531
|
-
'\\.vue$'
|
|
532
|
-
],
|
|
533
|
-
configFile: path.join(SHELL_ABS, 'tsconfig.json')
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
]
|
|
537
|
-
},
|
|
538
|
-
// Prevent warning in log with the md files in the content folder
|
|
539
|
-
{
|
|
540
|
-
test: /\.md$/,
|
|
541
|
-
use: [
|
|
542
|
-
{
|
|
543
|
-
loader: 'frontmatter-markdown-loader',
|
|
544
|
-
options: { mode: ['body'] }
|
|
545
|
-
}
|
|
546
|
-
]
|
|
547
|
-
}
|
|
548
|
-
];
|
|
549
|
-
|
|
550
|
-
config.module.rules.push(...loaders);
|
|
551
|
-
|
|
552
|
-
// Update vue-loader to set whitespace to 'preserve'
|
|
553
|
-
// This was the setting with nuxt, but is not the default with vue cli
|
|
554
|
-
// Need to find the vue loader in the webpack config and update the setting
|
|
555
|
-
config.module.rules.forEach((loader) => {
|
|
556
|
-
if (loader.use) {
|
|
557
|
-
loader.use.forEach((use) => {
|
|
558
|
-
if (use.loader.includes('vue-loader')) {
|
|
559
|
-
use.options.compilerOptions.whitespace = 'preserve';
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
}
|
|
563
|
-
});
|
|
537
|
+
processShellFiles(config, SHELL_ABS);
|
|
538
|
+
config.module.rules.push(...getLoaders(SHELL_ABS));
|
|
539
|
+
preserveWhitespace(config);
|
|
564
540
|
},
|
|
565
541
|
};
|
|
566
542
|
|