@rancher/shell 3.0.5-rc.7 → 3.0.5-rc.9

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 (301) hide show
  1. package/assets/brand/classic/metadata.json +3 -0
  2. package/assets/styles/app.scss +1 -0
  3. package/assets/styles/base/_color.scss +19 -0
  4. package/assets/styles/base/_helpers.scss +10 -0
  5. package/assets/styles/base/_variables.scss +1 -1
  6. package/assets/styles/fonts/_icons.scss +1 -32
  7. package/assets/styles/global/_layout.scss +1 -1
  8. package/assets/styles/global/_tooltip.scss +7 -4
  9. package/assets/styles/themes/_dark.scss +272 -259
  10. package/assets/styles/themes/_light.scss +551 -516
  11. package/assets/styles/themes/_modern.scss +936 -0
  12. package/assets/translations/en-us.yaml +219 -38
  13. package/assets/translations/zh-hans.yaml +0 -1
  14. package/chart/__tests__/S3.test.ts +2 -1
  15. package/chart/monitoring/grafana/index.vue +8 -2
  16. package/cloud-credential/generic.vue +18 -10
  17. package/cloud-credential/harvester.vue +1 -9
  18. package/components/ActionMenuShell.vue +3 -1
  19. package/components/AdvancedSection.vue +8 -0
  20. package/components/ChartReadme.vue +17 -7
  21. package/components/Cron/CronExpressionEditor.vue +299 -0
  22. package/components/Cron/CronExpressionEditorModal.vue +247 -0
  23. package/components/Cron/CronTooltip.vue +87 -0
  24. package/components/Cron/types.ts +13 -0
  25. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +1 -26
  26. package/components/Drawer/ResourceDetailDrawer/composables.ts +0 -23
  27. package/components/Drawer/ResourceDetailDrawer/index.vue +17 -4
  28. package/components/ForceDirectedTreeChart/composable.ts +11 -0
  29. package/components/InstallHelmCharts.vue +656 -0
  30. package/components/LazyImage.vue +60 -4
  31. package/components/LocaleSelector.vue +7 -2
  32. package/components/Markdown.vue +4 -0
  33. package/components/PromptModal.vue +1 -1
  34. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +1 -0
  35. package/components/Resource/Detail/CopyToClipboard.vue +78 -0
  36. package/components/Resource/Detail/FetchLoader/__tests__/composables.test.ts +69 -0
  37. package/components/Resource/Detail/FetchLoader/composables.ts +27 -0
  38. package/components/Resource/Detail/Masthead/composable.ts +16 -0
  39. package/components/Resource/Detail/Masthead/index.vue +37 -0
  40. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  41. package/components/Resource/Detail/Metadata/Annotations/index.vue +1 -1
  42. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +13 -61
  43. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +33 -6
  44. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +29 -43
  45. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +25 -5
  46. package/components/Resource/Detail/Metadata/KeyValue.vue +12 -23
  47. package/components/Resource/Detail/Metadata/KeyValueRow.vue +144 -0
  48. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -0
  49. package/components/Resource/Detail/Metadata/Labels/index.vue +1 -0
  50. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +30 -32
  51. package/components/Resource/Detail/Metadata/__tests__/KeyValueRow.test.ts +108 -0
  52. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +10 -20
  53. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +12 -5
  54. package/components/Resource/Detail/Metadata/composables.ts +9 -10
  55. package/components/Resource/Detail/Metadata/index.vue +18 -2
  56. package/components/Resource/Detail/Page.vue +35 -21
  57. package/components/Resource/Detail/Preview/Content.vue +63 -0
  58. package/components/Resource/Detail/Preview/Preview.vue +128 -0
  59. package/components/Resource/Detail/Preview/__tests__/Content.spec.ts +71 -0
  60. package/components/Resource/Detail/Preview/__tests__/Preview.spec.ts +121 -0
  61. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +141 -0
  62. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +136 -0
  63. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +245 -0
  64. package/components/Resource/Detail/ResourcePopover/index.vue +226 -0
  65. package/components/Resource/Detail/SpacedRow.vue +1 -0
  66. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +8 -14
  67. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  68. package/components/Resource/Detail/TitleBar/composables.ts +3 -6
  69. package/components/Resource/Detail/TitleBar/index.vue +11 -29
  70. package/components/Resource/Detail/ViewOptions/composable.ts +9 -0
  71. package/components/Resource/Detail/ViewOptions/index.vue +41 -0
  72. package/components/Resource/Detail/__tests__/CopyToClipboard.spec.ts +82 -0
  73. package/components/ResourceDetail/Masthead/legacy.vue +0 -19
  74. package/components/ResourceDetail/index.vue +544 -74
  75. package/components/ResourceTable.vue +24 -0
  76. package/components/SlideInPanelManager.vue +10 -3
  77. package/components/SortableTable/index.vue +11 -5
  78. package/components/SortableTable/paging.js +3 -0
  79. package/components/Tabbed/Tab.vue +43 -1
  80. package/components/Tabbed/index.vue +32 -4
  81. package/components/__tests__/Cron/CronExpressionEditor.test.ts +151 -0
  82. package/components/__tests__/Cron/CronExpressionEditorModal.test.ts +81 -0
  83. package/components/__tests__/LazyImage.spec.ts +121 -0
  84. package/components/auth/login/saml.vue +86 -0
  85. package/components/fleet/FleetStatus.vue +4 -0
  86. package/components/form/ClusterAppearance.vue +5 -0
  87. package/components/form/LabeledSelect.vue +8 -8
  88. package/components/form/Members/ClusterPermissionsEditor.vue +1 -1
  89. package/components/form/ProjectMemberEditor.vue +1 -1
  90. package/components/form/ResourceLabeledSelect.vue +19 -6
  91. package/components/form/ResourceTabs/composable.ts +54 -0
  92. package/components/form/ResourceTabs/index.vue +30 -7
  93. package/components/form/SecretSelector.vue +9 -0
  94. package/components/form/Select.vue +13 -10
  95. package/components/form/__tests__/LabeledSelect.test.ts +133 -0
  96. package/components/form/__tests__/Select.test.ts +134 -0
  97. package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
  98. package/components/formatter/FleetApplicationSource.vue +25 -17
  99. package/components/nav/Favorite.vue +4 -0
  100. package/components/nav/NotificationCenter/Notification.vue +1 -27
  101. package/components/nav/WindowManager/index.vue +3 -3
  102. package/composables/useExtensionManager.ts +17 -0
  103. package/config/home-links.js +12 -0
  104. package/config/labels-annotations.js +1 -3
  105. package/config/page-actions.js +0 -1
  106. package/config/product/explorer.js +3 -1
  107. package/config/product/fleet.js +2 -7
  108. package/config/product/manager.js +0 -5
  109. package/config/query-params.js +1 -0
  110. package/config/router/navigation-guards/clusters.js +2 -1
  111. package/config/router/navigation-guards/products.js +1 -1
  112. package/core/extension-manager-impl.js +518 -0
  113. package/core/plugins.js +35 -468
  114. package/core/types.ts +8 -2
  115. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +1 -0
  116. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +11 -0
  117. package/detail/__tests__/workload.test.ts +164 -0
  118. package/detail/catalog.cattle.io.app.vue +7 -4
  119. package/detail/configmap.vue +33 -75
  120. package/detail/fleet.cattle.io.bundle.vue +1 -5
  121. package/detail/fleet.cattle.io.cluster.vue +3 -2
  122. package/detail/fleet.cattle.io.gitrepo.vue +76 -49
  123. package/detail/fleet.cattle.io.helmop.vue +78 -49
  124. package/detail/projectsecret.vue +11 -0
  125. package/detail/provisioning.cattle.io.cluster.vue +350 -324
  126. package/detail/secret.vue +49 -308
  127. package/detail/workload/index.vue +38 -21
  128. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  129. package/dialog/GenericPrompt.vue +1 -1
  130. package/dialog/ImportDialog.vue +9 -2
  131. package/dialog/InstallExtensionDialog.vue +26 -15
  132. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +2 -1
  133. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  134. package/edit/__tests__/resources.cattle.io.restore.test.ts +106 -0
  135. package/edit/cloudcredential.vue +31 -17
  136. package/edit/constraints.gatekeeper.sh.constraint/index.vue +10 -2
  137. package/edit/fleet.cattle.io.cluster.vue +19 -0
  138. package/edit/fleet.cattle.io.gitrepo.vue +28 -22
  139. package/edit/fleet.cattle.io.helmop.vue +78 -56
  140. package/edit/logging.banzaicloud.io.output/index.vue +1 -1
  141. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +5 -6
  142. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +12 -11
  143. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +11 -1
  144. package/edit/networking.k8s.io.ingress/Certificate.vue +9 -11
  145. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +8 -3
  146. package/edit/networking.k8s.io.ingress/Rule.vue +2 -5
  147. package/edit/networking.k8s.io.ingress/RulePath.vue +17 -11
  148. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +11 -10
  149. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -3
  150. package/edit/networking.k8s.io.networkpolicy/index.vue +17 -17
  151. package/edit/provisioning.cattle.io.cluster/index.vue +14 -19
  152. package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -15
  153. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +9 -7
  154. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +10 -12
  155. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +39 -38
  156. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +41 -19
  157. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +16 -3
  158. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +30 -31
  159. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryMirrors.vue +9 -10
  160. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -3
  161. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/DrainOptions.vue +16 -9
  162. package/edit/resources.cattle.io.restore.vue +5 -8
  163. package/edit/workload/index.vue +5 -14
  164. package/list/__tests__/workload.test.ts +1 -0
  165. package/list/provisioning.cattle.io.cluster.vue +1 -69
  166. package/list/workload.vue +8 -1
  167. package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
  168. package/machine-config/components/GCEImage.vue +6 -5
  169. package/machine-config/google.vue +20 -7
  170. package/machine-config/vmwarevsphere.vue +7 -17
  171. package/mixins/__tests__/chart.test.ts +139 -1
  172. package/mixins/chart.js +58 -20
  173. package/mixins/resource-fetch-api-pagination.js +3 -4
  174. package/models/__tests__/chart.test.ts +111 -80
  175. package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  176. package/models/__tests__/namespace.test.ts +69 -0
  177. package/models/__tests__/node.test.ts +7 -63
  178. package/models/apps.statefulset.js +8 -10
  179. package/models/catalog.cattle.io.app.js +1 -1
  180. package/models/catalog.cattle.io.operation.js +1 -1
  181. package/models/chart.js +41 -21
  182. package/models/cloudcredential.js +2 -163
  183. package/models/cluster/node.js +7 -7
  184. package/models/cluster.x-k8s.io.machine.js +3 -3
  185. package/models/compliance.cattle.io.clusterscan.js +2 -2
  186. package/models/configmap.js +4 -0
  187. package/models/constraints.gatekeeper.sh.constraint.js +1 -1
  188. package/models/fleet-application.js +16 -63
  189. package/models/fleet.cattle.io.bundle.js +1 -38
  190. package/models/fleet.cattle.io.gitrepo.js +19 -1
  191. package/models/fleet.cattle.io.helmop.js +30 -22
  192. package/models/management.cattle.io.project.js +12 -0
  193. package/models/management.cattle.io.setting.js +4 -0
  194. package/models/namespace.js +30 -0
  195. package/models/persistentvolumeclaim.js +1 -1
  196. package/models/pod.js +2 -2
  197. package/models/provisioning.cattle.io.cluster.js +16 -40
  198. package/models/rke.cattle.io.etcdsnapshot.js +1 -1
  199. package/models/secret.js +4 -0
  200. package/models/storage.k8s.io.storageclass.js +2 -2
  201. package/models/workload.js +6 -3
  202. package/package.json +19 -18
  203. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +26 -10
  204. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +4 -1
  205. package/pages/c/_cluster/apps/charts/__tests__/AppChartCardFooter.spec.js +41 -0
  206. package/pages/c/_cluster/apps/charts/chart.vue +440 -183
  207. package/pages/c/_cluster/apps/charts/index.vue +1 -0
  208. package/pages/c/_cluster/apps/charts/install.vue +7 -6
  209. package/pages/c/_cluster/explorer/projectsecret.vue +3 -13
  210. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +102 -12
  211. package/pages/c/_cluster/explorer/tools/index.vue +145 -254
  212. package/pages/c/_cluster/fleet/__tests__/index.test.ts +608 -314
  213. package/pages/c/_cluster/fleet/index.vue +103 -44
  214. package/pages/c/_cluster/manager/cloudCredential/index.vue +20 -60
  215. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +12 -2
  216. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +11 -4
  217. package/pages/c/_cluster/uiplugins/__tests__/index.spec.ts +318 -0
  218. package/pages/c/_cluster/uiplugins/index.vue +256 -387
  219. package/pages/home.vue +1 -9
  220. package/plugins/dashboard-store/actions.js +42 -22
  221. package/plugins/dashboard-store/resource-class.js +80 -0
  222. package/plugins/steve/__tests__/getters.test.ts +1 -1
  223. package/plugins/steve/__tests__/subscribe.spec.ts +259 -1
  224. package/plugins/steve/getters.js +8 -2
  225. package/plugins/steve/resourceWatcher.js +10 -3
  226. package/plugins/steve/subscribe.js +192 -19
  227. package/plugins/steve/worker/web-worker.advanced.js +2 -0
  228. package/public/index.html +2 -1
  229. package/rancher-components/Card/Card.vue +1 -19
  230. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  231. package/rancher-components/Form/Radio/RadioButton.vue +1 -1
  232. package/rancher-components/Form/Radio/RadioGroup.vue +1 -1
  233. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -11
  234. package/rancher-components/Pill/RcCounterBadge/RcCounterBadge.test.ts +53 -0
  235. package/rancher-components/Pill/RcCounterBadge/RcCounterBadge.vue +65 -0
  236. package/rancher-components/Pill/RcCounterBadge/index.ts +1 -0
  237. package/rancher-components/Pill/RcCounterBadge/types.ts +7 -0
  238. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.test.ts +15 -0
  239. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +65 -0
  240. package/rancher-components/Pill/RcStatusBadge/index.ts +2 -0
  241. package/rancher-components/Pill/RcStatusBadge/types.ts +5 -0
  242. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.test.ts +33 -0
  243. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +75 -0
  244. package/rancher-components/Pill/RcStatusIndicator/index.ts +2 -0
  245. package/rancher-components/Pill/RcStatusIndicator/types.ts +7 -0
  246. package/rancher-components/Pill/RcTag/RcTag.test.ts +64 -0
  247. package/rancher-components/Pill/RcTag/RcTag.vue +94 -0
  248. package/rancher-components/Pill/RcTag/index.ts +1 -0
  249. package/rancher-components/Pill/RcTag/types.ts +9 -0
  250. package/rancher-components/Pill/types.ts +3 -0
  251. package/rancher-components/RcButton/RcButton.vue +1 -1
  252. package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
  253. package/rancher-components/RcDropdown/RcDropdown.vue +5 -0
  254. package/rancher-components/RcDropdown/RcDropdownItem.vue +7 -1
  255. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +2 -1
  256. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +2 -1
  257. package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
  258. package/rancher-components/RcDropdown/useDropdownItem.ts +30 -1
  259. package/rancher-components/RcItemCard/RcItemCard.test.ts +20 -0
  260. package/rancher-components/RcItemCard/RcItemCard.vue +41 -6
  261. package/rancher-components/RcItemCard/RcItemCardAction.vue +12 -0
  262. package/store/__tests__/catalog.test.ts +156 -1
  263. package/store/aws.js +19 -8
  264. package/store/catalog.js +10 -5
  265. package/store/type-map.js +3 -15
  266. package/types/extension-manager.ts +26 -0
  267. package/types/resources/settings.d.ts +1 -1
  268. package/types/shell/index.d.ts +149 -44
  269. package/types/uiplugins.ts +73 -0
  270. package/utils/__tests__/back-off.test.ts +354 -0
  271. package/utils/__tests__/kontainer.test.ts +19 -0
  272. package/utils/__tests__/product.test.ts +129 -0
  273. package/utils/__tests__/resource.test.ts +87 -0
  274. package/utils/__tests__/uiplugins.test.ts +84 -0
  275. package/utils/alertmanagerconfig.js +2 -2
  276. package/utils/auth.js +3 -76
  277. package/utils/back-off.ts +176 -0
  278. package/utils/dynamic-importer.js +8 -0
  279. package/utils/kontainer.ts +3 -5
  280. package/utils/product.ts +39 -0
  281. package/utils/resource.ts +35 -0
  282. package/utils/select.js +0 -24
  283. package/utils/style.ts +3 -0
  284. package/utils/uiplugins.ts +29 -2
  285. package/utils/validators/__tests__/setting.test.js +92 -0
  286. package/utils/validators/formRules/__tests__/index.test.ts +91 -7
  287. package/utils/validators/formRules/index.ts +84 -8
  288. package/utils/validators/setting.js +17 -0
  289. package/vue.config.js +1 -1
  290. package/cloud-credential/__tests__/harvester.test.ts +0 -18
  291. package/components/Resource/Detail/Metadata/Rectangle.vue +0 -34
  292. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +0 -24
  293. package/components/ResourceDetail/Masthead/__tests__/legacy.test.ts +0 -65
  294. package/components/ResourceDetail/__tests__/index.test.ts +0 -135
  295. package/components/ResourceDetail/legacy.vue +0 -562
  296. package/components/formatter/CloudCredExpired.vue +0 -69
  297. package/pages/explorer/resource/detail/configmap.vue +0 -42
  298. package/pages/explorer/resource/detail/projectsecret.vue +0 -9
  299. package/pages/explorer/resource/detail/secret.vue +0 -63
  300. package/utils/aws.js +0 -0
  301. /package/components/{ForceDirectedTreeChart.vue → ForceDirectedTreeChart/index.vue} +0 -0
