@rancher/shell 0.5.3 → 2.0.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 (581) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +2 -0
  7. package/assets/styles/themes/_csp.scss +2 -2
  8. package/assets/styles/themes/_dark.scss +8 -2
  9. package/assets/styles/themes/_light.scss +2 -1
  10. package/assets/styles/themes/_suse.scss +1 -1
  11. package/assets/styles/vendor/vue-select.scss +5 -0
  12. package/assets/translations/en-us.yaml +296 -58
  13. package/assets/translations/zh-hans.yaml +5 -27
  14. package/babel.config.js +1 -1
  15. package/chart/__tests__/S3.test.ts +9 -2
  16. package/chart/monitoring/grafana/index.vue +6 -2
  17. package/chart/monitoring/prometheus/index.vue +2 -2
  18. package/chart/rancher-backup/S3.vue +11 -9
  19. package/chart/rancher-backup/index.vue +15 -5
  20. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  21. package/cloud-credential/generic.vue +18 -9
  22. package/cloud-credential/harvester.vue +11 -3
  23. package/components/AppModal.vue +167 -0
  24. package/components/AssignTo.vue +7 -4
  25. package/components/AsyncButton.vue +18 -5
  26. package/components/BackLink.vue +4 -4
  27. package/components/BannerGraphic.vue +1 -0
  28. package/components/BrandImage.vue +47 -1
  29. package/components/Carousel.vue +14 -8
  30. package/components/Certificates.vue +8 -11
  31. package/components/ClusterBadge.vue +12 -3
  32. package/components/ClusterIconMenu.vue +44 -16
  33. package/components/ClusterProviderIcon.vue +14 -3
  34. package/components/CodeMirror.vue +73 -38
  35. package/components/CommunityLinks.vue +12 -8
  36. package/components/CreateDriver.vue +81 -0
  37. package/components/CruResource.vue +51 -27
  38. package/components/DetailTop.vue +2 -2
  39. package/components/Dialog.vue +6 -5
  40. package/components/DisableAuthProviderModal.vue +14 -8
  41. package/components/DraggableZone.vue +2 -2
  42. package/components/ExplorerMembers.vue +3 -3
  43. package/components/ExplorerProjectsNamespaces.vue +6 -6
  44. package/components/FixedBanner.vue +47 -36
  45. package/components/GlobalRoleBindings.vue +26 -0
  46. package/components/Import.vue +10 -6
  47. package/components/Inactivity.vue +1 -5
  48. package/components/KeyValueView.vue +14 -10
  49. package/components/MessageLink.vue +2 -2
  50. package/components/ModalWithCard.vue +5 -8
  51. package/components/MoveModal.vue +35 -33
  52. package/components/PodSecurityAdmission.vue +3 -3
  53. package/components/PromptChangePassword.vue +33 -33
  54. package/components/PromptModal.vue +11 -21
  55. package/components/PromptRemove.vue +11 -17
  56. package/components/PromptRestore.vue +18 -16
  57. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  58. package/components/Questions/__tests__/Float.test.ts +9 -19
  59. package/components/Questions/__tests__/Int.test.ts +9 -19
  60. package/components/Questions/__tests__/String.test.ts +9 -19
  61. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  62. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  63. package/components/Questions/index.vue +18 -2
  64. package/components/ResourceCancelModal.vue +34 -29
  65. package/components/ResourceDetail/Masthead.vue +23 -7
  66. package/components/ResourceDetail/index.vue +5 -0
  67. package/components/ResourceList/Masthead.vue +28 -10
  68. package/components/ResourceList/index.vue +65 -14
  69. package/components/ResourceTable.vue +73 -19
  70. package/components/ResourceYaml.vue +1 -0
  71. package/components/SelectIconGrid.vue +3 -3
  72. package/components/SideNav.vue +15 -37
  73. package/components/SingleClusterInfo.vue +4 -4
  74. package/components/SortableTable/THead.vue +26 -12
  75. package/components/SortableTable/filtering.js +9 -1
  76. package/components/SortableTable/grouping.js +8 -1
  77. package/components/SortableTable/index.vue +142 -42
  78. package/components/SortableTable/paging.js +36 -7
  79. package/components/SortableTable/selection.js +2 -1
  80. package/components/SortableTable/sorting.js +24 -7
  81. package/components/TabTitle.vue +84 -0
  82. package/components/Tabbed/index.vue +6 -1
  83. package/components/TableDataUserIcon.vue +47 -0
  84. package/components/TypeDescription.vue +1 -0
  85. package/components/Wizard.vue +1 -0
  86. package/components/__tests__/AppModal.test.ts +98 -0
  87. package/components/__tests__/AsyncButton.test.ts +1 -3
  88. package/components/__tests__/BackLink.test.ts +1 -1
  89. package/components/__tests__/ButtonGroup.test.ts +3 -6
  90. package/components/__tests__/Carousel.test.ts +43 -0
  91. package/components/__tests__/Certificates.test.ts +29 -0
  92. package/components/__tests__/{CodeMirror.spec.ts → CodeMirror.test.ts} +5 -17
  93. package/components/__tests__/CruResource.test.ts +10 -9
  94. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  95. package/components/__tests__/FixedBanner.test.ts +5 -20
  96. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  97. package/components/__tests__/TabTitle.test.ts +129 -0
  98. package/components/auth/AzureWarning.vue +2 -2
  99. package/components/auth/RoleDetailEdit.vue +10 -0
  100. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  101. package/components/auth/login/oidc.vue +7 -1
  102. package/components/fleet/FleetClusters.vue +9 -9
  103. package/components/fleet/FleetIntro.vue +11 -17
  104. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  105. package/components/fleet/FleetRepos.vue +1 -0
  106. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  107. package/components/form/ArrayList.vue +30 -19
  108. package/components/form/ArrayListSelect.vue +9 -4
  109. package/components/form/ClusterAppearance.vue +132 -0
  110. package/components/form/ColorInput.vue +1 -0
  111. package/components/form/Error.vue +3 -3
  112. package/components/form/Footer.vue +2 -2
  113. package/components/form/GitPicker.vue +83 -38
  114. package/components/form/KeyValue.vue +67 -48
  115. package/components/form/LabeledSelect.vue +143 -43
  116. package/components/form/Labels.vue +3 -1
  117. package/components/form/NameNsDescription.vue +26 -9
  118. package/components/form/ResourceLabeledSelect.vue +187 -0
  119. package/components/form/ResourceTabs/index.vue +31 -15
  120. package/components/form/SecretSelector.vue +93 -18
  121. package/components/form/Select.vue +1 -1
  122. package/components/form/SelectOrCreateAuthSecret.vue +135 -62
  123. package/components/form/SimpleSecretSelector.vue +88 -28
  124. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  125. package/components/form/__tests__/KeyValue.test.ts +121 -12
  126. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  127. package/components/form/__tests__/NameNsDescription.test.ts +25 -15
  128. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  129. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  130. package/components/formatter/AppSummaryGraph.vue +2 -2
  131. package/components/formatter/CloudCredPublicData.vue +30 -0
  132. package/components/formatter/ClusterLink.vue +2 -2
  133. package/components/formatter/FleetSummaryGraph.vue +2 -1
  134. package/components/formatter/ImagePercentageBar.vue +0 -4
  135. package/components/formatter/IngressTarget.vue +18 -7
  136. package/components/formatter/Link.vue +2 -2
  137. package/components/formatter/LinkDetail.vue +2 -2
  138. package/components/formatter/LinkDetailImage.vue +2 -2
  139. package/components/formatter/LinkName.vue +2 -2
  140. package/components/formatter/LiveDate.vue +16 -0
  141. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  142. package/components/formatter/SecretType.vue +2 -2
  143. package/components/formatter/VirtualServiceGateways.vue +2 -2
  144. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  145. package/components/nav/Group.vue +7 -5
  146. package/components/nav/Header.vue +82 -43
  147. package/components/nav/NamespaceFilter.vue +8 -1
  148. package/components/nav/TopLevelMenu.vue +336 -125
  149. package/components/nav/Type.vue +58 -102
  150. package/components/nav/__tests__/TopLevelMenu.test.ts +370 -9
  151. package/components/nav/__tests__/Type.test.ts +321 -126
  152. package/components/nuxt/nuxt-child.js +0 -5
  153. package/components/nuxt/nuxt-error.vue +1 -1
  154. package/components/nuxt/nuxt-link.client.js +13 -95
  155. package/components/templates/default.vue +3 -3
  156. package/components/templates/error.vue +6 -10
  157. package/components/templates/standalone.vue +0 -4
  158. package/components/templates/unauthenticated.vue +1 -2
  159. package/components/user.retention/user-retention-header.vue +34 -0
  160. package/composables/useCompactInput.test.ts +36 -0
  161. package/composables/useCompactInput.ts +2 -2
  162. package/composables/useI18n.ts +26 -0
  163. package/composables/useLabeledFormElement.test.ts +135 -0
  164. package/composables/useStore.ts +16 -0
  165. package/config/home-links.js +32 -1
  166. package/config/labels-annotations.js +2 -1
  167. package/config/middleware.js +0 -6
  168. package/config/pagination-table-headers.js +57 -0
  169. package/config/pod-security-admission.ts +1 -1
  170. package/config/private-label.js +1 -3
  171. package/config/product/auth.js +1 -0
  172. package/config/product/explorer.js +167 -46
  173. package/config/product/legacy.js +3 -95
  174. package/config/product/manager.js +44 -11
  175. package/config/query-params.js +1 -0
  176. package/config/roles.ts +23 -0
  177. package/config/router/index.js +23 -0
  178. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  179. package/config/router/navigation-guards/authentication.js +63 -0
  180. package/config/router/navigation-guards/index.js +15 -0
  181. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  182. package/config/router/routes.js +487 -0
  183. package/config/settings.ts +38 -2
  184. package/config/store.js +7 -3
  185. package/config/table-headers.js +46 -1
  186. package/config/types.js +36 -16
  187. package/config/uiplugins.js +10 -5
  188. package/core/plugin-helpers.js +1 -1
  189. package/core/plugin.ts +2 -1
  190. package/core/plugins.js +289 -282
  191. package/creators/app/files/.eslintignore +0 -2
  192. package/creators/app/files/.vscode/settings.json +0 -1
  193. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  194. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  195. package/creators/pkg/init +32 -0
  196. package/detail/__tests__/service.test.ts +62 -0
  197. package/detail/catalog.cattle.io.app.vue +1 -1
  198. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  199. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  200. package/detail/namespace.vue +2 -2
  201. package/detail/networking.k8s.io.ingress.vue +52 -19
  202. package/detail/node.vue +20 -43
  203. package/detail/pod.vue +1 -68
  204. package/detail/provisioning.cattle.io.cluster.vue +2 -1
  205. package/detail/service.vue +1 -1
  206. package/detail/workload/index.vue +2 -15
  207. package/dialog/AddCustomBadgeDialog.vue +318 -161
  208. package/dialog/DeactivateDriverDialog.vue +118 -0
  209. package/dialog/RollbackWorkloadDialog.vue +2 -2
  210. package/dialog/RotateCertificatesDialog.vue +0 -21
  211. package/directives/clean-html.js +15 -0
  212. package/directives/clean-tooltip.js +32 -0
  213. package/directives/focus.js +41 -0
  214. package/directives/int-number.js +21 -0
  215. package/directives/positive-int-number.js +19 -0
  216. package/directives/trim-whitespace.js +19 -0
  217. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  218. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  219. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  220. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  221. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  222. package/edit/__tests__/nodeDriver.test.ts +107 -0
  223. package/edit/__tests__/service.test.ts +1 -5
  224. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  225. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  226. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  227. package/edit/auth/__tests__/azuread.test.ts +241 -0
  228. package/edit/auth/__tests__/oidc.test.ts +137 -0
  229. package/edit/auth/azuread.vue +133 -31
  230. package/edit/auth/github.vue +5 -17
  231. package/edit/auth/googleoauth.vue +5 -18
  232. package/edit/auth/ldap/index.vue +5 -17
  233. package/edit/auth/oidc.vue +143 -42
  234. package/edit/auth/saml.vue +5 -14
  235. package/edit/catalog.cattle.io.clusterrepo.vue +175 -20
  236. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  237. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  238. package/edit/cloudcredential.vue +26 -4
  239. package/edit/configmap.vue +10 -4
  240. package/edit/fleet.cattle.io.gitrepo.vue +7 -4
  241. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  242. package/edit/kontainerDriver.vue +65 -0
  243. package/edit/logging-flow/Match.vue +10 -9
  244. package/edit/logging-flow/index.vue +4 -19
  245. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  246. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  247. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  248. package/edit/management.cattle.io.project.vue +2 -1
  249. package/edit/management.cattle.io.setting.vue +20 -0
  250. package/edit/management.cattle.io.user.vue +2 -1
  251. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  252. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  253. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +1 -0
  254. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -0
  255. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -0
  256. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  257. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  258. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  259. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  260. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  261. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  262. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +45 -6
  263. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/selectors.test.ts +1 -1
  264. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  265. package/edit/nodeDriver.vue +65 -0
  266. package/edit/persistentvolume/index.vue +2 -2
  267. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +18 -9
  268. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +165 -1
  269. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +1 -1
  270. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +0 -3
  271. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  272. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +70 -12
  273. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +5 -0
  274. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  275. package/edit/provisioning.cattle.io.cluster/index.vue +21 -15
  276. package/edit/provisioning.cattle.io.cluster/rke2.vue +185 -114
  277. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +67 -7
  278. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +19 -6
  279. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  280. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +7 -0
  281. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +1 -0
  282. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +1 -0
  283. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +3 -0
  284. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -0
  285. package/edit/resources.cattle.io.backup.vue +139 -124
  286. package/edit/resources.cattle.io.restore.vue +146 -126
  287. package/edit/service.vue +1 -0
  288. package/edit/serviceaccount.vue +46 -4
  289. package/edit/workload/__tests__/Job.test.ts +1 -3
  290. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  291. package/edit/workload/mixins/workload.js +34 -1
  292. package/edit/workload/storage/emptyDir.vue +2 -2
  293. package/initialize/App.vue +75 -0
  294. package/initialize/app-extended.js +128 -0
  295. package/initialize/entry-helpers.js +549 -0
  296. package/initialize/entry.js +32 -0
  297. package/initialize/install-components.js +23 -0
  298. package/initialize/install-directives.js +59 -0
  299. package/initialize/install-plugins.js +123 -0
  300. package/list/__tests__/workload.test.ts +1 -1
  301. package/list/cis.cattle.io.clusterscan.vue +16 -10
  302. package/list/group.principal.vue +2 -2
  303. package/list/management.cattle.io.feature.vue +11 -7
  304. package/list/management.cattle.io.user.vue +36 -3
  305. package/list/networking.k8s.io.ingress.vue +36 -0
  306. package/list/node.vue +211 -73
  307. package/list/provisioning.cattle.io.cluster.vue +17 -4
  308. package/list/ui.cattle.io.navlink.vue +2 -2
  309. package/list/workload.vue +22 -0
  310. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  311. package/machine-config/__tests__/vmwarevsphere.test.ts +162 -59
  312. package/machine-config/amazonec2.vue +1 -1
  313. package/machine-config/azure.vue +38 -21
  314. package/machine-config/generic.vue +11 -15
  315. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  316. package/machine-config/vmwarevsphere.vue +20 -11
  317. package/middleware/authenticated.js +9 -361
  318. package/mixins/__tests__/chart.test.ts +48 -6
  319. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  320. package/mixins/auth-config.js +3 -2
  321. package/mixins/brand.js +75 -57
  322. package/mixins/chart.js +27 -13
  323. package/mixins/create-edit-view/index.js +2 -2
  324. package/mixins/fetch.client.js +42 -48
  325. package/mixins/labeled-form-element.ts +21 -1
  326. package/mixins/page-actions.js +7 -5
  327. package/mixins/resource-fetch-api-pagination.js +304 -0
  328. package/mixins/resource-fetch-namespaced.js +1 -1
  329. package/mixins/resource-fetch.js +46 -5
  330. package/models/__tests__/cluster.test.ts +44 -0
  331. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  332. package/models/__tests__/schema.tests.ts +24 -0
  333. package/models/__tests__/steve-schema.test.ts +73 -0
  334. package/models/__tests__/workload.test.ts +1 -1
  335. package/models/catalog.cattle.io.app.js +8 -0
  336. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  337. package/models/catalog.cattle.io.uiplugin.js +7 -8
  338. package/models/cis.cattle.io.clusterscan.js +29 -8
  339. package/models/cloudcredential.js +9 -1
  340. package/models/cluster/node.js +4 -0
  341. package/models/cluster/schema.js +6 -0
  342. package/models/cluster.js +33 -0
  343. package/models/driver.js +62 -0
  344. package/models/fleet.cattle.io.cluster.js +23 -11
  345. package/models/fleet.cattle.io.gitrepo.js +10 -0
  346. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  347. package/models/kontainerdriver.js +68 -0
  348. package/models/management/schema.js +6 -0
  349. package/models/management.cattle.io.authconfig.js +3 -2
  350. package/models/management.cattle.io.cluster.js +5 -4
  351. package/models/management.cattle.io.globalrole.js +2 -0
  352. package/models/management.cattle.io.user.js +67 -2
  353. package/models/monitoring.coreos.com.receiver.js +3 -1
  354. package/models/monitoring.coreos.com.route.js +1 -1
  355. package/models/networking.k8s.io.ingress.js +2 -1
  356. package/models/nodedriver.js +68 -0
  357. package/models/provisioning.cattle.io.cluster.js +34 -1
  358. package/models/schema.js +28 -7
  359. package/models/service.js +2 -0
  360. package/models/steve-schema.ts +254 -0
  361. package/models/workload.js +1 -0
  362. package/package.json +6 -5
  363. package/pages/about.vue +12 -5
  364. package/pages/account/index.vue +7 -2
  365. package/pages/auth/login.vue +106 -102
  366. package/pages/auth/logout.vue +2 -2
  367. package/pages/auth/setup.vue +57 -64
  368. package/pages/auth/verify.vue +17 -17
  369. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  370. package/pages/c/_cluster/apps/charts/index.vue +37 -13
  371. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  372. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  373. package/pages/c/_cluster/auth/config/index.vue +15 -9
  374. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  375. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  376. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  377. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  378. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  379. package/pages/c/_cluster/explorer/index.vue +231 -72
  380. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  381. package/pages/c/_cluster/explorer/tools/index.vue +12 -176
  382. package/pages/c/_cluster/fleet/index.vue +88 -93
  383. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  384. package/pages/c/_cluster/longhorn/index.vue +52 -17
  385. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  386. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  387. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  388. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +94 -0
  389. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  390. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  391. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +63 -0
  392. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  393. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  394. package/pages/c/_cluster/monitoring/index.vue +1 -17
  395. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  396. package/pages/c/_cluster/neuvector/index.vue +1 -0
  397. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  398. package/pages/c/_cluster/settings/banners.vue +86 -8
  399. package/pages/c/_cluster/settings/brand.vue +258 -36
  400. package/pages/c/_cluster/settings/index.vue +4 -4
  401. package/pages/c/_cluster/settings/links.vue +5 -3
  402. package/pages/c/_cluster/settings/performance.vue +71 -2
  403. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  404. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +10 -7
  405. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  406. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  407. package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
  408. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  409. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  410. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  411. package/pages/c/_cluster/uiplugins/index.vue +38 -52
  412. package/pages/diagnostic.vue +1 -0
  413. package/pages/fail-whale.vue +103 -41
  414. package/pages/home.vue +81 -24
  415. package/pages/prefs.vue +8 -3
  416. package/pages/support/index.vue +12 -2
  417. package/plugins/clean-html-directive.js +5 -12
  418. package/plugins/clean-tooltip-directive.js +6 -31
  419. package/plugins/codemirror.js +0 -9
  420. package/plugins/dashboard-store/__tests__/mutations.test.ts +296 -313
  421. package/plugins/dashboard-store/actions.js +140 -32
  422. package/plugins/dashboard-store/getters.js +86 -39
  423. package/plugins/dashboard-store/index.js +0 -99
  424. package/plugins/dashboard-store/mutations.js +150 -48
  425. package/plugins/dashboard-store/resource-class.js +14 -109
  426. package/plugins/directives.js +6 -39
  427. package/plugins/ember-cookie.js +13 -0
  428. package/plugins/global-formatters.js +26 -5
  429. package/plugins/i18n.js +90 -56
  430. package/plugins/int-number.js +6 -20
  431. package/plugins/plugin.js +3 -3
  432. package/plugins/positive-int-number.js +6 -17
  433. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +124 -31
  434. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  435. package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
  436. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  437. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  438. package/plugins/steve/actions.js +0 -1
  439. package/plugins/steve/getters.js +183 -63
  440. package/plugins/steve/hybrid-class.js +5 -1
  441. package/plugins/steve/mutations.js +29 -5
  442. package/plugins/steve/norman-class.js +123 -2
  443. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  444. package/plugins/steve/schema.d.ts +22 -0
  445. package/plugins/steve/steve-pagination-utils.ts +368 -0
  446. package/plugins/steve/subscribe.js +37 -75
  447. package/plugins/trim-whitespace.js +6 -34
  448. package/plugins/vue-js-modal.js +1 -1
  449. package/public/index.html +1 -0
  450. package/rancher-components/Accordion/Accordion.vue +3 -2
  451. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  452. package/rancher-components/Banner/Banner.test.ts +1 -5
  453. package/rancher-components/Banner/Banner.vue +2 -2
  454. package/rancher-components/Card/Card.vue +4 -4
  455. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  456. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  457. package/rancher-components/Form/LabeledInput/LabeledInput.vue +66 -30
  458. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  459. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  460. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  461. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  462. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  463. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  464. package/rancher-components/StringList/StringList.vue +8 -8
  465. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  466. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  467. package/rancher-components/components/Banner/Banner.test.ts +1 -5
  468. package/rancher-components/components/Banner/Banner.vue +2 -2
  469. package/rancher-components/components/Card/Card.vue +4 -4
  470. package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
  471. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  472. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +66 -30
  473. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
  474. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  475. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  476. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  477. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  478. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  479. package/rancher-components/components/StringList/StringList.vue +8 -8
  480. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +27 -8
  481. package/scripts/clean +1 -1
  482. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  483. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  484. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  485. package/scripts/extension/helm/package/Dockerfile +1 -1
  486. package/scripts/extension/helm/scripts/patch +27 -0
  487. package/scripts/extension/publish +6 -6
  488. package/scripts/serve-pkgs +0 -2
  489. package/scripts/test-plugins-build.sh +6 -6
  490. package/scripts/vue-migrate.js +683 -0
  491. package/store/__tests__/catalog.test.ts +224 -0
  492. package/store/auth.js +23 -4
  493. package/store/aws.js +53 -6
  494. package/store/catalog.js +21 -5
  495. package/store/cru-resource.ts +26 -0
  496. package/store/customisation.js +35 -0
  497. package/store/features.js +6 -4
  498. package/store/index.js +132 -39
  499. package/store/plugins.js +8 -4
  500. package/store/type-map.js +143 -143
  501. package/store/type-map.utils.ts +226 -0
  502. package/tsconfig.json +0 -1
  503. package/tsconfig.paths.json +4 -1
  504. package/types/components/labeledSelect.ts +50 -0
  505. package/types/resources/settings.d.ts +32 -0
  506. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  507. package/types/shell/index.d.ts +996 -782
  508. package/types/store/dashboard-store.types.ts +42 -0
  509. package/types/store/pagination.types.ts +457 -0
  510. package/types/store/type-map.ts +30 -0
  511. package/types/store/vuex.d.ts +9 -0
  512. package/types/vue-shim.d.ts +51 -0
  513. package/utils/__tests__/cluster.test.ts +20 -18
  514. package/utils/__tests__/create-yaml.test.ts +359 -2
  515. package/utils/__tests__/kontainer.test.ts +92 -0
  516. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  517. package/utils/alertmanagerconfig.js +19 -0
  518. package/utils/array.ts +40 -1
  519. package/utils/async.ts +2 -0
  520. package/utils/auth.js +152 -4
  521. package/utils/axios.js +2 -2
  522. package/utils/banners.js +103 -0
  523. package/utils/cluster.js +1 -1
  524. package/utils/config.js +4 -0
  525. package/utils/create-yaml.js +54 -27
  526. package/utils/error.js +25 -0
  527. package/utils/formatter.js +5 -3
  528. package/utils/git.ts +1 -1
  529. package/utils/install-redirect.js +1 -1
  530. package/utils/kontainer.ts +186 -0
  531. package/utils/monitoring.js +2 -37
  532. package/utils/pagination-utils.ts +154 -0
  533. package/utils/pod-security-admission.ts +1 -1
  534. package/utils/router.js +86 -0
  535. package/utils/settings.ts +46 -0
  536. package/utils/socket.js +1 -0
  537. package/utils/time.js +1 -0
  538. package/utils/title.ts +3 -0
  539. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  540. package/utils/validators/formRules/__tests__/index.test.ts +21 -0
  541. package/utils/validators/formRules/index.ts +3 -0
  542. package/utils/validators/index.js +1 -0
  543. package/vue.config.js +376 -421
  544. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  545. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  546. package/components/EventsTable.vue +0 -67
  547. package/components/TabbedLinks/index.vue +0 -94
  548. package/components/nuxt/nuxt-link.server.js +0 -16
  549. package/components/nuxt/nuxt.js +0 -101
  550. package/config/router.js +0 -425
  551. package/initialize/App.js +0 -152
  552. package/initialize/client.js +0 -734
  553. package/initialize/index.js +0 -287
  554. package/middleware/i18n.js +0 -10
  555. package/middleware/unauthenticated.js +0 -22
  556. package/mixins/v1-workload-metrics.js +0 -43
  557. package/pages/c/_cluster/apps/index.vue +0 -15
  558. package/pages/c/_cluster/auth/index.vue +0 -17
  559. package/pages/c/_cluster/index.vue +0 -15
  560. package/pages/c/_cluster/legacy/index.vue +0 -22
  561. package/pages/c/_cluster/manager/index.vue +0 -22
  562. package/pages/c/_cluster/mcapps/index.vue +0 -21
  563. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  564. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  565. package/plugins/index.js +0 -11
  566. package/plugins/portal-vue.js +0 -4
  567. package/plugins/portal.js +0 -4
  568. package/plugins/resize.js +0 -5
  569. package/plugins/shortkey.js +0 -4
  570. package/plugins/tooltip.js +0 -4
  571. package/plugins/v-select.js +0 -4
  572. package/utils/group.js +0 -70
  573. package/utils/nuxt.js +0 -638
  574. package/utils/router.scrollBehavior.js +0 -78
  575. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  576. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  577. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  578. /package/plugins/steve/__tests__/{steve-class.spec.ts → steve-class.test.ts} +0 -0
  579. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  580. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  581. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
