@rancher/shell 0.1.2 → 0.1.4

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 (347) hide show
  1. package/assets/brand/suse/dark/rancher-logo.svg +1 -148
  2. package/assets/brand/suse/rancher-logo.svg +1 -130
  3. package/assets/images/featured/img1.jpg +0 -0
  4. package/assets/images/featured.jpg +0 -0
  5. package/assets/images/generic-plugin.svg +7 -0
  6. package/assets/styles/themes/_dark.scss +3 -0
  7. package/assets/styles/themes/_light.scss +3 -0
  8. package/assets/styles/themes/_suse.scss +1 -1
  9. package/assets/translations/en-us.yaml +209 -813
  10. package/assets/translations/zh-hans.yaml +28 -792
  11. package/components/ActionMenu.vue +3 -3
  12. package/components/AsyncButton.vue +17 -2
  13. package/components/ButtonDropdown.vue +4 -0
  14. package/components/Carousel.vue +291 -0
  15. package/components/CodeMirror.vue +6 -8
  16. package/components/CommunityLinks.vue +70 -19
  17. package/components/ContainerResourceLimit.vue +14 -0
  18. package/components/CruResource.vue +11 -3
  19. package/components/Dialog.vue +102 -0
  20. package/components/ExplorerMembers.vue +121 -0
  21. package/components/ExplorerProjectsNamespaces.vue +404 -0
  22. package/components/GrafanaDashboard.vue +17 -2
  23. package/components/IconMessage.vue +9 -1
  24. package/components/LocaleSelector.vue +114 -0
  25. package/components/PromptModal.vue +2 -3
  26. package/components/ResourceList/index.vue +1 -1
  27. package/components/ResourceTable.vue +9 -7
  28. package/components/SimpleBox.vue +6 -4
  29. package/components/SingleClusterInfo.vue +1 -1
  30. package/components/SortableTable/index.vue +18 -25
  31. package/components/SortableTable/selection.js +1 -0
  32. package/components/Tabbed/Tab.vue +5 -0
  33. package/components/Tabbed/index.vue +29 -2
  34. package/components/auth/AzureWarning.vue +5 -1
  35. package/components/auth/Principal.vue +2 -1
  36. package/components/auth/RoleDetailEdit.vue +18 -11
  37. package/components/fleet/FleetBundles.vue +8 -3
  38. package/components/fleet/FleetRepos.vue +0 -2
  39. package/components/fleet/FleetSummary.vue +6 -0
  40. package/components/form/KeyValue.vue +80 -58
  41. package/components/form/NameNsDescription.vue +12 -8
  42. package/components/form/NodeScheduling.vue +1 -1
  43. package/components/form/ResourceTabs/index.vue +5 -1
  44. package/components/form/WorkloadPorts.vue +1 -1
  45. package/components/formatter/ClusterLink.vue +3 -7
  46. package/components/formatter/WorkloadHealthScale.vue +1 -1
  47. package/components/nav/Header.vue +9 -9
  48. package/components/nav/NamespaceFilter.vue +10 -7
  49. package/components/nav/TopLevelMenu.vue +10 -65
  50. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  51. package/config/footer.js +13 -14
  52. package/config/labels-annotations.js +2 -1
  53. package/config/product/explorer.js +5 -4
  54. package/config/product/harvester-manager.js +64 -2
  55. package/config/product/legacy.js +0 -47
  56. package/config/product/manager.js +9 -0
  57. package/config/product/multi-cluster-apps.js +0 -12
  58. package/config/product/settings.js +12 -1
  59. package/config/product/uiplugins.js +17 -0
  60. package/config/settings.js +37 -72
  61. package/config/table-headers.js +0 -1
  62. package/config/types.js +9 -25
  63. package/config/uiplugins.js +60 -0
  64. package/content/docs/en-us/getting-started.md +1 -26
  65. package/core/plugin-routes.ts +34 -22
  66. package/core/plugin.ts +15 -3
  67. package/core/plugins-loader.js +2 -0
  68. package/core/plugins.js +91 -36
  69. package/core/types.ts +7 -1
  70. package/detail/provisioning.cattle.io.cluster.vue +15 -2
  71. package/detail/workload/index.vue +11 -5
  72. package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
  73. package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
  74. package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
  75. package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
  76. package/dialog/DiagnosticTimingsDialog.vue +116 -0
  77. package/{components/dialog → dialog}/DrainNode.vue +0 -0
  78. package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
  79. package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
  80. package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
  81. package/{components/dialog → dialog}/RotateCertificatesDialog.vue +9 -3
  82. package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
  83. package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
  84. package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
  85. package/edit/auth/azuread.vue +44 -6
  86. package/edit/management.cattle.io.project.vue +2 -2
  87. package/edit/namespace.vue +17 -10
  88. package/edit/networking.k8s.io.ingress/index.vue +2 -2
  89. package/edit/persistentvolume/index.vue +3 -0
  90. package/edit/persistentvolumeclaim.vue +1 -0
  91. package/edit/pod.vue +27 -0
  92. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  93. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
  94. package/edit/provisioning.cattle.io.cluster/rke2.vue +76 -5
  95. package/edit/service.vue +8 -6
  96. package/edit/workload/__tests__/Upgrading.test.ts +1 -0
  97. package/edit/workload/index.vue +375 -15
  98. package/edit/workload/mixins/workload.js +62 -7
  99. package/edit/workload/storage/ContainerMountPaths.vue +240 -0
  100. package/edit/workload/storage/Mount.vue +1 -0
  101. package/edit/workload/storage/awsElasticBlockStore.vue +20 -1
  102. package/edit/workload/storage/azureDisk.vue +22 -2
  103. package/edit/workload/storage/azureFile.vue +20 -2
  104. package/edit/workload/storage/csi/index.vue +23 -1
  105. package/edit/workload/storage/gcePersistentDisk.vue +20 -2
  106. package/edit/workload/storage/index.vue +23 -49
  107. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
  108. package/edit/workload/storage/vsphereVolume.vue +11 -1
  109. package/layouts/default.vue +63 -32
  110. package/layouts/error.vue +5 -1
  111. package/layouts/home.vue +14 -5
  112. package/layouts/plain.vue +10 -5
  113. package/list/harvesterhci.io.management.cluster.vue +74 -33
  114. package/list/management.cattle.io.setting.vue +3 -3
  115. package/list/namespace.vue +3 -5
  116. package/list/provisioning.cattle.io.cluster.vue +1 -1
  117. package/machine-config/amazonec2.vue +2 -0
  118. package/machine-config/harvester.vue +100 -51
  119. package/middleware/authenticated.js +56 -52
  120. package/mixins/form-validation.js +1 -1
  121. package/mixins/resource-fetch.js +3 -1
  122. package/models/catalog.cattle.io.uiplugin.js +34 -0
  123. package/models/cluster/node.js +25 -2
  124. package/models/fleet.cattle.io.bundle.js +27 -20
  125. package/models/harvesterhci.io.management.cluster.js +200 -5
  126. package/models/management.cattle.io.cluster.js +1 -1
  127. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
  128. package/models/management.cattle.io.project.js +23 -2
  129. package/models/namespace.js +19 -3
  130. package/models/pod.js +19 -2
  131. package/models/provisioning.cattle.io.cluster.js +16 -6
  132. package/models/workload.js +9 -246
  133. package/models/workload.service.js +314 -0
  134. package/nuxt.config.js +80 -34
  135. package/package.json +107 -108
  136. package/pages/auth/login.vue +11 -2
  137. package/pages/auth/setup.vue +1 -1
  138. package/pages/c/_cluster/_product/members/index.vue +3 -93
  139. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
  140. package/pages/c/_cluster/apps/charts/index.vue +46 -1
  141. package/pages/c/_cluster/apps/charts/install.vue +10 -9
  142. package/pages/c/_cluster/explorer/index.vue +72 -9
  143. package/pages/c/_cluster/explorer/tools/index.vue +12 -5
  144. package/pages/c/_cluster/mcapps/index.vue +1 -1
  145. package/pages/c/_cluster/settings/brand.vue +0 -40
  146. package/pages/c/_cluster/settings/links.vue +200 -0
  147. package/pages/c/_cluster/settings/performance.vue +19 -16
  148. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +232 -0
  149. package/pages/c/_cluster/uiplugins/InstallDialog.vue +242 -0
  150. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +284 -0
  151. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +130 -0
  152. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +253 -0
  153. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +115 -0
  154. package/pages/c/_cluster/uiplugins/index.vue +694 -0
  155. package/pages/diagnostic.vue +185 -101
  156. package/pages/docs/_doc.vue +3 -1
  157. package/pages/fail-whale.vue +1 -10
  158. package/pages/home.vue +21 -56
  159. package/pages/index.vue +18 -4
  160. package/pages/prefs.vue +108 -86
  161. package/pages/safeMode.vue +17 -0
  162. package/pages/support/index.vue +23 -15
  163. package/pkg/auto-import.js +44 -7
  164. package/pkg/dynamic-importer.lib.js +4 -0
  165. package/pkg/dynamic-plugin-loader.js +28 -0
  166. package/pkg/import.js +2 -2
  167. package/pkg/model-loader-require.lib.js +3 -0
  168. package/pkg/vue.config.js +9 -6
  169. package/plugins/dashboard-store/model-loader-require.js +12 -0
  170. package/plugins/dashboard-store/model-loader.js +4 -1
  171. package/plugins/dashboard-store/resource-class.js +12 -5
  172. package/plugins/formatters.js +15 -0
  173. package/plugins/plugin.js +56 -4
  174. package/plugins/steve/actions.js +1 -1
  175. package/plugins/steve/index.js +6 -4
  176. package/plugins/steve/mutations.js +1 -1
  177. package/plugins/steve/subscribe.js +89 -56
  178. package/plugins/steve/web-worker.steve-sub-worker.js +24 -15
  179. package/promptRemove/management.cattle.io.globalrole.vue +47 -0
  180. package/promptRemove/management.cattle.io.roletemplate.vue +47 -0
  181. package/promptRemove/mixin/roleDeletionCheck.js +97 -0
  182. package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
  183. package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
  184. package/scripts/build-pkg.sh +48 -2
  185. package/scripts/drone-build-pkg.sh +31 -0
  186. package/scripts/publish-shell.sh +11 -12
  187. package/scripts/serve-pkgs +17 -10
  188. package/scripts/sync-shell-deps +37 -0
  189. package/store/catalog.js +12 -9
  190. package/store/i18n.js +26 -12
  191. package/store/index.js +4 -181
  192. package/store/prefs.js +46 -2
  193. package/store/type-map.js +47 -33
  194. package/store/uiplugins.ts +15 -61
  195. package/utils/__tests__/object.test.ts +0 -24
  196. package/utils/__tests__/selector.test.ts +1 -1
  197. package/utils/cluster.js +1 -1
  198. package/utils/custom-validators.js +1 -12
  199. package/utils/dynamic-importer.js +5 -1
  200. package/utils/grafana.js +2 -6
  201. package/utils/socket.js +41 -20
  202. package/utils/string.js +1 -7
  203. package/utils/validators/formRules/__tests__/index.test.ts +108 -0
  204. package/utils/validators/formRules/index.ts +9 -1
  205. package/utils/validators/setting.js +0 -35
  206. package/yarn-error.log +195 -0
  207. package/components/FilterLabel.vue +0 -254
  208. package/components/HarvesterUpgradeProgressBarList.vue +0 -109
  209. package/components/VMConsoleBar.vue +0 -87
  210. package/components/dialog/harvester/AddHotplugModal.vue +0 -159
  211. package/components/dialog/harvester/BackupModal.vue +0 -117
  212. package/components/dialog/harvester/CloneTemplate.vue +0 -125
  213. package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
  214. package/components/dialog/harvester/ExportImageDialog.vue +0 -152
  215. package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
  216. package/components/dialog/harvester/MigrationDialog.vue +0 -154
  217. package/components/dialog/harvester/RestoreDialog.vue +0 -153
  218. package/components/dialog/harvester/SupportBundle.vue +0 -217
  219. package/components/dialog/harvester/UnplugVolume.vue +0 -108
  220. package/components/form/SerialConsole/index.vue +0 -267
  221. package/components/formatter/AttachVMWithName.vue +0 -46
  222. package/components/formatter/CloudInitType.vue +0 -27
  223. package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
  224. package/components/formatter/HarvesterCPUUsed.vue +0 -122
  225. package/components/formatter/HarvesterDiskState.vue +0 -66
  226. package/components/formatter/HarvesterHostName.vue +0 -66
  227. package/components/formatter/HarvesterIpAddress.vue +0 -90
  228. package/components/formatter/HarvesterMemoryUsed.vue +0 -140
  229. package/components/formatter/HarvesterMigrationState.vue +0 -85
  230. package/components/formatter/HarvesterNodeName.vue +0 -49
  231. package/components/formatter/HarvesterStorageUsed.vue +0 -194
  232. package/components/formatter/HarvesterVmState.vue +0 -123
  233. package/components/nav/HarvesterUpgrade.vue +0 -232
  234. package/components/novnc/NovncConsole.vue +0 -93
  235. package/components/novnc/NovncConsoleItem.vue +0 -89
  236. package/components/novnc/NovncConsoleWrapper.vue +0 -243
  237. package/config/harvester-map.js +0 -44
  238. package/config/harvester-table-headers.js +0 -27
  239. package/config/product/harvester.js +0 -305
  240. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
  241. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
  242. package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
  243. package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
  244. package/detail/harvesterhci.io.host/index.vue +0 -243
  245. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
  246. package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
  247. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
  248. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
  249. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
  250. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
  251. package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
  252. package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
  253. package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
  254. package/edit/harvesterhci.io.host/index.vue +0 -533
  255. package/edit/harvesterhci.io.keypair.vue +0 -112
  256. package/edit/harvesterhci.io.managedchart/index.vue +0 -25
  257. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
  258. package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
  259. package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
  260. package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
  261. package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
  262. package/edit/harvesterhci.io.setting/index.vue +0 -201
  263. package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
  264. package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
  265. package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
  266. package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
  267. package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
  268. package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
  269. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
  270. package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
  271. package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
  272. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
  273. package/edit/harvesterhci.io.volume.vue +0 -195
  274. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
  275. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
  276. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
  277. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
  278. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
  279. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
  280. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
  281. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
  282. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
  283. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
  284. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
  285. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
  286. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
  287. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
  288. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
  289. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
  290. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
  291. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
  292. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
  293. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
  294. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
  295. package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
  296. package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
  297. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
  298. package/edit/workload/types/Deployment.vue +0 -377
  299. package/edit/workload/types/Generic.vue +0 -295
  300. package/list/harvesterhci.io.cloudtemplate.vue +0 -78
  301. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
  302. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
  303. package/list/harvesterhci.io.dashboard/index.vue +0 -752
  304. package/list/harvesterhci.io.host/index.vue +0 -186
  305. package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
  306. package/list/harvesterhci.io.setting.vue +0 -241
  307. package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
  308. package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
  309. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
  310. package/list/harvesterhci.io.volume.vue +0 -122
  311. package/list/kubevirt.io.virtualmachine.vue +0 -193
  312. package/mixins/harvester-vm/impl.js +0 -267
  313. package/mixins/harvester-vm/index.js +0 -1357
  314. package/models/harvester/configmap.js +0 -32
  315. package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
  316. package/models/harvester/harvesterhci.io.keypair.js +0 -12
  317. package/models/harvester/harvesterhci.io.setting.js +0 -127
  318. package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
  319. package/models/harvester/harvesterhci.io.upgrade.js +0 -226
  320. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
  321. package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
  322. package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
  323. package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
  324. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
  325. package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
  326. package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
  327. package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
  328. package/models/harvester/management.cattle.io.managedchart.js +0 -191
  329. package/models/harvester/management.cattle.io.setting.js +0 -40
  330. package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
  331. package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
  332. package/models/harvester/node.js +0 -255
  333. package/models/harvester/persistentvolumeclaim.js +0 -166
  334. package/models/harvester/pod.js +0 -185
  335. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
  336. package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
  337. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
  338. package/pages/c/_cluster/harvester/index.vue +0 -24
  339. package/pages/c/_cluster/harvester/support/index.vue +0 -154
  340. package/pages/plugins.vue +0 -387
  341. package/pkg/model-loader.lib.js +0 -3
  342. package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
  343. package/server/verdaccio-middleware.js +0 -56
  344. package/store/harvester-common.js +0 -126
  345. package/utils/validators/vm-datavolumes.js +0 -38
  346. package/utils/validators/vm-image.js +0 -32
  347. package/utils/validators/vm.js +0 -221