@@ -17,8 +17,20 @@
17
17
  <template>
18
18
  <div
19
19
  item-card-action
20
+ class="rc-item-card-action"
20
21
  data-testid="rc-item-card-action"
21
22
  >
22
23
  <slot />
23
24
  </div>
24
25
  </template>
26
+
27
+ <style lang="scss">
28
+ .rc-item-card-action {
29
+ .v-popper {
30
+ .icon-actions {
31
+ color: var(--body-text);
32
+ font-size: 19px;
33
+ }
34
+ }
35
+ }
36
+ </style>
@@ -1,5 +1,7 @@
1
1
  import { CATALOG } from '@shell/config/types';
2
- import { state, getters, actions, mutations } from '../catalog';
2
+ import {
3
+ state, getters, actions, mutations, filterAndArrangeCharts
4
+ } from '../catalog';
3
5
  import { createStore } from 'vuex';
4
6
 
5
7
  const clusterRepo = { _key: 'testClusterRepo' };
@@ -204,4 +206,157 @@ describe('catalog', () => {
204
206
  expect(store.state[catalogStoreName].versionInfos).toStrictEqual({ });
205
207
  });
206
208
  });
209
+
210
+ describe('filterAndArrangeCharts', () => {
211
+ const mockCharts = [
212
+ {
213
+ chartName: 'chart-a',
214
+ chartNameDisplay: 'Chart Alpha',
215
+ chartDescription: 'Description for Alpha',
216
+ keywords: ['keyword1', 'keyword2'],
217
+ versions: [{ annotations: {}, version: '1.0.0' }],
218
+ deprecated: false,
219
+ hidden: false,
220
+ repoKey: 'repo1',
221
+ chartType: 'app',
222
+ categories: [],
223
+ tags: [],
224
+ },
225
+ {
226
+ chartName: 'chart-b',
227
+ chartNameDisplay: 'Chart Beta',
228
+ chartDescription: 'Description for Beta',
229
+ keywords: ['keyword2', 'keyword3'],
230
+ versions: [{ annotations: {}, version: '1.0.0' }],
231
+ deprecated: false,
232
+ hidden: false,
233
+ repoKey: 'repo1',
234
+ chartType: 'app',
235
+ categories: [],
236
+ tags: [],
237
+ },
238
+ {
239
+ chartName: 'chart-c',
240
+ chartNameDisplay: 'Chart Gamma',
241
+ chartDescription: 'Description for Gamma',
242
+ keywords: ['keyword3', 'keyword4'],
243
+ versions: [{ annotations: {}, version: '1.0.0' }],
244
+ deprecated: false,
245
+ hidden: false,
246
+ repoKey: 'repo1',
247
+ chartType: 'app',
248
+ categories: [],
249
+ tags: [],
250
+ },
251
+ ];
252
+
253
+ it('should return all charts when no search query is provided', () => {
254
+ const result = filterAndArrangeCharts(mockCharts, {});
255
+
256
+ expect(result).toHaveLength(mockCharts.length);
257
+ });
258
+
259
+ it('should filter charts by name', () => {
260
+ const result = filterAndArrangeCharts(mockCharts, { searchQuery: 'Chart Alpha' });
261
+
262
+ expect(result).toHaveLength(1);
263
+ expect(result[0].chartNameDisplay).toBe('Chart Alpha');
264
+ });
265
+
266
+ it('should filter charts by description', () => {
267
+ const result = filterAndArrangeCharts(mockCharts, { searchQuery: 'Description for Beta' });
268
+
269
+ expect(result).toHaveLength(1);
270
+ expect(result[0].chartNameDisplay).toBe('Chart Beta');
271
+ });
272
+
273
+ it('should filter charts by keyword', () => {
274
+ const result = filterAndArrangeCharts(mockCharts, { searchQuery: 'keyword1' });
275
+
276
+ expect(result).toHaveLength(1);
277
+ expect(result[0].chartNameDisplay).toBe('Chart Alpha');
278
+ });
279
+
280
+ it('should handle multiple search tokens', () => {
281
+ const result = filterAndArrangeCharts(mockCharts, { searchQuery: 'Chart, keyword2' });
282
+
283
+ expect(result).toHaveLength(2);
284
+ });
285
+
286
+ it('should be case-insensitive', () => {
287
+ const result = filterAndArrangeCharts(mockCharts, { searchQuery: 'chart alpha' });
288
+
289
+ expect(result).toHaveLength(1);
290
+ expect(result[0].chartNameDisplay).toBe('Chart Alpha');
291
+ });
292
+
293
+ it('should return an empty array if no charts match', () => {
294
+ const result = filterAndArrangeCharts(mockCharts, { searchQuery: 'nonexistent' });
295
+
296
+ expect(result).toHaveLength(0);
297
+ });
298
+ });
299
+
300
+ describe('getters', () => {
301
+ describe('version', () => {
302
+ it('should find a version from a chart, respecting the showDeprecated flag for charts', () => {
303
+ // A regular chart with some versions
304
+ const regularChart = {
305
+ repoType: 'cluster',
306
+ repoName: 'rancher-charts',
307
+ chartName: 'regular-chart',
308
+ deprecated: false,
309
+ versions: [{ version: '1.2.3' }, { version: '1.2.4' }]
310
+ };
311
+ // A deprecated chart with some versions
312
+ const deprecatedChart = {
313
+ repoType: 'cluster',
314
+ repoName: 'rancher-charts',
315
+ chartName: 'deprecated-chart',
316
+ deprecated: true,
317
+ versions: [{ version: '2.0.0' }, { version: '2.1.0' }]
318
+ };
319
+
320
+ const allCharts = [regularChart, deprecatedChart];
321
+ const state = {};
322
+ const localGetters = {
323
+ charts: allCharts,
324
+ chart: (args: any) => getters.chart(state, { charts: allCharts })(args)
325
+ };
326
+
327
+ // Scenario 1: Get a version from a regular chart
328
+ const result1 = getters.version(state, localGetters)({
329
+ repoType: 'cluster',
330
+ repoName: 'rancher-charts',
331
+ chartName: 'regular-chart',
332
+ versionName: '1.2.3',
333
+ showDeprecated: false
334
+ });
335
+
336
+ expect(result1).toStrictEqual({ version: '1.2.3' });
337
+
338
+ // Scenario 2: Get a version from a deprecated chart
339
+ const result2 = getters.version(state, localGetters)({
340
+ repoType: 'cluster',
341
+ repoName: 'rancher-charts',
342
+ chartName: 'deprecated-chart',
343
+ versionName: '2.0.0',
344
+ showDeprecated: true
345
+ });
346
+
347
+ expect(result2).toStrictEqual({ version: '2.0.0' });
348
+
349
+ // Scenario 3: Try to get a version from a deprecated chart without the flag should fail
350
+ const result3 = getters.version(state, localGetters)({
351
+ repoType: 'cluster',
352
+ repoName: 'rancher-charts',
353
+ chartName: 'deprecated-chart',
354
+ versionName: '2.0.0',
355
+ showDeprecated: false
356
+ });
357
+
358
+ expect(result3).toBeNull();
359
+ });
360
+ });
361
+ });
207
362
  });
