@rancher/shell 0.5.3 → 1.2.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.
Files changed (356) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/images/providers/aks-black.svg +28 -0
  3. package/assets/images/providers/aks.svg +31 -0
  4. package/assets/styles/global/_labeled-input.scss +1 -0
  5. package/assets/styles/global/_layout.scss +0 -99
  6. package/assets/translations/en-us.yaml +76 -74
  7. package/assets/translations/zh-hans.yaml +25 -23
  8. package/babel.config.js +1 -7
  9. package/chart/gatekeeper.vue +11 -2
  10. package/chart/istio.vue +10 -1
  11. package/chart/logging/index.vue +11 -2
  12. package/chart/monitoring/alerting/index.vue +21 -7
  13. package/chart/monitoring/grafana/index.vue +2 -57
  14. package/chart/monitoring/index.vue +26 -52
  15. package/chart/monitoring/prometheus/index.vue +43 -37
  16. package/chart/rancher-backup/index.vue +10 -3
  17. package/cloud-credential/azure.vue +17 -4
  18. package/components/AsyncButton.vue +0 -9
  19. package/components/Carousel.vue +0 -1
  20. package/components/ChartPsp.vue +76 -0
  21. package/components/ClusterIconMenu.vue +9 -24
  22. package/components/CodeMirror.vue +16 -75
  23. package/components/CopyCode.vue +2 -6
  24. package/components/CopyToClipboard.vue +1 -2
  25. package/components/CopyToClipboardText.vue +9 -14
  26. package/components/CruResource.vue +0 -1
  27. package/components/EtcdInfoBanner.vue +5 -5
  28. package/components/ExplorerProjectsNamespaces.vue +1 -25
  29. package/components/FixedBanner.vue +0 -1
  30. package/components/IconOrSvg.vue +1 -1
  31. package/components/Markdown.vue +12 -16
  32. package/components/Questions/index.vue +1 -1
  33. package/components/ResourceDetail/Masthead.vue +9 -25
  34. package/components/ResourceDetail/index.vue +4 -1
  35. package/components/ResourceList/Masthead.vue +18 -1
  36. package/components/ResourceTable.vue +2 -14
  37. package/components/ResourceYaml.vue +5 -34
  38. package/components/SideNav.vue +65 -43
  39. package/components/SortableTable/THead.vue +9 -7
  40. package/components/SortableTable/index.vue +2 -1
  41. package/components/StatusTable.vue +1 -5
  42. package/components/TabTitle.vue +84 -0
  43. package/components/Tabbed/index.vue +0 -12
  44. package/components/YamlEditor.vue +0 -1
  45. package/components/__tests__/ChartPsp.test.ts +75 -0
  46. package/components/__tests__/CopyCode.test.ts +4 -5
  47. package/components/fleet/FleetBundles.vue +11 -5
  48. package/components/fleet/FleetRepos.vue +27 -62
  49. package/components/fleet/FleetResources.vue +1 -6
  50. package/components/fleet/FleetStatus.vue +3 -3
  51. package/components/fleet/FleetSummary.vue +30 -35
  52. package/components/form/ArrayList.vue +8 -1
  53. package/components/form/ArrayListSelect.vue +9 -9
  54. package/components/form/BannerSettings.vue +0 -3
  55. package/components/form/FileSelector.vue +0 -1
  56. package/components/form/KeyValue.vue +0 -2
  57. package/components/form/LabeledSelect.vue +0 -4
  58. package/components/form/Password.vue +1 -3
  59. package/components/form/Select.vue +1 -1
  60. package/components/form/SelectOrCreateAuthSecret.vue +4 -4
  61. package/components/form/__tests__/KeyValue.test.ts +1 -1
  62. package/components/formatter/Checked.vue +3 -11
  63. package/components/formatter/ClusterProvider.vue +18 -1
  64. package/components/formatter/FleetSummaryGraph.vue +11 -23
  65. package/components/formatter/LiveDate.vue +16 -0
  66. package/components/formatter/LiveDuration.vue +1 -1
  67. package/components/formatter/PercentageBar.vue +1 -1
  68. package/components/formatter/WorkloadDetailEndpoints.vue +22 -12
  69. package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
  70. package/components/nav/Group.vue +2 -2
  71. package/components/nav/Header.vue +2 -2
  72. package/components/nav/Jump.vue +9 -19
  73. package/components/nav/TopLevelMenu.vue +18 -66
  74. package/components/nav/Type.vue +7 -16
  75. package/components/nav/WindowManager/ContainerLogs.vue +19 -120
  76. package/components/nav/WindowManager/ContainerShell.vue +1 -6
  77. package/components/nav/WindowManager/index.vue +10 -11
  78. package/components/nav/__tests__/TopLevelMenu.test.ts +1 -34
  79. package/components/nav/__tests__/Type.test.ts +1 -31
  80. package/components/nuxt/nuxt-child.js +78 -14
  81. package/components/nuxt/nuxt.js +1 -1
  82. package/components/user.retention/user-retention-header.vue +34 -0
  83. package/composables/useI18n.ts +26 -0
  84. package/composables/useStore.ts +16 -0
  85. package/config/harvester-manager-types.js +0 -2
  86. package/config/home-links.js +32 -2
  87. package/config/private-label.js +0 -22
  88. package/config/product/explorer.js +4 -4
  89. package/config/product/fleet.js +1 -6
  90. package/config/product/legacy.js +1 -84
  91. package/config/product/manager.js +15 -8
  92. package/config/query-params.js +0 -1
  93. package/config/router.js +368 -385
  94. package/config/settings.ts +9 -2
  95. package/config/store.js +1 -1
  96. package/config/system-namespaces.js +0 -3
  97. package/config/table-headers.js +27 -47
  98. package/config/types.js +5 -0
  99. package/config/uiplugins.js +1 -1
  100. package/core/plugin-helpers.js +5 -3
  101. package/core/plugin-routes.ts +114 -56
  102. package/core/plugin.ts +10 -16
  103. package/core/plugins-loader.js +9 -7
  104. package/core/plugins.js +3 -0
  105. package/core/types-provisioning.ts +0 -7
  106. package/creators/app/init +0 -19
  107. package/detail/fleet.cattle.io.bundle.vue +1 -1
  108. package/detail/fleet.cattle.io.cluster.vue +1 -11
  109. package/detail/node.vue +0 -42
  110. package/detail/pod.vue +1 -68
  111. package/detail/provisioning.cattle.io.cluster.vue +8 -25
  112. package/detail/workload/index.vue +1 -15
  113. package/dialog/ScaleMachineDownDialog.vue +17 -34
  114. package/edit/auth/googleoauth.vue +5 -1
  115. package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
  116. package/edit/cloudcredential.vue +0 -2
  117. package/edit/fleet.cattle.io.gitrepo.vue +4 -3
  118. package/edit/management.cattle.io.project.vue +52 -1
  119. package/edit/management.cattle.io.setting.vue +2 -32
  120. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
  121. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -1
  122. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
  123. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
  124. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
  125. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  126. package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +125 -106
  127. package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
  128. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
  129. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
  130. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
  131. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  132. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
  133. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  134. package/edit/provisioning.cattle.io.cluster/index.vue +40 -109
  135. package/edit/provisioning.cattle.io.cluster/rke2.vue +689 -152
  136. package/edit/service.vue +0 -12
  137. package/edit/token.vue +0 -1
  138. package/edit/workload/Upgrading.vue +2 -3
  139. package/edit/workload/index.vue +1 -2
  140. package/edit/workload/mixins/workload.js +1 -1
  141. package/initialize/App.js +71 -25
  142. package/initialize/client.js +162 -21
  143. package/initialize/index.js +124 -47
  144. package/initialize/layouts.ts +26 -0
  145. package/{components/templates → layouts}/blank.vue +1 -1
  146. package/{components/templates → layouts}/default.vue +98 -8
  147. package/{components/templates → layouts}/error.vue +19 -10
  148. package/{components/templates → layouts}/home.vue +1 -4
  149. package/{components/templates → layouts}/plain.vue +1 -4
  150. package/{components/templates → layouts}/standalone.vue +1 -1
  151. package/{components/templates → layouts}/unauthenticated.vue +1 -1
  152. package/list/catalog.cattle.io.app.vue +0 -1
  153. package/list/management.cattle.io.feature.vue +7 -1
  154. package/list/management.cattle.io.setting.vue +0 -1
  155. package/list/management.cattle.io.user.vue +25 -1
  156. package/list/node.vue +0 -1
  157. package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
  158. package/machine-config/azure.vue +37 -21
  159. package/machine-config/vmwarevsphere.vue +47 -42
  160. package/middleware/authenticated.js +19 -14
  161. package/mixins/auth-config.js +7 -2
  162. package/mixins/brand.js +41 -29
  163. package/mixins/fetch.server.js +73 -0
  164. package/mixins/labeled-form-element.ts +1 -6
  165. package/models/__tests__/management.cattle.io.node.ts +0 -85
  166. package/models/__tests__/namespace.test.ts +9 -49
  167. package/models/cluster/node.js +4 -4
  168. package/models/cluster.x-k8s.io.machine.js +1 -1
  169. package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
  170. package/models/fleet.cattle.io.cluster.js +0 -4
  171. package/models/fleet.cattle.io.gitrepo.js +13 -56
  172. package/models/management.cattle.io.cluster.js +3 -11
  173. package/models/management.cattle.io.kontainerdriver.js +0 -1
  174. package/models/management.cattle.io.node.js +14 -18
  175. package/models/management.cattle.io.nodepool.js +0 -17
  176. package/models/management.cattle.io.project.js +36 -0
  177. package/models/management.cattle.io.setting.js +7 -11
  178. package/models/management.cattle.io.user.js +65 -0
  179. package/models/namespace.js +1 -1
  180. package/models/pod.js +0 -20
  181. package/models/provisioning.cattle.io.cluster.js +9 -91
  182. package/models/secret.js +18 -126
  183. package/models/storage.k8s.io.storageclass.js +1 -1
  184. package/models/workload.js +0 -16
  185. package/models/workload.service.js +0 -18
  186. package/package.json +10 -12
  187. package/pages/about.vue +1 -0
  188. package/pages/account/create-key.vue +1 -0
  189. package/pages/account/index.vue +1 -0
  190. package/pages/auth/login.vue +1 -0
  191. package/pages/auth/logout.vue +2 -0
  192. package/pages/auth/setup.vue +4 -37
  193. package/pages/auth/verify.vue +8 -14
  194. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
  195. package/pages/c/_cluster/apps/charts/index.vue +58 -64
  196. package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
  197. package/pages/c/_cluster/apps/charts/install.vue +5 -5
  198. package/pages/c/_cluster/apps/index.vue +2 -0
  199. package/pages/c/_cluster/auth/index.vue +2 -0
  200. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  201. package/pages/c/_cluster/ecm/index.vue +2 -0
  202. package/pages/c/_cluster/explorer/index.vue +53 -56
  203. package/pages/c/_cluster/explorer/tools/index.vue +3 -171
  204. package/pages/c/_cluster/fleet/index.vue +1 -1
  205. package/pages/c/_cluster/index.vue +2 -0
  206. package/pages/c/_cluster/manager/pages/_page.vue +5 -4
  207. package/pages/c/_cluster/monitoring/index.vue +1 -17
  208. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -1
  209. package/pages/c/_cluster/settings/banners.vue +2 -0
  210. package/pages/c/_cluster/settings/brand.vue +2 -3
  211. package/pages/c/_cluster/settings/index.vue +2 -0
  212. package/pages/c/_cluster/settings/links.vue +3 -2
  213. package/pages/c/_cluster/settings/performance.vue +1 -0
  214. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
  215. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
  216. package/pages/c/_cluster/uiplugins/index.vue +2 -0
  217. package/pages/c/index.vue +9 -0
  218. package/pages/diagnostic.vue +2 -1
  219. package/pages/fail-whale.vue +1 -0
  220. package/pages/prefs.vue +1 -0
  221. package/pages/rio/mesh.vue +508 -0
  222. package/pages/support/index.vue +8 -2
  223. package/pkg/auto-import.js +1 -1
  224. package/plugins/axios.js +36 -0
  225. package/plugins/back-button.js +5 -3
  226. package/plugins/clean-html-directive.js +19 -1
  227. package/plugins/clean-tooltip-directive.js +1 -1
  228. package/plugins/codemirror-loader.js +1 -1
  229. package/plugins/codemirror.js +0 -41
  230. package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
  231. package/plugins/dashboard-store/actions.js +17 -16
  232. package/plugins/dashboard-store/classify.js +18 -1
  233. package/plugins/dashboard-store/getters.js +7 -70
  234. package/plugins/dashboard-store/index.js +12 -0
  235. package/plugins/dashboard-store/mutations.js +4 -0
  236. package/plugins/dashboard-store/resource-class.js +20 -65
  237. package/plugins/i18n.js +1 -1
  238. package/plugins/steve/__tests__/getters.spec.ts +48 -26
  239. package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
  240. package/plugins/steve/actions.js +37 -3
  241. package/plugins/steve/getters.js +24 -7
  242. package/plugins/steve/mutations.js +5 -2
  243. package/plugins/steve/norman-class.js +0 -19
  244. package/plugins/steve/steve-class.js +0 -22
  245. package/plugins/steve/subscribe.js +34 -13
  246. package/plugins/transitions.js +4 -0
  247. package/plugins/vue-clipboard2.js +4 -0
  248. package/rancher-components/Accordion/Accordion.vue +3 -2
  249. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  250. package/rancher-components/Banner/Banner.test.ts +1 -5
  251. package/rancher-components/Banner/Banner.vue +2 -2
  252. package/rancher-components/Card/Card.vue +4 -4
  253. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  254. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  255. package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
  256. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  257. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  258. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  259. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  260. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  261. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  262. package/rancher-components/StringList/StringList.vue +8 -8
  263. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  264. package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
  265. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
  266. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
  267. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
  268. package/rancher-components/components/StringList/StringList.test.ts +0 -270
  269. package/rancher-components/components/StringList/StringList.vue +18 -57
  270. package/scripts/extension/bundle +7 -19
  271. package/scripts/extension/helm/scripts/package +3 -11
  272. package/scripts/extension/parse-tag-name +4 -4
  273. package/scripts/extension/publish +9 -20
  274. package/scripts/publish-shell.sh +1 -11
  275. package/scripts/test-plugins-build.sh +9 -85
  276. package/store/catalog.js +1 -1
  277. package/store/features.js +0 -1
  278. package/store/i18n.js +0 -11
  279. package/store/index.js +13 -11
  280. package/store/prefs.js +38 -33
  281. package/store/type-map.js +82 -157
  282. package/tsconfig.default.json +46 -0
  283. package/tsconfig.json +9 -35
  284. package/types/shell/index.d.ts +407 -468
  285. package/utils/axios.js +19 -0
  286. package/utils/create-yaml.js +1 -5
  287. package/utils/custom-validators.js +2 -0
  288. package/utils/error.js +1 -16
  289. package/utils/monitoring.js +2 -37
  290. package/utils/nuxt.js +39 -18
  291. package/utils/object.js +0 -24
  292. package/utils/router.scrollBehavior.js +14 -12
  293. package/utils/socket.js +1 -0
  294. package/utils/time.js +1 -1
  295. package/utils/title.ts +3 -0
  296. package/utils/url.ts +1 -1
  297. package/utils/validators/formRules/__tests__/index.test.ts +4 -49
  298. package/utils/validators/formRules/index.ts +9 -12
  299. package/utils/validators/setting.js +10 -6
  300. package/vue.config.js +3 -24
  301. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  302. package/components/Certificates.vue +0 -164
  303. package/components/__tests__/CodeMirror.spec.ts +0 -99
  304. package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
  305. package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
  306. package/components/formatter/__tests__/Checked.test.ts +0 -19
  307. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +0 -81
  308. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
  309. package/composables/useCompactInput.ts +0 -20
  310. package/composables/useLabeledFormElement.ts +0 -138
  311. package/creators/app/files/.gitlab-ci.yml +0 -14
  312. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +0 -77
  313. package/edit/__tests__/service.test.ts +0 -89
  314. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
  315. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
  316. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
  317. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
  318. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
  319. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
  320. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
  321. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
  322. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -147
  323. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
  324. package/mixins/v1-workload-metrics.js +0 -43
  325. package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
  326. package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
  327. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -241
  328. package/models/__tests__/secret.test.ts +0 -37
  329. package/models/__tests__/storage.k8s.io.storageclass.test.ts +0 -22
  330. package/models/__tests__/workload.test.ts +0 -91
  331. package/plugins/clean-html.js +0 -53
  332. package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
  333. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
  334. package/plugins/index.js +0 -11
  335. package/plugins/steve/__tests__/resource-utils.test.ts +0 -159
  336. package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
  337. package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
  338. package/plugins/steve/resource-utils.ts +0 -38
  339. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
  340. package/server/har-file.js +0 -183
  341. package/store/__tests__/type-map.test.ts +0 -1122
  342. package/tsconfig.paths.json +0 -18
  343. package/utils/azure.js +0 -24
  344. package/utils/clipboard.js +0 -5
  345. /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
  346. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
  347. /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
  348. /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
  349. /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
  350. /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
  351. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +0 -0
  352. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
  353. /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
  354. /package/plugins/dashboard-store/__tests__/{actions.test.ts → actions.spec.ts} +0 -0
  355. /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
  356. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
