@rancher/shell 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/assets/images/providers/ovhcloudmks.svg +122 -0
  2. package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
  3. package/assets/styles/global/_layout.scss +99 -0
  4. package/assets/translations/en-us.yaml +30 -5
  5. package/assets/translations/zh-hans.yaml +1 -1
  6. package/babel.config.js +7 -1
  7. package/chart/monitoring/alerting/index.vue +7 -21
  8. package/chart/monitoring/grafana/index.vue +55 -0
  9. package/chart/monitoring/index.vue +51 -17
  10. package/chart/monitoring/prometheus/index.vue +37 -43
  11. package/chart/rancher-backup/index.vue +2 -1
  12. package/cloud-credential/azure.vue +4 -17
  13. package/components/AsyncButton.vue +17 -5
  14. package/components/Certificates.vue +164 -0
  15. package/components/CodeMirror.vue +19 -21
  16. package/components/CruResource.vue +1 -0
  17. package/components/DraggableZone.vue +2 -2
  18. package/components/EtcdInfoBanner.vue +1 -1
  19. package/components/ExplorerProjectsNamespaces.vue +25 -1
  20. package/components/IconOrSvg.vue +1 -1
  21. package/components/LandingPagePreference.vue +1 -4
  22. package/components/PodSecurityAdmission.vue +2 -2
  23. package/components/Questions/index.vue +1 -1
  24. package/components/ResourceDetail/Masthead.vue +16 -3
  25. package/components/ResourceTable.vue +14 -2
  26. package/components/ResourceYaml.vue +5 -0
  27. package/components/SideNav.vue +1 -1
  28. package/components/SingleClusterInfo.vue +1 -4
  29. package/components/Tabbed/index.vue +12 -0
  30. package/components/fleet/FleetRepos.vue +62 -27
  31. package/components/fleet/FleetResources.vue +6 -1
  32. package/components/form/ArrayListSelect.vue +10 -0
  33. package/components/form/Error.vue +3 -3
  34. package/components/form/Footer.vue +2 -2
  35. package/components/form/GitPicker.vue +83 -38
  36. package/components/form/KeyValue.vue +4 -0
  37. package/components/form/LabeledSelect.vue +4 -0
  38. package/components/formatter/Checked.vue +11 -3
  39. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  40. package/components/formatter/FleetSummaryGraph.vue +23 -11
  41. package/components/formatter/LiveDuration.vue +1 -1
  42. package/components/formatter/PercentageBar.vue +1 -1
  43. package/components/formatter/__tests__/Checked.test.ts +19 -0
  44. package/components/nav/Group.vue +2 -2
  45. package/components/nav/Header.vue +0 -1
  46. package/components/nav/TopLevelMenu.vue +36 -6
  47. package/components/nav/Type.vue +1 -3
  48. package/components/nav/WindowManager/ContainerLogs.vue +101 -3
  49. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  50. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  51. package/components/nav/WindowManager/index.vue +11 -10
  52. package/components/nav/__tests__/TopLevelMenu.test.ts +33 -0
  53. package/components/nav/__tests__/Type.test.ts +1 -1
  54. package/components/nuxt/nuxt-child.js +14 -78
  55. package/components/nuxt/nuxt.js +1 -1
  56. package/{layouts → components/templates}/blank.vue +1 -1
  57. package/{layouts → components/templates}/default.vue +8 -98
  58. package/{layouts → components/templates}/error.vue +10 -19
  59. package/{layouts → components/templates}/home.vue +4 -1
  60. package/{layouts → components/templates}/plain.vue +4 -1
  61. package/{layouts → components/templates}/standalone.vue +1 -1
  62. package/{layouts → components/templates}/unauthenticated.vue +1 -1
  63. package/composables/useCompactInput.test.ts +36 -0
  64. package/composables/useCompactInput.ts +20 -0
  65. package/composables/useLabeledFormElement.test.ts +135 -0
  66. package/composables/useLabeledFormElement.ts +138 -0
  67. package/config/harvester-manager-types.js +2 -0
  68. package/config/private-label.js +22 -0
  69. package/config/product/explorer.js +3 -0
  70. package/config/product/fleet.js +6 -1
  71. package/config/product/manager.js +8 -2
  72. package/config/query-params.js +1 -0
  73. package/config/router.js +385 -364
  74. package/config/settings.ts +1 -0
  75. package/config/store.js +1 -1
  76. package/config/system-namespaces.js +3 -0
  77. package/config/table-headers.js +47 -0
  78. package/core/plugin-routes.ts +56 -114
  79. package/core/plugin.ts +16 -10
  80. package/core/plugins-loader.js +7 -9
  81. package/core/plugins.js +0 -3
  82. package/creators/app/files/.gitlab-ci.yml +1 -1
  83. package/detail/fleet.cattle.io.cluster.vue +11 -1
  84. package/detail/provisioning.cattle.io.cluster.vue +4 -3
  85. package/dialog/ScaleMachineDownDialog.vue +34 -17
  86. package/edit/__tests__/service.test.ts +89 -0
  87. package/edit/auth/googleoauth.vue +1 -5
  88. package/edit/cloudcredential.vue +2 -0
  89. package/edit/configmap.vue +2 -1
  90. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +2 -2
  91. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  92. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +15 -7
  93. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +112 -0
  94. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  95. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +4 -0
  96. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  97. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  98. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +7 -1
  99. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
  100. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  101. package/edit/provisioning.cattle.io.cluster/index.vue +92 -36
  102. package/edit/provisioning.cattle.io.cluster/rke2.vue +171 -583
  103. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  104. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +157 -0
  105. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +94 -19
  106. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  107. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  108. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +189 -0
  109. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +144 -0
  110. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  111. package/edit/service.vue +12 -0
  112. package/edit/workload/mixins/workload.js +1 -1
  113. package/initialize/App.js +25 -71
  114. package/initialize/client.js +21 -162
  115. package/initialize/index.js +27 -123
  116. package/list/management.cattle.io.feature.vue +1 -7
  117. package/list/node.vue +1 -0
  118. package/machine-config/__tests__/vmwarevsphere.test.ts +100 -21
  119. package/machine-config/vmwarevsphere.vue +73 -51
  120. package/middleware/authenticated.js +10 -17
  121. package/mixins/auth-config.js +2 -7
  122. package/mixins/brand.js +29 -41
  123. package/mixins/create-edit-view/index.js +2 -2
  124. package/mixins/labeled-form-element.ts +6 -1
  125. package/models/__tests__/management.cattle.io.node.ts +85 -0
  126. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  127. package/models/__tests__/namespace.test.ts +49 -9
  128. package/models/__tests__/workload.test.ts +91 -0
  129. package/models/cluster/node.js +4 -4
  130. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  131. package/models/fleet.cattle.io.cluster.js +4 -0
  132. package/models/fleet.cattle.io.gitrepo.js +56 -13
  133. package/models/management.cattle.io.kontainerdriver.js +1 -1
  134. package/models/management.cattle.io.node.js +18 -14
  135. package/models/management.cattle.io.nodepool.js +17 -0
  136. package/models/namespace.js +1 -1
  137. package/models/pod.js +20 -0
  138. package/models/provisioning.cattle.io.cluster.js +20 -3
  139. package/models/secret.js +117 -18
  140. package/models/workload.js +16 -0
  141. package/models/workload.service.js +18 -0
  142. package/package.json +10 -9
  143. package/pages/about.vue +0 -1
  144. package/pages/account/create-key.vue +0 -1
  145. package/pages/account/index.vue +0 -1
  146. package/pages/auth/login.vue +0 -1
  147. package/pages/auth/logout.vue +0 -2
  148. package/pages/auth/setup.vue +0 -4
  149. package/pages/auth/verify.vue +14 -8
  150. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  151. package/pages/c/_cluster/apps/index.vue +0 -2
  152. package/pages/c/_cluster/auth/index.vue +0 -2
  153. package/pages/c/_cluster/ecm/index.vue +0 -2
  154. package/pages/c/_cluster/explorer/index.vue +28 -2
  155. package/pages/c/_cluster/fleet/index.vue +1 -1
  156. package/pages/c/_cluster/index.vue +0 -2
  157. package/pages/c/_cluster/settings/banners.vue +0 -2
  158. package/pages/c/_cluster/settings/brand.vue +0 -2
  159. package/pages/c/_cluster/settings/index.vue +0 -2
  160. package/pages/c/_cluster/settings/links.vue +0 -1
  161. package/pages/c/_cluster/settings/performance.vue +0 -1
  162. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +2 -1
  163. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  164. package/pages/c/_cluster/uiplugins/index.vue +0 -2
  165. package/pages/diagnostic.vue +1 -2
  166. package/pages/fail-whale.vue +0 -1
  167. package/pages/prefs.vue +0 -1
  168. package/pages/support/index.vue +2 -8
  169. package/pkg/auto-import.js +1 -1
  170. package/plugins/axios.js +0 -36
  171. package/plugins/back-button.js +3 -5
  172. package/plugins/codemirror-loader.js +1 -1
  173. package/plugins/codemirror.js +41 -0
  174. package/plugins/dashboard-store/__tests__/{mutations.spec.ts → mutations.test.ts} +1 -1
  175. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  176. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  177. package/plugins/dashboard-store/actions.js +30 -4
  178. package/plugins/dashboard-store/classify.js +1 -18
  179. package/plugins/dashboard-store/getters.js +10 -5
  180. package/plugins/dashboard-store/index.js +0 -12
  181. package/plugins/dashboard-store/mutations.js +0 -4
  182. package/plugins/dashboard-store/resource-class.js +59 -18
  183. package/plugins/steve/__tests__/steve-class.spec.ts +59 -0
  184. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  185. package/plugins/steve/getters.js +4 -1
  186. package/plugins/steve/norman-class.js +19 -0
  187. package/plugins/steve/steve-class.js +22 -0
  188. package/plugins/steve/subscribe.js +4 -10
  189. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  190. package/rancher-components/Accordion/Accordion.vue +86 -0
  191. package/rancher-components/Accordion/index.ts +1 -0
  192. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  193. package/rancher-components/Banner/Banner.vue +2 -2
  194. package/rancher-components/Card/Card.vue +3 -3
  195. package/rancher-components/Form/Checkbox/Checkbox.vue +3 -3
  196. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  197. package/rancher-components/Form/LabeledInput/LabeledInput.vue +65 -24
  198. package/rancher-components/Form/Radio/RadioButton.test.ts +7 -3
  199. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  200. package/rancher-components/Form/Radio/RadioGroup.test.ts +30 -0
  201. package/rancher-components/Form/Radio/RadioGroup.vue +8 -3
  202. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  203. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  204. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  205. package/rancher-components/StringList/StringList.test.ts +270 -0
  206. package/rancher-components/StringList/StringList.vue +65 -26
  207. package/rancher-components/components/Accordion/Accordion.test.ts +45 -0
  208. package/rancher-components/components/Accordion/Accordion.vue +86 -0
  209. package/rancher-components/components/Accordion/index.ts +1 -0
  210. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  211. package/rancher-components/components/Banner/Banner.vue +2 -2
  212. package/rancher-components/components/Card/Card.vue +3 -3
  213. package/rancher-components/components/Form/Checkbox/Checkbox.vue +3 -3
  214. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  215. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
  216. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  217. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  218. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  219. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  220. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  221. package/rancher-components/components/StringList/StringList.vue +8 -8
  222. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +50 -0
  223. package/scripts/extension/parse-tag-name +2 -2
  224. package/scripts/publish-shell.sh +10 -0
  225. package/scripts/test-plugins-build.sh +85 -9
  226. package/server/har-file.js +183 -0
  227. package/store/catalog.js +1 -1
  228. package/store/features.js +1 -0
  229. package/store/i18n.js +11 -0
  230. package/store/index.js +10 -11
  231. package/store/prefs.js +33 -35
  232. package/store/type-map.js +8 -7
  233. package/tsconfig.json +35 -9
  234. package/tsconfig.paths.json +21 -0
  235. package/types/shell/index.d.ts +427 -234
  236. package/types/vue-shim.d.ts +42 -0
  237. package/utils/__tests__/create-yaml.test.ts +60 -0
  238. package/utils/axios.js +0 -19
  239. package/utils/azure.js +24 -0
  240. package/utils/create-yaml.js +17 -10
  241. package/utils/git.ts +1 -1
  242. package/utils/monitoring.js +1 -1
  243. package/utils/nuxt.js +18 -39
  244. package/utils/object.js +14 -0
  245. package/utils/router.scrollBehavior.js +12 -14
  246. package/utils/time.js +1 -1
  247. package/utils/url.ts +1 -1
  248. package/vue.config.js +23 -2
  249. package/.DS_Store +0 -0
  250. package/assets/images/providers/aks-black.svg +0 -28
  251. package/assets/images/providers/aks.svg +0 -31
  252. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -234
  253. package/initialize/layouts.ts +0 -26
  254. package/mixins/fetch.server.js +0 -73
  255. package/pages/c/index.vue +0 -9
  256. package/pages/rio/mesh.vue +0 -508
  257. package/plugins/transitions.js +0 -4
  258. package/scripts/.DS_Store +0 -0
  259. package/scripts/verdaccio.log +0 -205
  260. package/tsconfig.default.json +0 -46
  261. package/yarn-error.log +0 -200
  262. /package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +0 -0
  263. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +0 -0
  264. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  265. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  266. /package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +0 -0
  267. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  268. /package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +0 -0
  269. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  270. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  271. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  272. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  273. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  274. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