package/utils/nuxt.js DELETED
@@ -1,638 +0,0 @@
1
- import Vue from 'vue';
2
- import {
3
- isSamePath as _isSamePath, joinURL, normalizeURL, withQuery, withoutTrailingSlash
4
- } from 'ufo';
5
-
6
- // window.{{globals.loadedCallback}} hook
7
- // Useful for jsdom testing or plugins (https://github.com/tmpvar/jsdom#dealing-with-asynchronous-script-loading)
8
- window.onNuxtReadyCbs = [];
9
- window.onNuxtReady = (cb) => {
10
- window.onNuxtReadyCbs.push(cb);
11
- };
12
-
13
- export function createGetCounter(counterObject, defaultKey = '') {
14
- return function getCounter(id = defaultKey) {
15
- if (counterObject[id] === undefined) {
16
- counterObject[id] = 0;
17
- }
18
-
19
- return counterObject[id]++;
20
- };
21
- }
22
-
23
- export function empty() {}
24
-
25
- export function globalHandleError(error) {
26
- if (Vue.config.errorHandler) {
27
- Vue.config.errorHandler(error);
28
- }
29
- }
30
-
31
- export function interopDefault(promise) {
32
- return promise.then((m) => m.default || m);
33
- }
34
-
35
- export function hasFetch(vm) {
36
- return vm.$options && typeof vm.$options.fetch === 'function' && !vm.$options.fetch.length;
37
- }
38
- export function purifyData(data) {
39
- if (process.env.NODE_ENV === 'production') {
40
- return data;
41
- }
42
-
43
- return Object.entries(data).filter(
44
- ([key, value]) => {
45
- const valid = !(value instanceof Function) && !(value instanceof Promise);
46
-
47
- if (!valid) {
48
- console.warn(`${ key } is not able to be stringified. This will break in a production environment.`); // eslint-disable-line no-console
49
- }
50
-
51
- return valid;
52
- }
53
- ).reduce((obj, [key, value]) => {
54
- obj[key] = value;
55
-
56
- return obj;
57
- }, {});
58
- }
59
- export function getChildrenComponentInstancesUsingFetch(vm, instances = []) {
60
- const children = vm.$children || [];
61
-
62
- for (const child of children) {
63
- if (child.$fetch) {
64
- instances.push(child);
65
- continue; // Don't get the children since it will reload the template
66
- }
67
- if (child.$children) {
68
- getChildrenComponentInstancesUsingFetch(child, instances);
69
- }
70
- }
71
-
72
- return instances;
73
- }
74
-
75
- export function applyAsyncData(Component, asyncData) {
76
- if (
77
- // For SSR, we once all this function without second param to just apply asyncData
78
- // Prevent doing this for each SSR request
79
- !asyncData && Component.options.__hasNuxtData
80
- ) {
81
- return;
82
- }
83
-
84
- const ComponentData = Component.options._originDataFn || Component.options.data || function() {
85
- return {};
86
- };
87
-
88
- Component.options._originDataFn = ComponentData;
89
-
90
- Component.options.data = function() {
91
- const data = ComponentData.call(this, this);
92
-
93
- return { ...data, ...asyncData };
94
- };
95
-
96
- Component.options.__hasNuxtData = true;
97
-
98
- if (Component._Ctor && Component._Ctor.options) {
99
- Component._Ctor.options.data = Component.options.data;
100
- }
101
- }
102
-
103
- export function sanitizeComponent(Component) {
104
- // If Component already sanitized
105
- if (Component.options && Component._Ctor === Component) {
106
- return Component;
107
- }
108
- if (!Component.options) {
109
- Component = Vue.extend(Component); // fix issue #6
110
- Component._Ctor = Component;
111
- } else {
112
- Component._Ctor = Component;
113
- Component.extendOptions = Component.options;
114
- }
115
- // If no component name defined, set file path as name, (also fixes #5703)
116
- if (!Component.options.name && Component.options.__file) {
117
- Component.options.name = Component.options.__file;
118
- }
119
-
120
- return Component;
121
- }
122
-
123
- export function getMatchedComponents(route, matches = false, prop = 'components') {
124
- return Array.prototype.concat.apply([], route.matched.map((m, index) => {
125
- return Object.keys(m[prop]).map((key) => {
126
- matches && matches.push(index);
127
-
128
- return m[prop][key];
129
- });
130
- }));
131
- }
132
-
133
- export function getMatchedComponentsInstances(route, matches = false) {
134
- return getMatchedComponents(route, matches, 'instances');
135
- }
136
-
137
- export function flatMapComponents(route, fn) {
138
- return Array.prototype.concat.apply([], route.matched.map((m, index) => {
139
- return Object.keys(m.components).reduce((promises, key) => {
140
- if (m.components[key]) {
141
- promises.push(fn(m.components[key], m.instances[key], m, key, index));
142
- } else {
143
- delete m.components[key];
144
- }
145
-
146
- return promises;
147
- }, []);
148
- }));
149
- }
150
-
151
- export function resolveRouteComponents(route, fn) {
152
- return Promise.all(
153
- flatMapComponents(route, async(Component, instance, match, key) => {
154
- // If component is a function, resolve it
155
- if (typeof Component === 'function' && !Component.options) {
156
- try {
157
- Component = await Component();
158
- } catch (error) {
159
- // Handle webpack chunk loading errors
160
- // This may be due to a new deployment or a network problem
161
- if (
162
- error &&
163
- error.name === 'ChunkLoadError' &&
164
- typeof window !== 'undefined' &&
165
- window.sessionStorage
166
- ) {
167
- const timeNow = Date.now();
168
- const previousReloadTime = parseInt(window.sessionStorage.getItem('nuxt-reload'));
169
-
170
- // check for previous reload time not to reload infinitely
171
- if (!previousReloadTime || previousReloadTime + 60000 < timeNow) {
172
- window.sessionStorage.setItem('nuxt-reload', timeNow);
173
- window.location.reload(true /* skip cache */);
174
- }
175
- }
176
-
177
- throw error;
178
- }
179
- }
180
- match.components[key] = Component = sanitizeComponent(Component);
181
-
182
- return typeof fn === 'function' ? fn(Component, instance, match, key) : Component;
183
- })
184
- );
185
- }
186
-
187
- export async function getRouteData(route) {
188
- if (!route) {
189
- return;
190
- }
191
- // Make sure the components are resolved (code-splitting)
192
- await resolveRouteComponents(route);
193
-
194
- // Send back a copy of route with meta based on Component definition
195
- return {
196
- ...route,
197
- meta: getMatchedComponents(route).map((Component, index) => {
198
- return { ...Component.options.meta, ...(route.matched[index] || {}).meta };
199
- })
200
- };
201
- }
202
-
203
- export async function setContext(app, context) {
204
- // If context not defined, create it
205
- if (!app.context) {
206
- app.context = {
207
- isDev: true,
208
- isHMR: false,
209
- app,
210
- store: app.store,
211
- payload: context.payload,
212
- error: context.error,
213
- base: app.router.options.base,
214
- env: {
215
- commit: 'head', version: '0.1.2', dev: true, pl: 1, perfTest: false, rancherEnv: 'web', api: 'http://localhost:8989'
216
- }
217
- };
218
- // Only set once
219
-
220
- if (context.req) {
221
- app.context.req = context.req;
222
- }
223
- if (context.res) {
224
- app.context.res = context.res;
225
- }
226
-
227
- app.context.redirect = (status, path, query) => {
228
- if (!status) {
229
- return;
230
- }
231
- app.context._redirected = true;
232
- // if only 1 or 2 arguments: redirect('/') or redirect('/', { foo: 'bar' })
233
- let pathType = typeof path;
234
-
235
- if (typeof status !== 'number' && (pathType === 'undefined' || pathType === 'object')) {
236
- query = path || {};
237
- path = status;
238
- pathType = typeof path;
239
- status = 302;
240
- }
241
- if (pathType === 'object') {
242
- path = app.router.resolve(path).route.fullPath;
243
- }
244
- // "/absolute/route", "./relative/route" or "../relative/route"
245
- if (/(^[.]{1,2}\/)|(^\/(?!\/))/.test(path)) {
246
- app.context.next({
247
- path,
248
- query,
249
- status
250
- });
251
- } else {
252
- path = withQuery(path, query);
253
-
254
- // https://developer.mozilla.org/en-US/docs/Web/API/Location/replace
255
- window.location.replace(path);
256
-
257
- // Throw a redirect error
258
- throw new Error('ERR_REDIRECT');
259
- }
260
- };
261
-
262
- app.context.nuxtState = window.__NUXT__;
263
- }
264
-
265
- // Dynamic keys
266
- const [currentRouteData, fromRouteData] = await Promise.all([
267
- getRouteData(context.route),
268
- getRouteData(context.from)
269
- ]);
270
-
271
- if (context.route) {
272
- app.context.route = currentRouteData;
273
- }
274
-
275
- if (context.from) {
276
- app.context.from = fromRouteData;
277
- }
278
-
279
- app.context.next = context.next;
280
- app.context._redirected = false;
281
- app.context._errored = false;
282
- app.context.isHMR = Boolean(context.isHMR);
283
- app.context.params = app.context.route.params || {};
284
- app.context.query = app.context.route.query || {};
285
- }
286
-
287
- export function middlewareSeries(promises, appContext) {
288
- if (!promises.length || appContext._redirected || appContext._errored) {
289
- return Promise.resolve();
290
- }
291
-
292
- return promisify(promises[0], appContext)
293
- .then(() => {
294
- return middlewareSeries(promises.slice(1), appContext);
295
- });
296
- }
297
-
298
- export function promisify(fn, context) {
299
- let promise;
300
-
301
- if (fn.length === 2) {
302
- console.warn('Callback-based asyncData, fetch or middleware calls are deprecated. Please switch to promises or async/await syntax'); // eslint-disable-line no-console
303
-
304
- // fn(context, callback)
305
- promise = new Promise((resolve) => {
306
- fn(context, (err, data) => {
307
- if (err) {
308
- context.error(err);
309
- }
310
- data = data || {};
311
- resolve(data);
312
- });
313
- });
314
- } else {
315
- promise = fn(context);
316
- }
317
-
318
- if (promise && promise instanceof Promise && typeof promise.then === 'function') {
319
- return promise;
320
- }
321
-
322
- return Promise.resolve(promise);
323
- }
324
-
325
- // Imported from vue-router
326
- export function getLocation(base, mode) {
327
- if (mode === 'hash') {
328
- return window.location.hash.replace(/^#\//, '');
329
- }
330
-
331
- base = decodeURI(base).slice(0, -1); // consideration is base is normalized with trailing slash
332
- let path = decodeURI(window.location.pathname);
333
-
334
- if (base && path.startsWith(base)) {
335
- path = path.slice(base.length);
336
- }
337
-
338
- const fullPath = (path || '/') + window.location.search + window.location.hash;
339
-
340
- return normalizeURL(fullPath);
341
- }
342
-
343
- // Imported from path-to-regexp
344
-
345
- /**
346
- * Compile a string to a template function for the path.
347
- *
348
- * @param {string} str
349
- * @param {Object=} options
350
- * @return {!function(Object=, Object=)}
351
- */
352
- export function compile(str, options) {
353
- return tokensToFunction(parse(str, options), options);
354
- }
355
-
356
- export function getQueryDiff(toQuery, fromQuery) {
357
- const diff = {};
358
- const queries = { ...toQuery, ...fromQuery };
359
-
360
- for (const k in queries) {
361
- if (String(toQuery[k]) !== String(fromQuery[k])) {
362
- diff[k] = true;
363
- }
364
- }
365
-
366
- return diff;
367
- }
368
-
369
- export function normalizeError(err) {
370
- let message;
371
-
372
- if (!(err.message || typeof err === 'string')) {
373
- try {
374
- message = JSON.stringify(err, null, 2);
375
- } catch (e) {
376
- message = `[${ err.constructor.name }]`;
377
- }
378
- } else {
379
- message = err.message || err;
380
- }
381
-
382
- return {
383
- ...err,
384
- message,
385
- statusCode: (err.statusCode || err.status || (err.response && err.response.status) || 500)
386
- };
387
- }
388
-
389
- /**
390
- * The main path matching regexp utility.
391
- *
392
- * @type {RegExp}
393
- */
394
- const PATH_REGEXP = new RegExp([
395
- // Match escaped characters that would otherwise appear in future matches.
396
- // This allows the user to escape special characters that won't transform.
397
- '(\\\\.)',
398
- // Match Express-style parameters and un-named parameters with a prefix
399
- // and optional suffixes. Matches appear as:
400
- //
401
- // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
402
- // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined]
403
- // "/*" => ["/", undefined, undefined, undefined, undefined, "*"]
404
- '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
405
- ].join('|'), 'g');
406
-
407
- /**
408
- * Parse a string for the raw tokens.
409
- *
410
- * @param {string} str
411
- * @param {Object=} options
412
- * @return {!Array}
413
- */
414
- function parse(str, options) {
415
- const tokens = [];
416
- let key = 0;
417
- let index = 0;
418
- let path = '';
419
- const defaultDelimiter = (options && options.delimiter) || '/';
420
- let res;
421
-
422
- while ((res = PATH_REGEXP.exec(str)) !== null) {
423
- const m = res[0];
424
- const escaped = res[1];
425
- const offset = res.index;
426
-
427
- path += str.slice(index, offset);
428
- index = offset + m.length;
429
-
430
- // Ignore already escaped sequences.
431
- if (escaped) {
432
- path += escaped[1];
433
- continue;
434
- }
435
-
436
- const next = str[index];
437
- const prefix = res[2];
438
- const name = res[3];
439
- const capture = res[4];
440
- const group = res[5];
441
- const modifier = res[6];
442
- const asterisk = res[7];
443
-
444
- // Push the current path onto the tokens.
445
- if (path) {
446
- tokens.push(path);
447
- path = '';
448
- }
449
-
450
- const partial = prefix !== null && next !== null && next !== prefix;
451
- const repeat = modifier === '+' || modifier === '*';
452
- const optional = modifier === '?' || modifier === '*';
453
- const delimiter = res[2] || defaultDelimiter;
454
- const pattern = capture || group;
455
-
456
- tokens.push({
457
- name: name || key++,
458
- prefix: prefix || '',
459
- delimiter,
460
- optional,
461
- repeat,
462
- partial,
463
- asterisk: Boolean(asterisk),
464
- pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : `[^${ escapeString(delimiter) }]+?`)
465
- });
466
- }
467
-
468
- // Match any characters still remaining.
469
- if (index < str.length) {
470
- path += str.substr(index);
471
- }
472
-
473
- // If the path exists, push it onto the end.
474
- if (path) {
475
- tokens.push(path);
476
- }
477
-
478
- return tokens;
479
- }
480
-
481
- /**
482
- * Prettier encoding of URI path segments.
483
- *
484
- * @param {string}
485
- * @return {string}
486
- */
487
- function encodeURIComponentPretty(str, slashAllowed) {
488
- const re = slashAllowed ? /[?#]/g : /[/?#]/g;
489
-
490
- return encodeURI(str).replace(re, (c) => {
491
- return `%${ c.charCodeAt(0).toString(16).toUpperCase() }`;
492
- });
493
- }
494
-
495
- /**
496
- * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
497
- *
498
- * @param {string}
499
- * @return {string}
500
- */
501
- function encodeAsterisk(str) {
502
- return encodeURIComponentPretty(str, true);
503
- }
504
-
505
- /**
506
- * Escape a regular expression string.
507
- *
508
- * @param {string} str
509
- * @return {string}
510
- */
511
- function escapeString(str) {
512
- return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
513
- }
514
-
515
- /**
516
- * Escape the capturing group by escaping special characters and meaning.
517
- *
518
- * @param {string} group
519
- * @return {string}
520
- */
521
- function escapeGroup(group) {
522
- return group.replace(/([=!:$/()])/g, '\\$1');
523
- }
524
-
525
- /**
526
- * Expose a method for transforming tokens into the path function.
527
- */
528
- function tokensToFunction(tokens, options) {
529
- // Compile all the tokens into regexps.
530
- const matches = new Array(tokens.length);
531
-
532
- // Compile all the patterns before compilation.
533
- for (let i = 0; i < tokens.length; i++) {
534
- if (typeof tokens[i] === 'object') {
535
- matches[i] = new RegExp(`^(?:${ tokens[i].pattern })$`, flags(options));
536
- }
537
- }
538
-
539
- return function(obj, opts) {
540
- let path = '';
541
- const data = obj || {};
542
- const options = opts || {};
543
- const encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;
544
-
545
- for (let i = 0; i < tokens.length; i++) {
546
- const token = tokens[i];
547
-
548
- if (typeof token === 'string') {
549
- path += token;
550
-
551
- continue;
552
- }
553
-
554
- const value = data[token.name || 'pathMatch'];
555
- let segment;
556
-
557
- if (value === null) {
558
- if (token.optional) {
559
- // Prepend partial segment prefixes.
560
- if (token.partial) {
561
- path += token.prefix;
562
- }
563
-
564
- continue;
565
- } else {
566
- throw new TypeError(`Expected "${ token.name }" to be defined`);
567
- }
568
- }
569
-
570
- if (Array.isArray(value)) {
571
- if (!token.repeat) {
572
- throw new TypeError(`Expected "${ token.name }" to not repeat, but received \`${ JSON.stringify(value) }\``);
573
- }
574
-
575
- if (value.length === 0) {
576
- if (token.optional) {
577
- continue;
578
- } else {
579
- throw new TypeError(`Expected "${ token.name }" to not be empty`);
580
- }
581
- }
582
-
583
- for (let j = 0; j < value.length; j++) {
584
- segment = encode(value[j]);
585
-
586
- if (!matches[i].test(segment)) {
587
- throw new TypeError(`Expected all "${ token.name }" to match "${ token.pattern }", but received \`${ JSON.stringify(segment) }\``);
588
- }
589
-
590
- path += (j === 0 ? token.prefix : token.delimiter) + segment;
591
- }
592
-
593
- continue;
594
- }
595
-
596
- segment = token.asterisk ? encodeAsterisk(value) : encode(value);
597
-
598
- if (!matches[i].test(segment)) {
599
- throw new TypeError(`Expected "${ token.name }" to match "${ token.pattern }", but received "${ segment }"`);
600
- }
601
-
602
- path += token.prefix + segment;
603
- }
604
-
605
- return path;
606
- };
607
- }
608
-
609
- /**
610
- * Get the flags for a regexp from the options.
611
- *
612
- * @param {Object} options
613
- * @return {string}
614
- */
615
- function flags(options) {
616
- return options && options.sensitive ? '' : 'i';
617
- }
618
-
619
- export function addLifecycleHook(vm, hook, fn) {
620
- if (!vm.$options[hook]) {
621
- vm.$options[hook] = [];
622
- }
623
- if (!vm.$options[hook].includes(fn)) {
624
- vm.$options[hook].push(fn);
625
- }
626
- }
627
-
628
- export const urlJoin = joinURL;
629
-
630
- export const stripTrailingSlash = withoutTrailingSlash;
631
-
632
- export const isSamePath = _isSamePath;
633
-
634
- export function setScrollRestoration(newVal) {
635
- try {
636
- window.history.scrollRestoration = newVal;
637
- } catch (e) {}
638
- }
@@ -1,78 +0,0 @@
1
- import { getMatchedComponents, setScrollRestoration } from './nuxt';
2
-
3
- if ('scrollRestoration' in window.history) {
4
- setScrollRestoration('manual');
5
-
6
- // reset scrollRestoration to auto when leaving page, allowing page reload
7
- // and back-navigation from other pages to use the browser to restore the
8
- // scrolling position.
9
- window.addEventListener('beforeunload', () => {
10
- setScrollRestoration('auto');
11
- });
12
-
13
- // Setting scrollRestoration to manual again when returning to this page.
14
- window.addEventListener('load', () => {
15
- setScrollRestoration('manual');
16
- });
17
- }
18
-
19
- function shouldScrollToTop(route) {
20
- const Pages = getMatchedComponents(route);
21
-
22
- if (Pages.length === 1) {
23
- const { options = {} } = Pages[0];
24
-
25
- return options.scrollToTop !== false;
26
- }
27
-
28
- return Pages.some(({ options }) => options && options.scrollToTop);
29
- }
30
-
31
- export default function(to, from, savedPosition) {
32
- // If the returned position is falsy or an empty object, will retain current scroll position
33
- let position = false;
34
- const isRouteChanged = to !== from;
35
-
36
- // savedPosition is only available for popstate navigations (back button)
37
- if (savedPosition) {
38
- position = savedPosition;
39
- } else if (isRouteChanged && shouldScrollToTop(to)) {
40
- position = { x: 0, y: 0 };
41
- }
42
-
43
- const nuxt = window.$nuxt;
44
-
45
- if (
46
- // Initial load (vuejs/vue-router#3199)
47
- !isRouteChanged ||
48
- // Route hash changes
49
- (to.path === from.path && to.hash !== from.hash)
50
- ) {
51
- nuxt.$nextTick(() => nuxt.$emit('triggerScroll'));
52
- }
53
-
54
- return new Promise((resolve) => {
55
- // wait for the out transition to complete (if necessary)
56
- nuxt.$once('triggerScroll', () => {
57
- // coords will be used if no selector is provided,
58
- // or if the selector didn't match any element.
59
- if (to.hash) {
60
- let hash = to.hash;
61
-
62
- // CSS.escape() is not supported with IE and Edge.
63
- if (typeof window.CSS !== 'undefined' && typeof window.CSS.escape !== 'undefined') {
64
- hash = `#${ window.CSS.escape(hash.substr(1)) }`;
65
- }
66
- try {
67
- if (document.querySelector(hash)) {
68
- // scroll to anchor by returning the selector
69
- position = { selector: hash };
70
- }
71
- } catch (e) {
72
- console.warn('Failed to save scroll position. Please add CSS.escape() polyfill (https://github.com/mathiasbynens/CSS.escape).'); // eslint-disable-line no-console
73
- }
74
- }
75
- resolve(position);
76
- });
77
- });
78
- }
File without changes