package/store/prefs.js CHANGED
@@ -112,6 +112,9 @@ export const _RKE1 = 'rke1';
112
112
  export const _RKE2 = 'rke2';
113
113
  export const PROVISIONER = create('provisioner', _RKE2, { options: [_RKE1, _RKE2] });
114
114
 
115
+ // Promo for Pod Security Policies (PSPs) being deprecated on kube version 1.25 on Cluster Dashboard page
116
+ export const PSP_DEPRECATION_BANNER = create('hide-psp-deprecation-banner', false, { parseJSON });
117
+
115
118
  // Maximum number of clusters to show in the slide-in menu
116
119
  export const MENU_MAX_CLUSTERS = 10;
117
120
  // Prompt for confirm when scaling down node pool in GUI and save the pref
@@ -345,44 +348,46 @@ export const actions = {
345
348
  commit('cookiesLoaded');
346
349
  },
347
350
 
348
- loadTheme({ dispatch }) {
349
- const watchDark = window.matchMedia('(prefers-color-scheme: dark)');
350
- const watchLight = window.matchMedia('(prefers-color-scheme: light)');
351
- const watchNone = window.matchMedia('(prefers-color-scheme: no-preference)');
352
-
353
- const interval = 30 * 60 * 1000;
354
- const nextHalfHour = interval - Math.round(new Date().getTime()) % interval;
355
-
356
- setTimeout(() => {
357
- dispatch('loadTheme');
358
- }, nextHalfHour);
359
- // console.log('Update theme in', nextHalfHour, 'ms');
360
-
361
- if ( watchDark.matches ) {
362
- changed('dark');
363
- } else if ( watchLight.matches ) {
364
- changed('light');
365
- } else {
366
- changed(fromClock());
367
- }
351
+ loadTheme({ state, dispatch }) {
352
+ if ( process.client ) {
353
+ const watchDark = window.matchMedia('(prefers-color-scheme: dark)');
354
+ const watchLight = window.matchMedia('(prefers-color-scheme: light)');
355
+ const watchNone = window.matchMedia('(prefers-color-scheme: no-preference)');
368
356
 
369
- watchDark.addListener((e) => {
370
- if ( e.matches ) {
371
- changed('dark');
372
- }
373
- });
357
+ const interval = 30 * 60 * 1000;
358
+ const nextHalfHour = interval - Math.round(new Date().getTime()) % interval;
374
359
 
375
- watchLight.addListener((e) => {
376
- if ( e.matches ) {
377
- changed('light');
378
- }
379
- });
360
+ setTimeout(() => {
361
+ dispatch('loadTheme');
362
+ }, nextHalfHour);
363
+ // console.log('Update theme in', nextHalfHour, 'ms');
380
364
 
381
- watchNone.addListener((e) => {
382
- if ( e.matches ) {
365
+ if ( watchDark.matches ) {
366
+ changed('dark');
367
+ } else if ( watchLight.matches ) {
368
+ changed('light');
369
+ } else {
383
370
  changed(fromClock());
384
371
  }
385
- });
372
+
373
+ watchDark.addListener((e) => {
374
+ if ( e.matches ) {
375
+ changed('dark');
376
+ }
377
+ });
378
+
379
+ watchLight.addListener((e) => {
380
+ if ( e.matches ) {
381
+ changed('light');
382
+ }
383
+ });
384
+
385
+ watchNone.addListener((e) => {
386
+ if ( e.matches ) {
387
+ changed(fromClock());
388
+ }
389
+ });
390
+ }
386
391
 
387
392
  function changed(value) {
388
393
  // console.log('Prefers Theme:', value);
package/store/type-map.js CHANGED
@@ -148,55 +148,17 @@ import isObject from 'lodash/isObject';
148
148
  import { normalizeType } from '@shell/plugins/dashboard-store/normalize';
149
149
  import { sortBy } from '@shell/utils/sort';
150
150
 
151
- import { haveV1Monitoring, haveV2Monitoring } from '@shell/utils/monitoring';
151
+ import { haveV2Monitoring } from '@shell/utils/monitoring';
152
152
  import { NEU_VECTOR_NAMESPACE } from '@shell/config/product/neuvector';
153
153
 
154
154
  export const NAMESPACED = 'namespaced';
155
155
  export const CLUSTER_LEVEL = 'cluster';
156
156
  export const BOTH = 'both';
157
157
 
158
- export const TYPE_MODES = {
159
- /**
160
- * allTypes usage: All resource types
161
- *
162
- * getTree usage: Remove ignored schemas, resources not applicable to ns, etc
163
- */
164
- ALL: 'all',
165
- /**
166
- * Represents resource types that should be shown at the top of the side nav.
167
- *
168
- * For example all fixed resource types above `More Resources` in the cluster explorer
169
- *
170
- * These will always be shown in the side nav
171
- *
172
- * allTypes usage: Resources that are in a group
173
- *
174
- * getTree usage: Remove ignored schemas, resources not applicable to ns, etc
175
- */
176
- BASIC: 'basic',
177
- /**
178
- * Represents any type of resource type that has been favourited
179
- *
180
- * These will always be shown in the side nav.
181
- *
182
- * allTypes usage: Resource types that have been favorited
183
- *
184
- * getTree usage: Remove ignored schemas, resources not applicable to ns, etc
185
- */
186
- FAVORITE: 'favorite',
187
- /**
188
- * Represents no virtual or spoofed types that have a count.
189
- *
190
- * For example the `More Resource` in the cluster explorer
191
- *
192
- * These will be shown in the side nav if there are resources in the ns filter OR the resource is not namespaces
193
- *
194
- * allTypes usage: All resource types that are not virtual or spoofed
195
- *
196
- * getTree usage: Remove types with no counts. Remove ignored schemas, resources not applicable to ns, etc
197
- */
198
- USED: 'used',
199
- };
158
+ export const ALL = 'all';
159
+ export const BASIC = 'basic';
160
+ export const FAVORITE = 'favorite';
161
+ export const USED = 'used';
200
162
 
201
163
  export const ROOT = 'root';
202
164
 
@@ -209,7 +171,6 @@ const graphConfigMap = {};
209
171
  const FIELD_REGEX = /^\$\.metadata\.fields\[([0-9]*)\]/;
210
172
 
211
173
  export const IF_HAVE = {
212
- V1_MONITORING: 'v1-monitoring',
213
174
  V2_MONITORING: 'v2-monitoring',
214
175
  PROJECT: 'project',
215
176
  NO_PROJECT: 'no-project',
@@ -573,16 +534,17 @@ export const getters = {
573
534
  },
574
535
 
575
536
  getTree(state, getters, rootState, rootGetters) {
576
- // Name the function so it's easily identifiable when performance tracing
577
- return function getTree(productId, mode, allTypes, clusterId, namespaceMode, currentType, search) {
537
+ return (productId, mode, allTypes, clusterId, namespaceMode, namespaces, currentType, search) => {
578
538
  // getTree has four modes:
579
- // - `basic` matches data types that should always be shown (even if there are 0 of them).
580
- // - `used` matches the data types where there are more than 0 of them in the current set of namespaces.
539
+ // - `basic` matches data types that should always be shown even if there
540
+ // are 0 of them.
541
+ // - `used` matches the data types where there are more than 0 of them
542
+ // in the current set of namespaces.
581
543
  // - `all` matches all types.
582
544
  // - `favorite` matches starred types.
583
545
  // namespaceMode: 'namespaced', 'cluster', or 'both'
584
546
  // namespaces: null means all, otherwise it will be an array of specific namespaces to include
585
- const isBasic = mode === TYPE_MODES.BASIC;
547
+ const isBasic = mode === BASIC;
586
548
 
587
549
  let searchRegex;
588
550
 
@@ -615,8 +577,7 @@ export const getters = {
615
577
  continue;
616
578
  }
617
579
 
618
- const inStore = rootGetters.currentStore(typeObj.name);
619
- const count = rootGetters[`${ inStore }/count`](typeObj);
580
+ const count = _matchingCounts(typeObj, namespaces);
620
581
  const groupForBasicType = getters.groupForBasicType(productId, typeObj.name);
621
582
 
622
583
  if ( typeObj.id === currentType ) {
@@ -624,7 +585,7 @@ export const getters = {
624
585
  } else if ( isBasic && !groupForBasicType ) {
625
586
  // If we want the basic tree only return basic types;
626
587
  continue;
627
- } else if ( mode === TYPE_MODES.USED && count <= 0 ) {
588
+ } else if ( mode === USED && count <= 0 ) {
628
589
  // If there's none of this type, ignore this entry when viewing only in-use types
629
590
  // Note: count is sometimes null, which is <= 0.
630
591
  continue;
@@ -632,7 +593,7 @@ export const getters = {
632
593
 
633
594
  const label = typeObj.labelKey ? rootGetters['i18n/t'](typeObj.labelKey) || typeObj.label : typeObj.label;
634
595
 
635
- const labelDisplay = highlightLabel(label, count, typeObj.schema);
596
+ const labelDisplay = highlightLabel(label, typeObj.count, typeObj.schema);
636
597
 
637
598
  if ( !labelDisplay ) {
638
599
  // Search happens in highlight and returns null if not found
@@ -643,10 +604,10 @@ export const getters = {
643
604
 
644
605
  if ( isBasic ) {
645
606
  group = _ensureGroup(root, groupForBasicType, true);
646
- } else if ( mode === TYPE_MODES.FAVORITE ) {
607
+ } else if ( mode === FAVORITE ) {
647
608
  group = _ensureGroup(root, 'starred');
648
609
  group.weight = 1000;
649
- } else if ( mode === TYPE_MODES.USED ) {
610
+ } else if ( mode === USED ) {
650
611
  group = _ensureGroup(root, `inUse::${ getters.groupLabelFor(typeObj.schema) }`);
651
612
  } else {
652
613
  group = _ensureGroup(root, typeObj.schema || typeObj.group || ROOT);
@@ -679,6 +640,7 @@ export const getters = {
679
640
  label,
680
641
  labelDisplay,
681
642
  mode: typeObj.mode,
643
+ count,
682
644
  exact: typeObj.exact || false,
683
645
  namespaced,
684
646
  route,
@@ -848,109 +810,69 @@ export const getters = {
848
810
  });
849
811
  },
850
812
 
851
- /**
852
- * Given many things, create a list of menu items per schema given the mode
853
- */
854
813
  allTypes(state, getters, rootState, rootGetters) {
855
- // Name the function so it's easily identifiable when performance tracing
856
- return function allTypes(product, modes = [TYPE_MODES.ALL]) {
857
- const module = state.products.find((p) => p.name === product)?.inStore;
814
+ return (product, mode = ALL) => {
815
+ const module = findBy(state.products, 'name', product)?.inStore;
858
816
  const schemas = rootGetters[`${ module }/all`](SCHEMA);
859
- const isLocal = !rootGetters.currentCluster?.isLocal;
860
- const isRancher = rootGetters.isRancher;
861
817
  const counts = rootGetters[`${ module }/all`](COUNT)?.[0]?.counts || {};
818
+ const isDev = rootGetters['prefs/get'](VIEW_IN_API);
819
+ const isBasic = mode === BASIC;
862
820
 
863
821
  const out = {};
864
822
 
865
- // For performance reasons this must be super quick to iterate over.
866
- // For each schema...
867
- // 1) Determine if it's applicable given the mode
868
- // 2) For each applicable mode create a `Type` entry
869
823
  for ( const schema of schemas ) {
870
- let schemaModes = { };
871
-
872
- modes.forEach((m) => {
873
- schemaModes[m] = true;
874
- });
875
-
876
824
  const attrs = schema.attributes || {};
825
+ const count = counts[schema.id];
826
+ const label = getters.labelFor(schema, count);
827
+ const weight = getters.typeWeightFor(schema?.id || label, isBasic);
877
828
  const typeOptions = getters['optionsFor'](schema);
878
829
 
879
- schemaModes[TYPE_MODES.BASIC] = schemaModes[TYPE_MODES.BASIC] && getters.groupForBasicType(product, schema.id);
880
-
881
- if (Object.values(schemaModes).every((s) => !s)) {
830
+ if ( isBasic ) {
831
+ // These are separate ifs so that things with no kind can still be basic
832
+ if ( !getters.groupForBasicType(product, schema.id) ) {
833
+ continue;
834
+ }
835
+ } else if ( mode === FAVORITE && !getters.isFavorite(schema.id) ) {
882
836
  continue;
883
- }
884
-
885
- schemaModes[TYPE_MODES.FAVORITE] = schemaModes[TYPE_MODES.FAVORITE] && getters.isFavorite(schema.id);
886
-
887
- if (Object.values(schemaModes).every((s) => !s)) {
837
+ } else if ( !attrs.kind ) {
838
+ // Skip the schemas that aren't top-level types
839
+ continue;
840
+ } else if ( typeof typeOptions.ifRancherCluster !== 'undefined' && typeOptions.ifRancherCluster !== rootGetters.isRancher ) {
841
+ continue;
842
+ } else if (typeOptions.localOnly && !rootGetters.currentCluster?.isLocal) {
888
843
  continue;
889
844
  }
890
845
 
891
- const onlyBasic = schemaModes[TYPE_MODES.BASIC] && modes.length === 1;
892
-
893
- // This clause is only valid for non-basic modes. So if we have only basic... skip it
894
- if (!onlyBasic) {
895
- const invalidType = !attrs.kind ||
896
- (typeof typeOptions.ifRancherCluster !== 'undefined' && typeOptions.ifRancherCluster !== isRancher) ||
897
- (typeOptions.localOnly && isLocal);
898
-
899
- if (invalidType) {
900
- // Remove anything not basic
901
- schemaModes = { [TYPE_MODES.BASIC]: schemaModes[TYPE_MODES.BASIC] };
902
- }
903
- }
904
-
905
- // This is an expensive request to make, so only do it if we really need to
906
- let label;
907
-
908
- Object.entries(schemaModes).forEach(([mode, enabled]) => {
909
- if (!enabled) {
910
- return;
911
- }
912
-
913
- if (!out[mode]) {
914
- out[mode] = {};
915
- }
916
-
917
- if (!label) {
918
- label = getters.labelFor(schema, counts[schema.id]);
919
- }
920
-
921
- out[mode][schema.id] = {
922
- label,
923
- mode,
924
- weight: getters.typeWeightFor(schema?.id || label, mode === TYPE_MODES.BASIC),
925
- schema,
926
- name: schema.id,
927
- namespaced: typeOptions.namespaced === null ? attrs.namespaced : typeOptions.namespaced,
928
- route: typeOptions.customRoute
929
- };
930
- });
846
+ out[schema.id] = {
847
+ label,
848
+ mode,
849
+ weight,
850
+ schema,
851
+ name: schema.id,
852
+ namespaced: typeOptions.namespaced === null ? attrs.namespaced : typeOptions.namespaced,
853
+ count: count ? count.summary.count || 0 : null,
854
+ byNamespace: count ? count.namespaces : {},
855
+ revision: count ? count.revision : null,
856
+ route: typeOptions.customRoute
857
+ };
931
858
  }
932
859
 
933
- const nonUsedModes = modes.filter((m) => m !== TYPE_MODES.USED);
934
- const isDev = rootGetters['prefs/get'](VIEW_IN_API);
935
-
936
860
  // Add virtual and spoofed types
937
- if ( nonUsedModes.length ) {
861
+ if ( mode !== USED ) {
938
862
  const virtualTypes = state.virtualTypes[product] || [];
939
863
  const spoofedTypes = state.spoofedTypes[product] || [];
940
864
  const allTypes = [...virtualTypes, ...spoofedTypes];
941
- const virtSpoofedModes = [...nonUsedModes];
942
865
 
943
866
  for ( const type of allTypes ) {
944
867
  const item = clone(type);
945
868
  const id = item.name;
869
+ const weight = type.weight || getters.typeWeightFor(item.label, isBasic);
946
870
 
947
871
  // Is there a virtual/spoofed type override for schema type?
948
872
  // Currently used by harvester, this should be investigated and removed if possible
949
- virtSpoofedModes.forEach((mode) => {
950
- if (out[mode]?.[id]) {
951
- delete out[mode][id];
952
- }
953
- });
873
+ if (out[id]) {
874
+ delete out[id];
875
+ }
954
876
 
955
877
  if ( item['public'] === false && !isDev ) {
956
878
  continue;
@@ -989,17 +911,14 @@ export const getters = {
989
911
  continue;
990
912
  }
991
913
 
992
- if (item.ifFeature && !rootGetters['features/get'](item.ifFeature)) {
914
+ if ( isBasic && !getters.groupForBasicType(product, id) ) {
915
+ continue;
916
+ } else if ( mode === FAVORITE && !getters.isFavorite(id) ) {
993
917
  continue;
994
918
  }
995
919
 
996
- if (virtSpoofedModes.includes(TYPE_MODES.BASIC) && !getters.groupForBasicType(product, id) ) {
997
- virtSpoofedModes.splice(virtSpoofedModes.indexOf(TYPE_MODES.BASIC), 1);
998
- }
999
-
1000
- if (virtSpoofedModes.includes(TYPE_MODES.FAVORITE) && !getters.isFavorite(id) ) { // mode === TYPE_MODES.FAVORITE &&
1001
- virtSpoofedModes.splice(virtSpoofedModes.indexOf(TYPE_MODES.FAVORITE), 1);
1002
- }
920
+ item.mode = mode;
921
+ item.weight = weight;
1003
922
 
1004
923
  // Ensure labelKey is taken into account... with a mock count
1005
924
  // This is harmless if the translation doesn't require count
@@ -1010,17 +929,7 @@ export const getters = {
1010
929
  item.label = item.label || item.name;
1011
930
  }
1012
931
 
1013
- virtSpoofedModes.forEach((mode) => {
1014
- const isBasic = mode === TYPE_MODES.BASIC;
1015
- const weight = type.weight || getters.typeWeightFor(item.label, isBasic);
1016
-
1017
- item.mode = mode;
1018
- item.weight = weight;
1019
- if (!out[mode]) {
1020
- out[mode] = {};
1021
- }
1022
- out[mode][id] = item;
1023
- });
932
+ out[id] = item;
1024
933
  }
1025
934
  }
1026
935
 
@@ -1770,6 +1679,22 @@ function _sortGroup(tree, mode) {
1770
1679
  }
1771
1680
  }
1772
1681
 
1682
+ function _matchingCounts(typeObj, namespaces) {
1683
+ // That was easy
1684
+ if ( !typeObj.namespaced || !typeObj.byNamespace || namespaces === null || typeObj.count === null) {
1685
+ return typeObj.count;
1686
+ }
1687
+
1688
+ let out = 0;
1689
+
1690
+ // Otherwise start with 0 and count up
1691
+ for ( const namespace of namespaces ) {
1692
+ out += typeObj.byNamespace[namespace]?.count || 0;
1693
+ }
1694
+
1695
+ return out;
1696
+ }
1697
+
1773
1698
  function _applyMapping(objOrValue, mappings, keyField, cache, defaultFn) {
1774
1699
  let key = objOrValue;
1775
1700
  let found = false;
@@ -1863,9 +1788,6 @@ function ifHave(getters, option) {
1863
1788
  case IF_HAVE.V2_MONITORING: {
1864
1789
  return haveV2Monitoring(getters);
1865
1790
  }
1866
- case IF_HAVE.V1_MONITORING: {
1867
- return haveV1Monitoring(getters);
1868
- }
1869
1791
  case IF_HAVE.PROJECT: {
1870
1792
  return !!project(getters);
1871
1793
  }
@@ -1918,12 +1840,15 @@ function _rowValueGetter(col) {
1918
1840
  // We will use JsonPath to look up this value, which is costly - so if we can detect this format
1919
1841
  // Use a more efficient function to get the value
1920
1842
  const value = col.field.startsWith('.') ? `$${ col.field }` : col.field;
1921
- const found = value.match(FIELD_REGEX);
1922
1843
 
1923
- if (found && found.length === 2) {
1924
- const fieldIndex = parseInt(found[1], 10);
1844
+ if (process.client) {
1845
+ const found = value.match(FIELD_REGEX);
1846
+
1847
+ if (found && found.length === 2) {
1848
+ const fieldIndex = parseInt(found[1], 10);
1925
1849
 
1926
- return (row) => row.metadata?.fields?.[fieldIndex];
1850
+ return (row) => row.metadata?.fields?.[fieldIndex];
1851
+ }
1927
1852
  }
1928
1853
 
1929
1854
  return value;
@@ -0,0 +1,46 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2018",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Node",
6
+ "lib": [
7
+ "ESNext",
8
+ "ESNext.AsyncIterable",
9
+ "DOM"
10
+ ],
11
+ "esModuleInterop": true,
12
+ "allowJs": true,
13
+ "sourceMap": true,
14
+ "strict": true,
15
+ "noEmit": false,
16
+ "baseUrl": ".",
17
+ "rootDir": ".",
18
+ "paths": {
19
+ "~/*": [
20
+ "../*"
21
+ ],
22
+ "@/*": [
23
+ "../*"
24
+ ],
25
+ "@shell/*": [
26
+ "../shell/*"
27
+ ],
28
+ "@pkg/*": [
29
+ "../shell/pkg/*"
30
+ ]
31
+ },
32
+ "typeRoots": [
33
+ "./node_modules/@types"
34
+ ],
35
+ },
36
+ "exclude": [
37
+ "node_modules",
38
+ ".nuxt",
39
+ "dist",
40
+ "dist-pkg",
41
+ "shell/creators",
42
+ "shell/scripts",
43
+ "script/standalone",
44
+ "docusaurus"
45
+ ]
46
+ }
package/tsconfig.json CHANGED
@@ -1,42 +1,16 @@
1
1
  {
2
- "extends": "./tsconfig.paths.json",
2
+ "extends": "./tsconfig.default.json",
3
3
  "compilerOptions": {
4
- "target": "ES2018",
5
- "module": "ESNext",
6
- "moduleResolution": "Node",
7
- "lib": [
8
- "ESNext",
9
- "ESNext.AsyncIterable",
10
- "DOM"
11
- ],
12
- "allowJs": true,
13
- "sourceMap": true,
14
- "strict": true,
15
- "noEmit": false,
16
- "esModuleInterop": true,
17
- "baseUrl": ".",
18
- "rootDir": ".",
19
4
  "types": [
20
- "node",
21
- "jest",
22
- ],
23
- "typeRoots": [
24
- "./node_modules/@types",
25
- "../node_modules/@types"
26
- ],
5
+ "@types/node",
6
+ "@types/jest",
7
+ "@nuxt/types",
8
+ ]
27
9
  },
28
10
  "exclude": [
29
- "node_modules",
30
- ".nuxt",
31
- "dist",
32
- "dist-pkg",
33
- "../dist",
34
- "../dist-pkg",
35
- "../creators",
36
- "../scripts",
37
- "../cypress",
38
- "../cypress.config.ts",
39
- "../docusaurus",
40
- "../**/*.spec.ts"
11
+ "cypress",
12
+ "./cypress.config.ts",
13
+ "**/*.test.ts",
14
+ "**/*.spec.ts"
41
15
  ]
42
16
  }