package/store/aws.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { sortBy } from '@shell/utils/sort';
2
2
  import { randomStr } from '@shell/utils/string';
3
- import { FetchHttpHandler } from '@aws-sdk/fetch-http-handler';
3
+ import { FetchHttpHandler } from '@smithy/fetch-http-handler';
4
4
  import { isArray, addObjects } from '@shell/utils/array';
5
5
 
6
6
  export const state = () => {
@@ -11,26 +11,33 @@ export const state = () => {
11
11
  };
12
12
 
13
13
  class Handler {
14
- constructor(cloudCredentialId) {
14
+ constructor(cloudCredentialId, options) {
15
15
  this.cloudCredentialId = (cloudCredentialId || '');
16
+ this.fetchHandler = new FetchHttpHandler(options);
16
17
  }
17
18
 
18
- handle(httpRequest, ...args) {
19
+ async handle(httpRequest, options = {}) {
20
+ if (!httpRequest?.headers) {
21
+ httpRequest.headers = {};
22
+ }
23
+
19
24
  httpRequest.headers['x-api-headers-restrict'] = 'Content-Length';
20
25
 
21
- if ( this.cloudCredentialId ) {
26
+ if (this.cloudCredentialId) {
22
27
  httpRequest.headers['x-api-cattleauth-header'] = `awsv4 credID=${ this.cloudCredentialId }`;
23
- } else {
28
+ } else if (httpRequest?.headers['authorization']) {
24
29
  httpRequest.headers['x-api-auth-header'] = httpRequest.headers['authorization'];
25
30
  }
26
31
 
27
32
  delete httpRequest.headers['authorization'];
28
33
 
29
- httpRequest.headers['content-type'] = `rancher:${ httpRequest.headers['content-type'] }`;
34
+ const originalContentType = httpRequest.headers['content-type'] ?? '';
35
+
36
+ httpRequest.headers['content-type'] = originalContentType ? `rancher:${ originalContentType }` : 'rancher:';
30
37
 
31
38
  const endpoint = `/meta/proxy/`;
32
39
 
33
- if ( !httpRequest.path.startsWith(endpoint) ) {
40
+ if (!httpRequest.path.startsWith(endpoint)) {
34
41
  httpRequest.path = endpoint + httpRequest.hostname + httpRequest.path;
35
42
  }
36
43
 
@@ -38,7 +45,7 @@ class Handler {
38
45
  httpRequest.hostname = window.location.hostname;
39
46
  httpRequest.port = window.location.port;
40
47
 
41
- return FetchHttpHandler.prototype.handle.call(this, httpRequest, ...args);
48
+ return this.fetchHandler.handle(httpRequest, options);
42
49
  }
43
50
  }
44
51
 
@@ -107,6 +114,7 @@ export const actions = {
107
114
  region,
108
115
  credentialDefaultProvider: credentialDefaultProvider(accessKey, secretKey),
109
116
  requestHandler: new Handler(cloudCredentialId),
117
+ useDualstackEndpoint: true,
110
118
  });
111
119
 
112
120
  return client;
@@ -121,6 +129,7 @@ export const actions = {
121
129
  region,
122
130
  credentialDefaultProvider: credentialDefaultProvider(accessKey, secretKey),
123
131
  requestHandler: new Handler(cloudCredentialId),
132
+ useDualstackEndpoint: true,
124
133
  });
125
134
 
126
135
  return client;
@@ -135,6 +144,7 @@ export const actions = {
135
144
  region,
136
145
  credentialDefaultProvider: credentialDefaultProvider(accessKey, secretKey),
137
146
  requestHandler: new Handler(cloudCredentialId),
147
+ useDualstackEndpoint: true,
138
148
  });
139
149
 
140
150
  return client;
@@ -149,6 +159,7 @@ export const actions = {
149
159
  region,
150
160
  credentialDefaultProvider: credentialDefaultProvider(accessKey, secretKey),
151
161
  requestHandler: new Handler(cloudCredentialId),
162
+ useDualstackEndpoint: true,
152
163
  });
153
164
 
154
165
  return client;
package/store/catalog.js CHANGED
@@ -237,10 +237,10 @@ export const getters = {
237
237
 
238
238
  version(state, getters) {
239
239
  return ({
240
- repoType, repoName, chartName, versionName
240
+ repoType, repoName, chartName, versionName, showDeprecated
241
241
  }) => {
242
242
  const chart = getters['chart']({
243
- repoType, repoName, chartName
243
+ repoType, repoName, chartName, showDeprecated
244
244
  });
245
245
 
246
246
  if ( !chart ) {
@@ -539,6 +539,7 @@ function addChart(ctx, map, chart, repo) {
539
539
  featuredIndex: chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED] ? Number(chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED]) : Number.MAX_SAFE_INTEGER,
540
540
  repoKey: repo._key,
541
541
  versions: [],
542
+ keywords: chart.keywords || [],
542
543
  categories: filterCategories(chart.keywords),
543
544
  deprecated: !!chart.deprecated,
544
545
  experimental,
@@ -693,11 +694,15 @@ export function filterAndArrangeCharts(charts, {
693
694
  if ( searchQuery ) {
694
695
  // The search filter doesn't match
695
696
  const searchTokens = searchQuery.split(/\s*[, ]\s*/).map((x) => ensureRegex(x, false));
697
+ const chartDescription = c.chartDescription || '';
698
+ const keywords = c.keywords || [];
696
699
 
697
- for ( const token of searchTokens ) {
698
- const chartDescription = c.chartDescription || '';
700
+ for (const token of searchTokens) {
701
+ const nameMatch = c.chartNameDisplay.match(token);
702
+ const descMatch = chartDescription.match(token);
703
+ const keywordMatch = keywords.some((k) => k.match(token));
699
704
 
700
- if ( !c.chartNameDisplay.match(token) && !chartDescription.match(token) ) {
705
+ if (!nameMatch && !descMatch && !keywordMatch) {
701
706
  return false;
702
707
  }
703
708
  }
package/store/type-map.js CHANGED
@@ -103,8 +103,6 @@
103
103
  // depaginate: undefined -- Use this to depaginate requests for this type
104
104
  // resourceEditMasthead: true -- Show the Masthead in the edit resource component
105
105
  // customRoute: undefined,
106
- // hasGraph: undefined -- If true, render ForceDirectedTreeChart graph (ATTENTION: option graphConfig is needed also!!!)
107
- // graphConfig: undefined -- Use this to pass along the graph configuration
108
106
  // notFilterNamespace: undefined -- Define namespaces that do not need to be filtered
109
107
  // localOnly: False -- Hide this type from the nav/search bar on downstream clusters
110
108
  // custom: any - Custom options for a given type
@@ -208,7 +206,6 @@ export const SPOOFED_PREFIX = '__[[spoofed]]__';
208
206
  export const SPOOFED_API_PREFIX = '__[[spoofedapi]]__';
209
207
 
210
208
  const instanceMethods = {};
211
- const graphConfigMap = {};
212
209
 
213
210
  export const IF_HAVE = {
214
211
  V2_MONITORING: 'v2-monitoring',
@@ -291,10 +288,6 @@ export function DSL(store, product, module = 'type-map') {
291
288
  },
292
289
 
293
290
  configureType(match, options) {
294
- if (options.graphConfig) {
295
- graphConfigMap[match] = options.graphConfig;
296
- delete options.graphConfig;
297
- }
298
291
  store.commit(`${ module }/configureType`, { ...options, match });
299
292
  },
300
293
 
@@ -1178,14 +1171,9 @@ export const getters = {
1178
1171
  };
1179
1172
  },
1180
1173
 
1181
- hasGraph(state, getters) {
1182
- return (resource) => {
1183
- const typeOptions = getters['optionsFor'](resource);
1184
-
1185
- if (typeOptions && typeOptions.hasGraph) {
1186
- return graphConfigMap[resource];
1187
- }
1188
-
1174
+ // This has to be left in to support extensions which use shell version 3.0.5-rc.8 or earlier, this extensions have a version of ResourceDetail/index.vue which still invokes this method.
1175
+ hasGraph() {
1176
+ return () => {
1189
1177
  return null;
1190
1178
  };
1191
1179
  },
@@ -0,0 +1,26 @@
1
+ import { ClusterProvisionerContext } from '@shell/core/types';
2
+ export type ExtensionManager = {
3
+ internal(): any;
4
+ loadPluginAsync(plugin: any): Promise<void>;
5
+ loadAsync(id: string, mainFile: string): Promise<void>;
6
+ loadBuiltinExtensions(): void;
7
+ registerBuiltinExtension(id: string, module: any): void;
8
+ initBuiltinExtension(id: string, module: any): void;
9
+ logout(): Promise<void>;
10
+ removePlugin(name: string): Promise<void>;
11
+ removeTypeFromStore(store: any, storeName: string, types: string[]): any[];
12
+ applyPlugin(plugin: any): void;
13
+ register(type: string, name: string, fn: Function): void;
14
+ unregister(type: string, name: string, fn: Function): void;
15
+ getAll(): any;
16
+ getPlugins(): any;
17
+ getDynamic(typeName: string, name: string): any;
18
+ getValidator(name: string): any;
19
+ getUIConfig(type: string, uiArea: string): any[];
20
+ getAllUIConfig(): any;
21
+ getProviders(context: ClusterProvisionerContext): any[];
22
+ lastLoad: number;
23
+ listDynamic(typeName: string): string[];
24
+ products: any[];
25
+ loadProducts(loadPlugins: any[]): void;
26
+ }
@@ -39,7 +39,7 @@ export interface PaginationSettings {
39
39
  * List of specific features that can be enabled / disabled
40
40
  */
41
41
  features?: {
42
- [key in PaginationFeature]: { // eslint-disable-line no-unused-vars
42
+ [key in PaginationFeature]: {
43
43
  enabled: boolean,
44
44
  }
45
45
  },
@@ -121,7 +121,6 @@ export namespace FLEET {
121
121
  export { CLUSTER_NAMESPACE_1 as CLUSTER_NAMESPACE };
122
122
  export let CLUSTER: string;
123
123
  export let CREATED_BY_USER_ID: string;
124
- export let CREATED_BY_USER_NAME: string;
125
124
  export let OCI_STORAGE_SECRET_DEFAULT: string;
126
125
  export let OCI_STORAGE_SECRET_GENERATED: string;
127
126
  }
@@ -149,6 +148,7 @@ export namespace HCI {
149
148
  let NETWORK_TYPE: string;
150
149
  let CLUSTER_NETWORK: string;
151
150
  let PRIMARY_SERVICE: string;
151
+ let CPU_MANAGER: string;
152
152
  }
153
153
  export namespace CLUSTER_BADGE {
154
154
  export let TEXT: string;
@@ -157,9 +157,6 @@ export namespace CLUSTER_BADGE {
157
157
  export let ICON_TEXT: string;
158
158
  }
159
159
  export const SYSTEM_LABELS: string[];
160
- export namespace CLOUD_CREDENTIALS {
161
- let EXPIRATION: string;
162
- }
163
160
  export namespace OIDC_CLIENT_SECRET_ANNOTATIONS {
164
161
  let CREATE: string;
165
162
  let REGEN: string;
@@ -201,6 +198,7 @@ export const _STAGE: "stage";
201
198
  export const _IMPORT: "import";
202
199
  export const LEGACY: "legacy";
203
200
  export const AS: "as";
201
+ export const VIEW: "view";
204
202
  export const _DETAIL: "detail";
205
203
  export const _CONFIG: "config";
206
204
  export const _YAML: "yaml";
@@ -2615,6 +2613,20 @@ export default class Namespace {
2615
2613
  cleanForNew(): void;
2616
2614
  metadata: any;
2617
2615
  get hideDetailLocation(): boolean;
2616
+ get glance(): any[];
2617
+ get projectGlance(): {
2618
+ name: string;
2619
+ label: any;
2620
+ formatter: string;
2621
+ formatterOpts: {
2622
+ to: any;
2623
+ row: {};
2624
+ options: {
2625
+ internal: boolean;
2626
+ };
2627
+ };
2628
+ content: any;
2629
+ };
2618
2630
  }
2619
2631
  }
2620
2632
 
@@ -2789,6 +2801,9 @@ declare namespace _default {
2789
2801
  export function createMany(ctx: any, data: any): any;
2790
2802
  export function createPopulated(ctx: any, userData: any): Promise<any>;
2791
2803
  export function clone(ctx: any, { resource }?: {}): any;
2804
+ /**
2805
+ * Remove all cached entries for a resource and stop watches
2806
+ */
2792
2807
  export function forgetType({ commit, dispatch, state }: {
2793
2808
  commit: any;
2794
2809
  dispatch: any;
@@ -3044,17 +3059,8 @@ export default class Resource {
3044
3059
  hasCondition(condition: any): boolean;
3045
3060
  isCondition(condition: any, withStatus?: string): boolean;
3046
3061
  waitForCondition(name: any, withStatus?: string, timeoutMs?: number, intervalMs?: number): any;
3062
+ get canEdit(): any;
3047
3063
  get availableActions(): ({
3048
- divider: boolean;
3049
- action?: undefined;
3050
- label?: undefined;
3051
- icon?: undefined;
3052
- enabled?: undefined;
3053
- bulkable?: undefined;
3054
- bulkAction?: undefined;
3055
- weight?: undefined;
3056
- altAction?: undefined;
3057
- } | {
3058
3064
  action: string;
3059
3065
  label: any;
3060
3066
  icon: string;
@@ -3064,6 +3070,16 @@ export default class Resource {
3064
3070
  bulkAction?: undefined;
3065
3071
  weight?: undefined;
3066
3072
  altAction?: undefined;
3073
+ } | {
3074
+ divider: boolean;
3075
+ action?: undefined;
3076
+ label?: undefined;
3077
+ icon?: undefined;
3078
+ enabled?: undefined;
3079
+ bulkable?: undefined;
3080
+ bulkAction?: undefined;
3081
+ weight?: undefined;
3082
+ altAction?: undefined;
3067
3083
  } | {
3068
3084
  action: string;
3069
3085
  label: any;
@@ -3085,17 +3101,8 @@ export default class Resource {
3085
3101
  weight: number;
3086
3102
  divider?: undefined;
3087
3103
  })[];
3104
+ showConfiguration(returnFocusSelector: any): void;
3088
3105
  get _availableActions(): ({
3089
- divider: boolean;
3090
- action?: undefined;
3091
- label?: undefined;
3092
- icon?: undefined;
3093
- enabled?: undefined;
3094
- bulkable?: undefined;
3095
- bulkAction?: undefined;
3096
- weight?: undefined;
3097
- altAction?: undefined;
3098
- } | {
3099
3106
  action: string;
3100
3107
  label: any;
3101
3108
  icon: string;
@@ -3105,6 +3112,16 @@ export default class Resource {
3105
3112
  bulkAction?: undefined;
3106
3113
  weight?: undefined;
3107
3114
  altAction?: undefined;
3115
+ } | {
3116
+ divider: boolean;
3117
+ action?: undefined;
3118
+ label?: undefined;
3119
+ icon?: undefined;
3120
+ enabled?: undefined;
3121
+ bulkable?: undefined;
3122
+ bulkAction?: undefined;
3123
+ weight?: undefined;
3124
+ altAction?: undefined;
3108
3125
  } | {
3109
3126
  action: string;
3110
3127
  label: any;
@@ -3272,6 +3289,112 @@ export default class Resource {
3272
3289
  };
3273
3290
  content: any;
3274
3291
  })[];
3292
+ get glance(): ({
3293
+ name: string;
3294
+ label: any;
3295
+ formatter: string;
3296
+ formatterOpts: {
3297
+ row: this;
3298
+ to?: undefined;
3299
+ options?: undefined;
3300
+ };
3301
+ content: any;
3302
+ } | {
3303
+ name: string;
3304
+ label: any;
3305
+ formatter: string;
3306
+ formatterOpts: {
3307
+ to: {
3308
+ name: string;
3309
+ params: {
3310
+ product: any;
3311
+ cluster: any;
3312
+ resource: any;
3313
+ };
3314
+ };
3315
+ row: {};
3316
+ options: {
3317
+ internal: boolean;
3318
+ };
3319
+ };
3320
+ content: any;
3321
+ } | {
3322
+ name: string;
3323
+ label: any;
3324
+ formatter: string;
3325
+ formatterOpts: {
3326
+ to: {
3327
+ name: string;
3328
+ product: any;
3329
+ cluster: any;
3330
+ resource: any;
3331
+ };
3332
+ row: {};
3333
+ options: {
3334
+ internal: boolean;
3335
+ };
3336
+ };
3337
+ content: any;
3338
+ } | {
3339
+ name: string;
3340
+ label: any;
3341
+ formatter: string;
3342
+ content: any;
3343
+ formatterOpts?: undefined;
3344
+ })[];
3345
+ get _glance(): ({
3346
+ name: string;
3347
+ label: any;
3348
+ formatter: string;
3349
+ formatterOpts: {
3350
+ row: this;
3351
+ to?: undefined;
3352
+ options?: undefined;
3353
+ };
3354
+ content: any;
3355
+ } | {
3356
+ name: string;
3357
+ label: any;
3358
+ formatter: string;
3359
+ formatterOpts: {
3360
+ to: {
3361
+ name: string;
3362
+ params: {
3363
+ product: any;
3364
+ cluster: any;
3365
+ resource: any;
3366
+ };
3367
+ };
3368
+ row: {};
3369
+ options: {
3370
+ internal: boolean;
3371
+ };
3372
+ };
3373
+ content: any;
3374
+ } | {
3375
+ name: string;
3376
+ label: any;
3377
+ formatter: string;
3378
+ formatterOpts: {
3379
+ to: {
3380
+ name: string;
3381
+ product: any;
3382
+ cluster: any;
3383
+ resource: any;
3384
+ };
3385
+ row: {};
3386
+ options: {
3387
+ internal: boolean;
3388
+ };
3389
+ };
3390
+ content: any;
3391
+ } | {
3392
+ name: string;
3393
+ label: any;
3394
+ formatter: string;
3395
+ content: any;
3396
+ formatterOpts?: undefined;
3397
+ })[];
3275
3398
  get t(): any;
3276
3399
  findOwners(): any[];
3277
3400
  getOwners(): any[];
@@ -3553,20 +3676,6 @@ export function parseAuthProvidersInfo(rows: any): {
3553
3676
  };
3554
3677
  enabled: any;
3555
3678
  };
3556
- /**
3557
- * Attempt to set the product in our datastore if the route matches a known product. Otherwise show an error page instead.
3558
- */
3559
- export function setProduct(store: any, to: any): any;
3560
- /**
3561
- * Check that the resource is valid, if not redirect to fail whale
3562
- *
3563
- * This requires that
3564
- * - product is set
3565
- * - product's store is set and setup (so we can check schema's within it)
3566
- * - product's store has the schemaFor getter (extension stores might not have it)
3567
- * - there's a resource associated with route (meta or param)
3568
- */
3569
- export function validateResource(store: any, to: any): boolean;
3570
3679
  /**
3571
3680
  * Attempt to load the current user's principal
3572
3681
  */
@@ -3594,11 +3703,6 @@ export function checkPermissions(types: any, getters: any): any;
3594
3703
  export function canViewResource(store: any, resource: any): boolean;
3595
3704
  }
3596
3705
 
3597
- // @shell/utils/aws
3598
-
3599
- declare module '@shell/utils/aws' {
3600
- }
3601
-
3602
3706
  // @shell/utils/axios
3603
3707
 
3604
3708
  declare module '@shell/utils/axios' {
@@ -3988,6 +4092,7 @@ export function importList(name: any): any;
3988
4092
  export function importDetail(name: any): any;
3989
4093
  export function importEdit(name: any): any;
3990
4094
  export function importDialog(name: any): any;
4095
+ export function importDrawer(name: any): any;
3991
4096
  export function importWindowComponent(name: any): any;
3992
4097
  export function loadProduct(name: any): Promise<any>;
3993
4098
  export function listProducts(): string[];
@@ -4390,7 +4495,6 @@ export function routeRequiresInstallRedirect(to: any): boolean;
4390
4495
  // @shell/utils/select
4391
4496
 
4392
4497
  declare module '@shell/utils/select' {
4393
- export function onClickOption(option: any, e: any): void;
4394
4498
  export function calculatePosition(dropdownList: any, component: any, width: any, placement: any): void;
4395
4499
  }
4396
4500
 
@@ -4855,6 +4959,7 @@ export function externalName(spec: any, getters: any, errors: any, validatorArgs
4855
4959
  declare module '@shell/utils/validators/setting' {
4856
4960
  export function isServerUrl(value: any): boolean;
4857
4961
  export function isHttps(value: any): any;
4962
+ export function isDomainWithoutProtocol(value: any): boolean;
4858
4963
  export function isLocalhost(value: any): boolean;
4859
4964
  export function hasTrailingForwardSlash(value: any): any;
4860
4965
  }