@@ -0,0 +1,183 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ // When we receive a request to this URL we will reset the session to replay again from the HAR file
5
+ // This allows the user to refresh the browser and replay the HAR file again
6
+ const RESET_URL = '/api/v1/namespaces/cattle-ui-plugin-system/services/http:ui-plugin-operator:80/proxy/index.json';
7
+
8
+ const EXCLUDES_QS = '?exclude=metadata.managedFields';
9
+
10
+ /**
11
+ * Load the network requests/responses from the har file
12
+ * @param name name/path of the file
13
+ * @param port port that the local dev server is running on
14
+ * @returns har file data
15
+ */
16
+ function loadFile(name, port, dashboard) {
17
+ const newBase = `https://127.0.0.1:${ port }`;
18
+ const data = {};
19
+
20
+ console.log(`Loading HAR file: ${ name }`); // eslint-disable-line no-console
21
+
22
+ const rawData = fs.readFileSync(name);
23
+ const har = JSON.parse(rawData);
24
+ let base = '';
25
+ let uri = '';
26
+
27
+ if (har?.log?.pages) {
28
+ const page = har.log.pages.find((page) => page.title.includes('/dashboard/'));
29
+
30
+ if (page) {
31
+ const parts = page.title.split('/dashboard');
32
+
33
+ base = parts[0];
34
+ uri = parts[1];
35
+ }
36
+ }
37
+
38
+ if (har?.log?.entries) {
39
+ console.log('Network requests:'); // eslint-disable-line no-console
40
+
41
+ har.log.entries.forEach((r) => {
42
+ const mimeType = r.response.content.mimeType;
43
+
44
+ // Only cache json responses
45
+ if (mimeType === 'application/json' || mimeType === 'text/plain') {
46
+ let url = r.request.url;
47
+
48
+ if (url.startsWith(base)) {
49
+ url = url.substr(base.length);
50
+ }
51
+
52
+ console.log(` ${ r.request.method } ${ decodeURIComponent(url) }`); // eslint-disable-line no-console
53
+
54
+ data[url] = data[url] || {};
55
+ data[url][r.request.method] = data[url][r.request.method] || [];
56
+
57
+ const item = {
58
+ status: r.response.status,
59
+ statusText: r.response.statusText,
60
+ headers: r.response.headers,
61
+ content: r.response.content
62
+ };
63
+
64
+ if (item.content.text) {
65
+ item.content.text = item.content.text.replaceAll(base, newBase);
66
+ data[url][r.request.method].push(item);
67
+ } else {
68
+ console.log(' Warning: Omitting this response as there is no content - UI may not work as expected'); // eslint-disable-line no-console
69
+ }
70
+ }
71
+ });
72
+ }
73
+
74
+ console.log('Page:'); // eslint-disable-line no-console
75
+ console.log(` ${ newBase }${ dashboard }${ uri }`); // eslint-disable-line no-console
76
+ console.log(''); // eslint-disable-line no-console
77
+
78
+ return data;
79
+ }
80
+
81
+ function exportToFiles(data, folder) {
82
+ console.log(`Exporting request data to ${ folder }`); // eslint-disable-line no-console
83
+
84
+ Object.keys(data).forEach((r) => {
85
+ const out = path.join(folder, `.${ r }`);
86
+ const dir = path.dirname(out);
87
+
88
+ console.log(r); // eslint-disable-line no-console
89
+
90
+ Object.keys(data[r]).forEach((method) => {
91
+ const name = `${ path.basename(out) }.${ method.toLowerCase() }.json`;
92
+
93
+ fs.mkdirSync(dir, { recursive: true });
94
+
95
+ data[r][method].forEach((request) => {
96
+ const formatted = JSON.stringify(JSON.parse(request.content.text), null, 2);
97
+
98
+ fs.writeFileSync(path.join(dir, name), formatted);
99
+ });
100
+ });
101
+ });
102
+ }
103
+
104
+ function harProxy(responses, folder) {
105
+ let session = JSON.parse(JSON.stringify(responses));
106
+
107
+ return (req, res, next) => {
108
+ if (req.originalUrl === RESET_URL) {
109
+ session = JSON.parse(JSON.stringify(responses));
110
+ console.log('>>>>>>>> Reset session replay from har file'); // eslint-disable-line no-console
111
+ }
112
+
113
+ const url = decodeURIComponent(req.originalUrl);
114
+ let playback = session[req.originalUrl];
115
+
116
+ // If it did not match, try without the metadata excludes query string that was adding in 2.8.0
117
+ // This might allow HAR captures with Rancher < 2.8.0 to be replayed on >= 2.8.0
118
+ if (!playback && req.originalUrl.endsWith(EXCLUDES_QS)) {
119
+ playback = session[req.originalUrl.slice(0, -EXCLUDES_QS.length)];
120
+ }
121
+
122
+ if (playback && playback[req.method] && playback[req.method].length) {
123
+ const resp = playback[req.method][0];
124
+
125
+ if (playback[req.method].length > 1) {
126
+ playback[req.method].shift();
127
+ }
128
+
129
+ const body = resp.content?.text || '';
130
+
131
+ res.type(resp.content.mimeType);
132
+ res.status(resp.status);
133
+ res.send(Buffer.from(body));
134
+ res.end();
135
+
136
+ const char = !!resp.used ? '*' : ' ';
137
+
138
+ console.log(`${ req.method }${ char } ${ resp.status } ${ url }`); // eslint-disable-line no-console
139
+
140
+ resp.used = true;
141
+
142
+ return;
143
+ }
144
+
145
+ if (req.originalUrl.startsWith('/v1/') || req.originalUrl.startsWith('/v3/') || req.originalUrl.startsWith('/k8s/')) {
146
+ // If we have been configured with a folder, look for a file with the contents to use for the request
147
+ if (folder) {
148
+ // Remove query string
149
+ const name = req.originalUrl.split('?')[0];
150
+ const requestFile = path.join(folder, `.${ name }.${ req.method.toLowerCase() }.json`);
151
+
152
+ if (fs.existsSync(requestFile)) {
153
+ const data = fs.readFileSync(requestFile);
154
+
155
+ console.log(`${ req.method }f 200 ${ url }`); // eslint-disable-line no-console
156
+
157
+ res.type('application/json');
158
+ res.status(200);
159
+ res.send(data);
160
+
161
+ return res.end();
162
+ }
163
+ }
164
+
165
+ // Fallback to sending a 404 response
166
+ res.status(404);
167
+ res.send('Not Found');
168
+
169
+ console.log(`${ req.method }? 404 ${ url }`); // eslint-disable-line no-console
170
+
171
+ return res.end();
172
+ }
173
+
174
+ // Continue on to serve up other resources
175
+ return next();
176
+ };
177
+ }
178
+
179
+ module.exports = {
180
+ loadFile,
181
+ harProxy,
182
+ exportToFiles,
183
+ };
package/store/catalog.js CHANGED
@@ -354,7 +354,7 @@ export const actions = {
354
354
 
355
355
  // As per comment above, when there are no clusters this will be management. Store it such that it can be used for those cases
356
356
  commit('setInStore', inStore);
357
- hash.cluster = hash.cluster.filter((repo) => !(repo?.metadata?.annotations?.[CATALOG_ANNOTATIONS.HIDDEN_REPO] === 'true'));
357
+ hash.cluster = hash.cluster?.filter((repo) => !(repo?.metadata?.annotations?.[CATALOG_ANNOTATIONS.HIDDEN_REPO] === 'true'));
358
358
 
359
359
  commit('setRepos', hash);
360
360
 
package/store/features.js CHANGED
@@ -27,6 +27,7 @@ export const mapFeature = function(name) {
27
27
  export const MULTI_CLUSTER = create('multi-cluster-management', true);
28
28
  export const LEGACY = create('legacy', false);
29
29
  export const RKE2 = create('rke2', true);
30
+ export const RKE1_UI = create('rke1-ui', true);
30
31
  export const UNSUPPORTED_STORAGE_DRIVERS = create('unsupported-storage-drivers', false);
31
32
  export const FLEET = create('continuous-delivery', true);
32
33
  export const HARVESTER = create('harvester', true);
package/store/i18n.js CHANGED
@@ -308,6 +308,17 @@ export const actions = {
308
308
  p.push(dispatch('mergeLoad', { locale, module: fn }));
309
309
  });
310
310
 
311
+ // load all of the default locales from the plugins for fallback
312
+ if (locale !== DEFAULT_LOCALE) {
313
+ const defaultI18nExt = rootState.$plugin?.getDynamic('l10n', DEFAULT_LOCALE);
314
+
315
+ if (defaultI18nExt && defaultI18nExt.length) {
316
+ defaultI18nExt.forEach((fn) => {
317
+ p.push(dispatch('mergeLoad', { locale: DEFAULT_LOCALE, module: fn }));
318
+ });
319
+ }
320
+ }
321
+
311
322
  try {
312
323
  await Promise.all(p);
313
324
  } catch (e) {
package/store/index.js CHANGED
@@ -713,10 +713,7 @@ export const actions = {
713
713
 
714
714
  const promises = {
715
715
  // Clusters guaranteed always available or your money back
716
- clusters: dispatch('management/findAll', {
717
- type: MANAGEMENT.CLUSTER,
718
- opt: { url: MANAGEMENT.CLUSTER }
719
- }),
716
+ clusters: dispatch('management/findAll', { type: MANAGEMENT.CLUSTER }),
720
717
 
721
718
  // Features checks on its own if they are available
722
719
  features: dispatch('features/loadServer'),
@@ -887,6 +884,10 @@ export const actions = {
887
884
  // Try and wait until the schema exists before proceeding
888
885
  await dispatch('management/waitForSchema', { type: MANAGEMENT.CLUSTER });
889
886
 
887
+ // Similar to above, we're still waiting on loadManagement to fetch required resources
888
+ // If we don't have all mgmt clusters yet a request to fetch this cluster and then all clusters (in cleanNamespaces) is kicked off
889
+ await dispatch('management/waitForHaveAll', { type: MANAGEMENT.CLUSTER });
890
+
890
891
  // See if it really exists
891
892
  try {
892
893
  const cluster = await dispatch('management/find', {
@@ -1046,15 +1047,13 @@ export const actions = {
1046
1047
  if ( route.name === 'index' ) {
1047
1048
  router.replace('/auth/login');
1048
1049
  } else {
1049
- if (!process.server) {
1050
- const backTo = window.localStorage.getItem(BACK_TO);
1050
+ const backTo = window.localStorage.getItem(BACK_TO);
1051
1051
 
1052
- const isLogin = route.name === 'auth-login' || route.path === '/login'; // Cover dashboard and case of log out from ember;
1053
- const isLogout = route.name === 'auth-logout';
1052
+ const isLogin = route.name === 'auth-login' || route.path === '/login'; // Cover dashboard and case of log out from ember;
1053
+ const isLogout = route.name === 'auth-logout';
1054
1054
 
1055
- if (!backTo && !isLogin && !isLogout) {
1056
- window.localStorage.setItem(BACK_TO, window.location.href);
1057
- }
1055
+ if (!backTo && !isLogin && !isLogout) {
1056
+ window.localStorage.setItem(BACK_TO, window.location.href);
1058
1057
  }
1059
1058
 
1060
1059
  const QUERY = (LOGGED_OUT in route.query) ? LOGGED_OUT : TIMED_OUT;
package/store/prefs.js CHANGED
@@ -345,46 +345,44 @@ export const actions = {
345
345
  commit('cookiesLoaded');
346
346
  },
347
347
 
348
- loadTheme({ state, dispatch }) {
349
- if ( process.client ) {
350
- const watchDark = window.matchMedia('(prefers-color-scheme: dark)');
351
- const watchLight = window.matchMedia('(prefers-color-scheme: light)');
352
- const watchNone = window.matchMedia('(prefers-color-scheme: no-preference)');
353
-
354
- const interval = 30 * 60 * 1000;
355
- const nextHalfHour = interval - Math.round(new Date().getTime()) % interval;
356
-
357
- setTimeout(() => {
358
- dispatch('loadTheme');
359
- }, nextHalfHour);
360
- // console.log('Update theme in', nextHalfHour, 'ms');
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
+ }
361
368
 
362
- if ( watchDark.matches ) {
369
+ watchDark.addListener((e) => {
370
+ if ( e.matches ) {
363
371
  changed('dark');
364
- } else if ( watchLight.matches ) {
365
- changed('light');
366
- } else {
367
- changed(fromClock());
368
372
  }
373
+ });
369
374
 
370
- watchDark.addListener((e) => {
371
- if ( e.matches ) {
372
- changed('dark');
373
- }
374
- });
375
-
376
- watchLight.addListener((e) => {
377
- if ( e.matches ) {
378
- changed('light');
379
- }
380
- });
375
+ watchLight.addListener((e) => {
376
+ if ( e.matches ) {
377
+ changed('light');
378
+ }
379
+ });
381
380
 
382
- watchNone.addListener((e) => {
383
- if ( e.matches ) {
384
- changed(fromClock());
385
- }
386
- });
387
- }
381
+ watchNone.addListener((e) => {
382
+ if ( e.matches ) {
383
+ changed(fromClock());
384
+ }
385
+ });
388
386
 
389
387
  function changed(value) {
390
388
  // console.log('Prefers Theme:', value);
package/store/type-map.js CHANGED
@@ -912,6 +912,10 @@ export const getters = {
912
912
  continue;
913
913
  }
914
914
 
915
+ if (item.ifFeature && !rootGetters['features/get'](item.ifFeature)) {
916
+ continue;
917
+ }
918
+
915
919
  if ( isBasic && !getters.groupForBasicType(product, id) ) {
916
920
  continue;
917
921
  } else if ( mode === FAVORITE && !getters.isFavorite(id) ) {
@@ -1844,15 +1848,12 @@ function _rowValueGetter(col) {
1844
1848
  // We will use JsonPath to look up this value, which is costly - so if we can detect this format
1845
1849
  // Use a more efficient function to get the value
1846
1850
  const value = col.field.startsWith('.') ? `$${ col.field }` : col.field;
1851
+ const found = value.match(FIELD_REGEX);
1847
1852
 
1848
- if (process.client) {
1849
- const found = value.match(FIELD_REGEX);
1853
+ if (found && found.length === 2) {
1854
+ const fieldIndex = parseInt(found[1], 10);
1850
1855
 
1851
- if (found && found.length === 2) {
1852
- const fieldIndex = parseInt(found[1], 10);
1853
-
1854
- return (row) => row.metadata?.fields?.[fieldIndex];
1855
- }
1856
+ return (row) => row.metadata?.fields?.[fieldIndex];
1856
1857
  }
1857
1858
 
1858
1859
  return value;
package/tsconfig.json CHANGED
@@ -1,16 +1,42 @@
1
1
  {
2
- "extends": "./tsconfig.default.json",
2
+ "extends": "./tsconfig.paths.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": ".",
4
19
  "types": [
5
- "@types/node",
6
- "@types/jest",
7
- "@nuxt/types",
8
- ]
20
+ "node",
21
+ "jest",
22
+ ],
23
+ "typeRoots": [
24
+ "./node_modules/@types",
25
+ "../node_modules/@types"
26
+ ],
9
27
  },
10
28
  "exclude": [
11
- "cypress",
12
- "./cypress.config.ts",
13
- "**/*.test.ts",
14
- "**/*.spec.ts"
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"
15
41
  ]
16
42
  }
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "~/*": [
5
+ "../*"
6
+ ],
7
+ "@/*": [
8
+ "../*"
9
+ ],
10
+ "@shell/*": [
11
+ "../shell/*"
12
+ ],
13
+ "@pkg/*": [
14
+ "../shell/pkg/*"
15
+ ],
16
+ "@components/*": [
17
+ "../pkg/rancher-components/src/components/*"
18
+ ]
19
+ },
20
+ },
21
+ }