@@ -38,18 +38,6 @@ describe('fx: get', () => {
38
38
  expect(result).toBeUndefined();
39
39
  expect(() => result).not.toThrow();
40
40
  });
41
-
42
- it.each([
43
- 'key2.nonsense',
44
- 'non.sense',
45
- ])('should catch error and return undefined', (path) => {
46
- const obj = { key1: 'value', key2: { bat: 42, 'with.dots': 43 } };
47
-
48
- const result = get(obj, path);
49
-
50
- expect(result).toBeUndefined();
51
- expect(() => result).not.toThrow();
52
- });
53
41
  });
54
42
 
55
43
  describe('fx: getter', () => {
@@ -95,18 +83,6 @@ describe('fx: getter', () => {
95
83
  expect(result).toBeUndefined();
96
84
  expect(() => result).not.toThrow();
97
85
  });
98
-
99
- it.each([
100
- 'key2.nonsense',
101
- 'non.sense',
102
- ])('should catch error and return undefined', (path) => {
103
- const obj = { key1: 'value', key2: { bat: 42, 'with.dots': 43 } };
104
-
105
- const result = getter(path)(obj);
106
-
107
- expect(result).toBeUndefined();
108
- expect(() => result).not.toThrow();
109
- });
110
86
  });
111
87
  });
112
88
 
@@ -171,7 +171,7 @@ describe('fx: parse', () => {
171
171
  ['!some.prefix/key-bar_baz '],
172
172
  ['! some.prefix/key-bar_baz '],
173
173
  [' ! some.prefix/key-bar_baz '],
174
- ])('should parse expression %p to selector %p', (expression) => {
174
+ ])('should parse expression %p to selector %p using prefixes', (expression) => {
175
175
  const expected = {
176
176
  key: 'some.prefix/key-bar_baz',
177
177
  operator: 'DoesNotExist',
package/utils/cluster.js CHANGED
@@ -13,7 +13,7 @@ export function filterOnlyKubernetesClusters(mgmtClusters) {
13
13
 
14
14
  export function isHarvesterCluster(mgmtCluster) {
15
15
  // Use the provider if it is set otherwise use the label
16
- const provider = mgmtCluster?.status?.provider || mgmtCluster?.metadata?.labels?.[CAPI.PROVIDER];
16
+ const provider = mgmtCluster?.metadata?.labels?.[CAPI.PROVIDER] || mgmtCluster?.status?.provider;
17
17
 
18
18
  return provider === VIRTUAL_HARVESTER_PROVIDER;
19
19
  }
@@ -8,12 +8,7 @@ import { cronSchedule } from '@shell/utils/validators/cron-schedule';
8
8
  import { podAffinity } from '@shell/utils/validators/pod-affinity';
9
9
  import { roleTemplateRules } from '@shell/utils/validators/role-template';
10
10
  import { clusterName } from '@shell/utils/validators/cluster-name';
11
- import { isHttps, backupTarget } from '@shell/utils/validators/setting';
12
-
13
- import { imageUrl, fileRequired } from '@shell/utils/validators/vm-image';
14
-
15
- import { vmNetworks, vmDisks } from '@shell/utils/validators/vm';
16
- import { dataVolumeSize } from '@shell/utils/validators/vm-datavolumes';
11
+ import { isHttps } from '@shell/utils/validators/setting';
17
12
 
18
13
  /**
19
14
  * Custom validation functions beyond normal scalr types
@@ -36,10 +31,4 @@ export default {
36
31
  podAffinity,
37
32
  roleTemplateRules,
38
33
  isHttps,
39
- backupTarget,
40
- imageUrl,
41
- dataVolumeSize,
42
- vmNetworks,
43
- vmDisks,
44
- fileRequired,
45
34
  };
@@ -63,7 +63,7 @@ export function importDialog(name) {
63
63
  throw new Error('Name required');
64
64
  }
65
65
 
66
- return () => import(/* webpackChunkName: "dialog" */ `@shell/components/dialog/${name}`);
66
+ return () => import(/* webpackChunkName: "dialog" */ `@shell/dialog/${name}`);
67
67
  }
68
68
 
69
69
  export function importWindowComponent(name) {
@@ -107,6 +107,10 @@ export function resolveList(key) {
107
107
  return require.resolve(`@shell/list/${ key }`);
108
108
  }
109
109
 
110
+ export function resolveChart(key) {
111
+ return require.resolve(`@shell/chart/${ key }`);
112
+ }
113
+
110
114
  export function resolveEdit(key) {
111
115
  return require.resolve(`@shell/edit/${ key }`);
112
116
  }
package/utils/grafana.js CHANGED
@@ -1,5 +1,5 @@
1
+ import { haveV2Monitoring } from '@shell/utils/monitoring';
1
2
  import { parse as parseUrl, addParam } from '@shell/utils/url';
2
- import { MONITORING } from '@shell/config/types';
3
3
 
4
4
  export function computeDashboardUrl(embedUrl, clusterId, params) {
5
5
  const url = parseUrl(embedUrl);
@@ -21,7 +21,7 @@ export function computeDashboardUrl(embedUrl, clusterId, params) {
21
21
  }
22
22
 
23
23
  export async function dashboardExists(store, clusterId, embedUrl, storeName = 'cluster') {
24
- if (!isMonitoringInstalled(store.getters, storeName)) {
24
+ if ( !haveV2Monitoring(store.getters) ) {
25
25
  return false;
26
26
  }
27
27
 
@@ -81,7 +81,3 @@ export async function failedProposals(dispatch, clusterId) {
81
81
 
82
82
  return response.data.result[0]?.values?.[0]?.[1] || 0;
83
83
  }
84
-
85
- function isMonitoringInstalled(getters, storeName = 'cluster') {
86
- return !!getters[`${ storeName }/schemaFor`](MONITORING.SERVICEMONITOR);
87
- }
package/utils/socket.js CHANGED
@@ -31,6 +31,8 @@ export default class Socket extends EventTarget {
31
31
  hasBeenOpen = false;
32
32
  hasReconnected = false;
33
33
  protocol = null;
34
+ maxTries = null;
35
+ tries = 0;
34
36
 
35
37
  // "Private"
36
38
  socket = null;
@@ -38,17 +40,19 @@ export default class Socket extends EventTarget {
38
40
  framesReceived = 0;
39
41
  frameTimer;
40
42
  reconnectTimer;
41
- tries = 0;
42
43
  disconnectCbs = [];
43
44
  disconnectedAt = 0;
44
45
  closingId = 0;
45
46
 
46
- constructor(url, autoReconnect = true, frameTimeout = null, protocol = null) {
47
+ constructor(url, autoReconnect = true, frameTimeout = null, protocol = null, maxTries = null) {
47
48
  super();
48
49
 
49
50
  this.setUrl(url);
50
51
  this.autoReconnect = autoReconnect;
51
52
  this.protocol = protocol;
53
+ // maxTries = null === never stop trying to reconnect
54
+ // allow maxTries to be defined on individual sockets bc not all will clearly warn the user that we've stopped trying
55
+ this.maxTries = maxTries;
52
56
 
53
57
  if ( frameTimeout !== null ) {
54
58
  this.frameTimeout = frameTimeout;
@@ -57,10 +61,10 @@ export default class Socket extends EventTarget {
57
61
 
58
62
  setUrl(url) {
59
63
  if ( !url.match(/wss?:\/\//) ) {
60
- url = window.location.origin.replace(/^http/, 'ws') + url;
64
+ url = self.location.origin.replace(/^http/, 'ws') + url;
61
65
  }
62
66
 
63
- if ( window.location.protocol === 'https:' && url.startsWith(INSECURE) ) {
67
+ if ( self.location.protocol === 'https:' && url.startsWith(INSECURE) ) {
64
68
  url = SECURE + url.substr(INSECURE.length);
65
69
  }
66
70
 
@@ -74,6 +78,10 @@ export default class Socket extends EventTarget {
74
78
  return;
75
79
  }
76
80
 
81
+ if (this.state !== STATE_RECONNECTING) {
82
+ this.state = STATE_CONNECTING;
83
+ }
84
+
77
85
  Object.assign(this.metadata, metadata);
78
86
 
79
87
  const id = sockId++;
@@ -83,6 +91,8 @@ export default class Socket extends EventTarget {
83
91
 
84
92
  let socket;
85
93
 
94
+ this.tries++;
95
+
86
96
  if ( this.protocol ) {
87
97
  socket = new WebSocket(url, this.protocol);
88
98
  } else {
@@ -209,11 +219,11 @@ export default class Socket extends EventTarget {
209
219
  this._log('opened');
210
220
  const now = (new Date()).getTime();
211
221
 
212
- const at = this.disconnectedAt;
213
- let after = 0;
222
+ const atTime = this.disconnectedAt;
223
+ let afterMilliseconds = 0;
214
224
 
215
- if ( at ) {
216
- after = now - at;
225
+ if ( atTime ) {
226
+ afterMilliseconds = now - atTime;
217
227
  }
218
228
 
219
229
  if ( this.hasBeenOpen ) {
@@ -225,7 +235,8 @@ export default class Socket extends EventTarget {
225
235
  this.framesReceived = 0;
226
236
  this.disconnectedAt = 0;
227
237
 
228
- this.dispatchEvent(new CustomEvent(EVENT_CONNECTED, { detail: { tries: this.tries, after } }));
238
+ this.dispatchEvent(new CustomEvent(EVENT_CONNECTED, { detail: { tries: this.tries, afterMilliseconds } }));
239
+ this.tries = 0;
229
240
  this._resetWatchdog();
230
241
  clearTimeout(this.reconnectTimer);
231
242
  }
@@ -291,18 +302,26 @@ export default class Socket extends EventTarget {
291
302
  this.dispatchEvent(e);
292
303
  warningShown = true;
293
304
  } else if ( this.autoReconnect ) {
294
- if (this.tries === 0) {
295
- const e = new CustomEvent(EVENT_DISCONNECT_ERROR);
305
+ this.state = STATE_RECONNECTING;
306
+
307
+ if (this.maxTries && this.tries > 1 && this.tries <= this.maxTries) {
308
+ // dispatch an event which will trigger a growl from steve-plugin sockets warning users that we've lost connection and are attemping to reconnect
309
+ const e = new CustomEvent(EVENT_CONNECT_ERROR);
296
310
 
297
311
  this.dispatchEvent(e);
298
312
  }
299
- this.state = STATE_RECONNECTING;
300
- this.tries++;
301
- const delay = Math.max(1000, Math.min(1000 * this.tries, 30000));
302
313
 
303
- this.reconnectTimer = setTimeout(() => {
304
- this.connect();
305
- }, delay);
314
+ if (this.maxTries && this.tries > this.maxTries) {
315
+ this.state = STATE_DISCONNECTED;
316
+ // dispatch an event which will trigger a growl from steve-plugin sockets warning users that we've given up trying to reconnect
317
+ this.dispatchEvent(new CustomEvent(EVENT_DISCONNECT_ERROR));
318
+ } else {
319
+ const delay = Math.max(1000, Math.min(1000 * this.tries, 30000));
320
+
321
+ this.reconnectTimer = setTimeout(() => {
322
+ this.connect();
323
+ }, delay);
324
+ }
306
325
  } else {
307
326
  this.state = STATE_DISCONNECTED;
308
327
  }
@@ -315,10 +334,12 @@ export default class Socket extends EventTarget {
315
334
  }
316
335
 
317
336
  _log(...args) {
318
- args.unshift('Socket');
337
+ const message = JSON.parse(JSON.stringify([...args]));
338
+
339
+ message.unshift('Socket');
319
340
 
320
- args.push(`(state=${ this.state }, id=${ this.socket ? this.socket.sockId : 0 })`);
341
+ message.push(`(state=${ this.state }, id=${ this.socket ? this.socket.sockId : 0 })`);
321
342
 
322
- console.log(args.join(' ')); // eslint-disable-line no-console
343
+ console.log(message.join(' ')); // eslint-disable-line no-console
323
344
  }
324
345
  }
package/utils/string.js CHANGED
@@ -70,13 +70,7 @@ export function random32(count) {
70
70
  const out = [];
71
71
  let i;
72
72
 
73
- if ( process.server ) {
74
- const crypto = require('crypto');
75
-
76
- for ( i = 0 ; i < count ; i++ ) {
77
- out[i] = crypto.randomBytes(4).readUInt32BE(0, true);
78
- }
79
- } else if (window.crypto && window.crypto.getRandomValues) {
73
+ if (window.crypto && window.crypto.getRandomValues) {
80
74
  const tmp = new Uint32Array(count);
81
75
 
82
76
  window.crypto.getRandomValues(tmp);
@@ -906,6 +906,114 @@ describe('formRules', () => {
906
906
  expect(formRuleResult).toStrictEqual(expectedResult);
907
907
  });
908
908
 
909
+ // this rule is pretty much identical to the standard hostname, but also allows for wildcards
910
+ it('"wildcardHostname" : returns undefined when value is valid hostname', () => {
911
+ const testValue = 'www.url.com';
912
+ const formRuleResult = formRules.wildcardHostname(testValue);
913
+
914
+ expect(formRuleResult).toBeUndefined();
915
+ });
916
+
917
+ it('"wildcardHostname" : returns expected message when value starts with a dot', () => {
918
+ const testValue = '.hostname';
919
+ const formRuleResult = formRules.wildcardHostname(testValue);
920
+ const expectedResult = JSON.stringify({ message: 'validation.dns.hostname.startDot', key: 'testDisplayKey' });
921
+
922
+ expect(formRuleResult).toStrictEqual(expectedResult);
923
+ });
924
+
925
+ it('"wildcardHostname" : returns expected message when value starts is too long for a hostname', () => {
926
+ const testValue = 'There.are.many.variations.of.passages.of.Lorem.Ipsum.available.but.the.majority.have.suffered.alteration.in.some.form.by.injected.humour.or.randomised.words.which.dont.look.even.slightly.believable.If.you.are.going.to.use.a.passage.of.Lorem.Ipsum.you.need';
927
+ const formRuleResult = formRules.wildcardHostname(testValue);
928
+ const expectedResult = JSON.stringify({
929
+ message: 'validation.dns.hostname.tooLong', key: 'testDisplayKey', max: 253
930
+ });
931
+
932
+ expect(formRuleResult).toStrictEqual(expectedResult);
933
+ });
934
+
935
+ it('"wildcardHostname" : returns expected message when value contains invalid characters', () => {
936
+ const testValue = 'www.host*name.com';
937
+ const formRuleResult = formRules.wildcardHostname(testValue);
938
+ const expectedResult = JSON.stringify({
939
+ message: 'validation.chars', key: 'testDisplayKey', count: 1, chars: '"*"'
940
+ });
941
+
942
+ expect(formRuleResult).toStrictEqual(expectedResult);
943
+ });
944
+
945
+ it('"wildcardHostname" : returns expected message when value contains a space character', () => {
946
+ const testValue = 'www.host name.com';
947
+ const formRuleResult = formRules.wildcardHostname(testValue);
948
+ const expectedResult = JSON.stringify({
949
+ message: 'validation.chars', key: 'testDisplayKey', count: 1, chars: 'Space'
950
+ });
951
+
952
+ expect(formRuleResult).toStrictEqual(expectedResult);
953
+ });
954
+
955
+ it('"wildcardHostname" : returns expected message when hostname label starts with a dash', () => {
956
+ const testValue = 'www.-hostname.com';
957
+ const formRuleResult = formRules.wildcardHostname(testValue);
958
+ const expectedResult = JSON.stringify({ message: 'validation.dns.hostname.startHyphen', key: 'testDisplayKey' });
959
+
960
+ expect(formRuleResult).toStrictEqual(expectedResult);
961
+ });
962
+
963
+ it('"wildcardHostname" : returns expected message when hostname label ends with a dash', () => {
964
+ const testValue = 'www.hostname-.com';
965
+ const formRuleResult = formRules.wildcardHostname(testValue);
966
+ const expectedResult = JSON.stringify({ message: 'validation.dns.hostname.endHyphen', key: 'testDisplayKey' });
967
+
968
+ expect(formRuleResult).toStrictEqual(expectedResult);
969
+ });
970
+
971
+ it('"wildcardHostname" : returns expected message when hostname label contains a double-dash at the third character position', () => {
972
+ const testValue = 'www.ho--stname.com';
973
+ const formRuleResult = formRules.wildcardHostname(testValue);
974
+ const expectedResult = JSON.stringify({ message: 'validation.dns.doubleHyphen', key: 'testDisplayKey' });
975
+
976
+ expect(formRuleResult).toStrictEqual(expectedResult);
977
+ });
978
+
979
+ it('"wildcardHostname" : returns expected message when hostname label is too long', () => {
980
+ const testValue = 'www.0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.com';
981
+ const formRuleResult = formRules.wildcardHostname(testValue);
982
+ const expectedResult = JSON.stringify({
983
+ message: 'validation.dns.hostname.tooLongLabel', key: 'testDisplayKey', max: 63
984
+ });
985
+
986
+ expect(formRuleResult).toStrictEqual(expectedResult);
987
+ });
988
+
989
+ it('"wildcardHostname" : returns expected message when wildcard character is not the first part', () => {
990
+ const testValue = 'www.*.hostname.com';
991
+ const formRuleResult = formRules.wildcardHostname(testValue);
992
+ const expectedResult = JSON.stringify({
993
+ message: 'validation.chars', key: 'testDisplayKey', count: 1, chars: '"*"'
994
+ });
995
+
996
+ expect(formRuleResult).toStrictEqual(expectedResult);
997
+ });
998
+
999
+ it('"wildcardHostname" : returns expected message when wildcard character is at the beginning but not its own part', () => {
1000
+ const testValue = '*hostname.com';
1001
+ const formRuleResult = formRules.wildcardHostname(testValue);
1002
+
1003
+ const expectedResult = JSON.stringify({
1004
+ message: 'validation.chars', key: 'testDisplayKey', count: 1, chars: '"*"'
1005
+ });
1006
+
1007
+ expect(formRuleResult).toStrictEqual(expectedResult);
1008
+ });
1009
+
1010
+ it('"wildcardHostname" : returns valid when wildcard character is the first part', () => {
1011
+ const testValue = '*.hostname.com';
1012
+ const formRuleResult = formRules.wildcardHostname(testValue);
1013
+
1014
+ expect(formRuleResult).toBeUndefined();
1015
+ });
1016
+
909
1017
  it('"absolutePath" : return expected message when path doesn\'t begin with a "/"', () => {
910
1018
  const formRuleResult = formRules.absolutePath('absolute_path');
911
1019
  const expectedResult = JSON.stringify({ message: 'validation.path', key: 'testDisplayKey' });
@@ -204,6 +204,13 @@ export default function(t: (key: string, options?: any) => string, opt: {display
204
204
  }
205
205
  };
206
206
 
207
+ const wildcardHostname: Validator = (val: string) => {
208
+ // allow wildcard in first part of hostname
209
+ val = val ? val.replace(/^\*\./, '') : val;
210
+
211
+ return hostname(val);
212
+ };
213
+
207
214
  const externalName: Validator = (val: string) => {
208
215
  if (isEmpty(val)) {
209
216
  return t('validation.service.externalName.none');
@@ -442,6 +449,7 @@ export default function(t: (key: string, options?: any) => string, opt: {display
442
449
  hostname,
443
450
  testRule,
444
451
  subDomain,
445
- absolutePath
452
+ absolutePath,
453
+ wildcardHostname,
446
454
  };
447
455
  }
@@ -11,38 +11,3 @@ export function isHttps(value, getters, errors, validatorArgs, displayKey) {
11
11
 
12
12
  return errors;
13
13
  }
14
-
15
- export function backupTarget(value, getters, errors, validatorArgs) {
16
- const t = getters['i18n/t'];
17
-
18
- const parseValue = JSON.parse(value);
19
- const type = parseValue.type;
20
-
21
- if (!type) {
22
- return errors;
23
- }
24
-
25
- if (type === 's3') {
26
- if (!parseValue.accessKeyId) {
27
- errors.push(t('validation.required', { key: 'accessKeyId' }));
28
- }
29
-
30
- if (!parseValue.secretAccessKey) {
31
- errors.push(t('validation.required', { key: 'secretAccessKey' }));
32
- }
33
-
34
- if (!parseValue.bucketRegion) {
35
- errors.push(t('validation.required', { key: 'bucketRegion' }));
36
- }
37
-
38
- if (!parseValue.bucketName) {
39
- errors.push(t('validation.required', { key: 'bucketName' }));
40
- }
41
- }
42
-
43
- if (!parseValue.endpoint) {
44
- errors.push(t('validation.required', { key: 'endpoint' }));
45
- }
46
-
47
- return errors;
48
- }
package/yarn-error.log ADDED
@@ -0,0 +1,195 @@
1
+ Arguments:
2
+ /usr/local/bin/node /usr/local/Cellar/yarn/1.22.11/libexec/bin/yarn.js publish . --new-version 0.1.4 --no-git-tag-version --access public
3
+
4
+ PATH:
5
+ /Users/nwm/.gem/ruby/3.1.2/bin:/Users/nwm/.rubies/ruby-3.1.2/lib/ruby/gems/3.1.0/bin:/Users/nwm/.rubies/ruby-3.1.2/bin:/Users/nwm/.deno/bin:/usr/local/sbin:/Users/nwm/google-cloud-sdk/bin:/opt/local/bin:/opt/local/sbin:/Users/nwm/.rd/bin:/Users/nwm/go/bin:/usr/local/bin:/Users/nwm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/MacGPG2/bin:/Library/Apple/usr/bin:/Applications/Utilities/kdiff3.app/Contents/MacOS/:/Applications/Visual Studio Code.app/Contents/Resources/app/bin
6
+
7
+ Yarn version:
8
+ 1.22.11
9
+
10
+ Node version:
11
+ 16.16.0
12
+
13
+ Platform:
14
+ darwin x64
15
+
16
+ Trace:
17
+ Error: canceled
18
+ at Interface.<anonymous> (/usr/local/Cellar/yarn/1.22.11/libexec/lib/cli.js:137023:13)
19
+ at Interface.emit (node:events:527:28)
20
+ at Interface._ttyWrite (node:readline:1081:16)
21
+ at ReadStream.onkeypress (node:readline:288:10)
22
+ at ReadStream.emit (node:events:527:28)
23
+ at emitKeys (node:internal/readline/utils:358:14)
24
+ at emitKeys.next (<anonymous>)
25
+ at ReadStream.onData (node:internal/readline/emitKeypressEvents:61:36)
26
+ at ReadStream.emit (node:events:527:28)
27
+ at addChunk (node:internal/streams/readable:315:12)
28
+
29
+ npm manifest:
30
+ {
31
+ "name": "@rancher/shell",
32
+ "version": "0.1.4",
33
+ "description": "Rancher Dashboard Shell",
34
+ "repository": "https://github.com/rancherlabs/dashboard",
35
+ "license": "Apache-2.0",
36
+ "author": "SUSE",
37
+ "private": false,
38
+ "engines": {
39
+ "node": ">=12"
40
+ },
41
+ "files": [
42
+ "**/*"
43
+ ],
44
+ "scripts": {
45
+ "clean": "./scripts/clean",
46
+ "lint": "./node_modules/.bin/eslint --max-warnings 0 --ext .ts,.js,.vue .",
47
+ "test": "./node_modules/.bin/nyc ava --serial --verbose",
48
+ "nuxt": "./node_modules/.bin/nuxt",
49
+ "dev": "./node_modules/.bin/nuxt dev",
50
+ "mem-dev": "node --max-old-space-size=8192 ./node_modules/.bin/nuxt dev",
51
+ "docker-dev": "docker run --rm --name dashboard-dev -p 8005:8005 -e API=$API -v $(pwd):/src -v dashboard_node:/src/node_modules rancher/dashboard:dev",
52
+ "build": "./node_modules/.bin/nuxt build --devtools",
53
+ "analyze": "./node_modules/.bin/nuxt build --analyze",
54
+ "start": "./node_modules/.bin/nuxt start",
55
+ "generate": "./node_modules/.bin/nuxt generate",
56
+ "dev-debug": "node --inspect ./node_modules/.bin/nuxt",
57
+ "cy:run": "cypress run",
58
+ "cy:open": "cypress open",
59
+ "e2e:pre": "NODE_ENV=dev yarn build",
60
+ "e2e:run": "NODE_ENV=dev START_SERVER_AND_TEST_INSECURE=1 start-server-and-test start https://localhost:8005/ cy:run",
61
+ "e2e:dev": "start-server-and-test dev https://localhost:8005 cy:open"
62
+ },
63
+ "dependencies": {
64
+ "@aws-sdk/client-ec2": "3.1.0",
65
+ "@aws-sdk/client-eks": "3.1.0",
66
+ "@aws-sdk/client-kms": "3.8.1",
67
+ "@babel/plugin-proposal-optional-chaining": "7.14.5",
68
+ "@babel/plugin-proposal-private-property-in-object": "7.14.5",
69
+ "@babel/preset-typescript": "7.16.7",
70
+ "@innologica/vue-dropdown-menu": "0.1.3",
71
+ "@novnc/novnc": "1.2.0",
72
+ "@nuxt/types": "2.14.6",
73
+ "@nuxt/typescript-build": "2.1.0",
74
+ "@nuxtjs/axios": "5.12.0",
75
+ "@nuxtjs/eslint-config-typescript": "6.0.1",
76
+ "@nuxtjs/eslint-module": "1.2.0",
77
+ "@nuxtjs/proxy": "1.3.3",
78
+ "@nuxtjs/style-resources": "1.2.1",
79
+ "@nuxtjs/webpack-profile": "0.1.0",
80
+ "@popperjs/core": "2.4.4",
81
+ "@types/node": "16.4.3",
82
+ "@typescript-eslint/eslint-plugin": "4.33.0",
83
+ "@typescript-eslint/parser": "4.33.0",
84
+ "@vue/cli-plugin-babel": "4.5.15",
85
+ "@vue/cli-plugin-typescript": "4.5.15",
86
+ "@vue/cli-service": "4.5.15",
87
+ "@vue/test-utils": "1.2.1",
88
+ "@vue/vue2-jest": "27.0.0",
89
+ "add": "2.0.6",
90
+ "ansi_up": "5.0.0",
91
+ "babel-eslint": "10.1.0",
92
+ "babel-plugin-module-resolver": "4.0.0",
93
+ "babel-preset-vue": "2.0.2",
94
+ "browser-env": "3.3.0",
95
+ "cookie": "0.5.0",
96
+ "cookie-universal-nuxt": "2.1.4",
97
+ "core-js": "3.21.1",
98
+ "cron-validator": "1.2.0",
99
+ "cronstrue": "1.95.0",
100
+ "cross-env": "6.0.3",
101
+ "css-loader": "4.3.0",
102
+ "csv-loader": "3.0.3",
103
+ "cypress": "10.3.1",
104
+ "d3": "7.3.0",
105
+ "d3-selection": "1.4.1",
106
+ "dagre-d3": "0.6.4",
107
+ "dayjs": "1.8.29",
108
+ "diff2html": "2.11.2",
109
+ "dompurify": "2.0.12",
110
+ "eslint": "7.32.0",
111
+ "eslint-config-standard": "16.0.3",
112
+ "eslint-import-resolver-node": "0.3.4",
113
+ "eslint-module-utils": "2.6.1",
114
+ "eslint-plugin-cypress": "2.12.1",
115
+ "eslint-plugin-import": "2.23.4",
116
+ "eslint-plugin-jest": "24.4.0",
117
+ "eslint-plugin-n": "15.2.0",
118
+ "eslint-plugin-vue": "7.14.0",
119
+ "event-target-shim": "5.0.1",
120
+ "express": "4.17.1",
121
+ "file-saver": "2.0.2",
122
+ "frontmatter-markdown-loader": "3.7.0",
123
+ "identicon.js": "2.3.3",
124
+ "intl-messageformat": "7.8.4",
125
+ "is-url": "1.2.4",
126
+ "jest": "27.5.1",
127
+ "jest-serializer-vue": "2.0.2",
128
+ "jexl": "2.2.2",
129
+ "jquery": "3.5.1",
130
+ "js-cookie": "2.2.1",
131
+ "js-yaml": "4.1.0",
132
+ "js-yaml-loader": "1.2.2",
133
+ "jsdiff": "1.1.1",
134
+ "jsdom-global": "3.0.2",
135
+ "jsonpath-plus": "6.0.1",
136
+ "jsrsasign": "10.2.0",
137
+ "jszip": "3.7.0",
138
+ "lodash": "4.17.21",
139
+ "marked": "4.0.17",
140
+ "nodemon": "2.0.4",
141
+ "nuxt": "2.15.8",
142
+ "nyc": "15.1.0",
143
+ "papaparse": "5.3.0",
144
+ "portal-vue": "2.1.7",
145
+ "rancher-icons": "rancher/icons#v2.0.3",
146
+ "require-extension-hooks": "0.3.3",
147
+ "require-extension-hooks-babel": "1.0.0",
148
+ "require-extension-hooks-vue": "3.0.0",
149
+ "sass": "1.51.0",
150
+ "sass-loader": "10.2.1",
151
+ "serve-static": "1.14.1",
152
+ "set-cookie-parser": "2.4.6",
153
+ "shell-quote": "1.7.3",
154
+ "sinon": "8.1.1",
155
+ "start-server-and-test": "1.13.1",
156
+ "style-loader": "1.2.1",
157
+ "ts-node": "8.10.2",
158
+ "typescript": "4.1.6",
159
+ "url-parse": "1.5.10",
160
+ "v-tooltip": "2.0.3",
161
+ "vue": "2.6.14",
162
+ "vue-clipboard2": "0.3.1",
163
+ "vue-codemirror": "4.0.6",
164
+ "vue-js-modal": "1.3.35",
165
+ "vue-resize": "0.4.5",
166
+ "vue-select": "3.18.3",
167
+ "vue-server-renderer": "2.6.14",
168
+ "vue-shortkey": "3.1.7",
169
+ "vue-template-compiler": "2.6.14",
170
+ "vue2-transitions": "0.3.0",
171
+ "vuedraggable": "2.24.3",
172
+ "vuex": "3.6.2",
173
+ "webpack-bundle-analyzer": "4.5.0",
174
+ "webpack-virtual-modules": "0.4.3",
175
+ "xterm": "4.9.0",
176
+ "xterm-addon-fit": "0.4.0",
177
+ "xterm-addon-search": "0.7.0",
178
+ "xterm-addon-web-links": "0.4.0",
179
+ "xterm-addon-webgl": "0.9.0",
180
+ "worker-loader": "3.0.8",
181
+ "yarn": "1.22.18"
182
+ },
183
+ "nyc": {
184
+ "extension": [
185
+ ".js",
186
+ ".vue"
187
+ ]
188
+ }
189
+ }
190
+
191
+ yarn manifest:
192
+ No manifest
193
+
194
+ Lockfile:
195
+ No lockfile