@verdaccio/ui-components 5.0.0-next-9.21 → 5.0.0-next-9.23

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 (310) hide show
  1. package/build/Theme/ResetStyles.js.map +1 -1
  2. package/build/Theme/ResetStyles.mjs.map +1 -1
  3. package/build/Theme/StyleBaseline.js.map +1 -1
  4. package/build/Theme/StyleBaseline.mjs.map +1 -1
  5. package/build/Theme/ThemeProvider.js.map +1 -1
  6. package/build/Theme/ThemeProvider.mjs.map +1 -1
  7. package/build/Theme/colors.js.map +1 -1
  8. package/build/Theme/modes.js.map +1 -1
  9. package/build/Theme/theme.js.map +1 -1
  10. package/build/api/use-data-mutation.d.ts +1 -1
  11. package/build/api/use-data-mutation.js.map +1 -1
  12. package/build/api/use-data-mutation.mjs.map +1 -1
  13. package/build/api/use-data.d.ts +1 -1
  14. package/build/api/use-data.js.map +1 -1
  15. package/build/api/use-data.mjs.map +1 -1
  16. package/build/components/ActionBar/ActionBar.js.map +1 -1
  17. package/build/components/ActionBar/ActionBar.mjs.map +1 -1
  18. package/build/components/ActionBar/ActionBarAction.js.map +1 -1
  19. package/build/components/ActionBar/index.mjs +1 -2
  20. package/build/components/AppRoute/AppRoute.js.map +1 -1
  21. package/build/components/AppRoute/AppRoute.mjs.map +1 -1
  22. package/build/components/Author/Author.js.map +1 -1
  23. package/build/components/Author/index.mjs +1 -2
  24. package/build/components/Author/styles.js.map +1 -1
  25. package/build/components/CopyClipboard/CopyToClipBoard.js.map +1 -1
  26. package/build/components/Dependencies/Dependencies.js.map +1 -1
  27. package/build/components/Dependencies/DependencyBlock.js.map +1 -1
  28. package/build/components/Dependencies/DependencyBlock.mjs.map +1 -1
  29. package/build/components/Dependencies/index.mjs +1 -2
  30. package/build/components/Deprecated/Deprecated.js.map +1 -1
  31. package/build/components/Deprecated/index.mjs +1 -2
  32. package/build/components/Developers/Developers.js.map +1 -1
  33. package/build/components/Developers/Developers.mjs.map +1 -1
  34. package/build/components/Developers/Title.js.map +1 -1
  35. package/build/components/Distribution/Dist.js.map +1 -1
  36. package/build/components/Distribution/Dist.mjs.map +1 -1
  37. package/build/components/Distribution/index.mjs +1 -2
  38. package/build/components/Distribution/styles.js.map +1 -1
  39. package/build/components/Engines/Engines.js.map +1 -1
  40. package/build/components/Engines/index.mjs +1 -2
  41. package/build/components/Engines/styles.js.map +1 -1
  42. package/build/components/ErrorBoundary/ErrorBoundary.js.map +1 -1
  43. package/build/components/ErrorBoundary/index.mjs +1 -2
  44. package/build/components/Forbidden/Forbidden.js.map +1 -1
  45. package/build/components/Forbidden/index.mjs +1 -2
  46. package/build/components/FundButton/FundButton.js.map +1 -1
  47. package/build/components/FundButton/FundButton.mjs.map +1 -1
  48. package/build/components/FundButton/index.mjs +1 -2
  49. package/build/components/GenericError/GenericError.js.map +1 -1
  50. package/build/components/GenericError/index.mjs +1 -2
  51. package/build/components/HeaderInfoDialog/HeaderInfoDialog.js.map +1 -1
  52. package/build/components/HeaderInfoDialog/index.mjs +1 -2
  53. package/build/components/Heading/Heading.js.map +1 -1
  54. package/build/components/Heading/Heading.mjs.map +1 -1
  55. package/build/components/Heading/index.mjs +1 -2
  56. package/build/components/Help/Help.js.map +1 -1
  57. package/build/components/Help/Help.mjs.map +1 -1
  58. package/build/components/Help/index.mjs +1 -2
  59. package/build/components/Help/styles.js.map +1 -1
  60. package/build/components/Icons/DevsIcons/CommonJS2.js.map +1 -1
  61. package/build/components/Icons/DevsIcons/CommonJS2.mjs.map +1 -1
  62. package/build/components/Icons/DevsIcons/ES6Module2.js.map +1 -1
  63. package/build/components/Icons/DevsIcons/ES6Module2.mjs.map +1 -1
  64. package/build/components/Icons/DevsIcons/Git2.js.map +1 -1
  65. package/build/components/Icons/DevsIcons/Git2.mjs.map +1 -1
  66. package/build/components/Icons/DevsIcons/NodeJS2.js.map +1 -1
  67. package/build/components/Icons/DevsIcons/NodeJS2.mjs.map +1 -1
  68. package/build/components/Icons/DevsIcons/TypeScript2.js.map +1 -1
  69. package/build/components/Icons/DevsIcons/TypeScript2.mjs.map +1 -1
  70. package/build/components/Icons/Earth.js.map +1 -1
  71. package/build/components/Icons/FileBinary.js.map +1 -1
  72. package/build/components/Icons/Law.js.map +1 -1
  73. package/build/components/Icons/License.d.ts +2 -4
  74. package/build/components/Icons/License.js.map +1 -1
  75. package/build/components/Icons/License.mjs.map +1 -1
  76. package/build/components/Icons/Managers/Npm2.js.map +1 -1
  77. package/build/components/Icons/Managers/Npm2.mjs.map +1 -1
  78. package/build/components/Icons/Managers/Pnpm2.js.map +1 -1
  79. package/build/components/Icons/Managers/Pnpm2.mjs.map +1 -1
  80. package/build/components/Icons/Managers/Yarn2.js.map +1 -1
  81. package/build/components/Icons/Managers/Yarn2.mjs.map +1 -1
  82. package/build/components/Icons/SvgIcon.js.map +1 -1
  83. package/build/components/Icons/Time.js.map +1 -1
  84. package/build/components/Icons/Version.js.map +1 -1
  85. package/build/components/Install/Install.js.map +1 -1
  86. package/build/components/Install/Install.mjs.map +1 -1
  87. package/build/components/Install/InstallListItem.js.map +1 -1
  88. package/build/components/Install/index.mjs +1 -2
  89. package/build/components/Keywords/KeywordListItems.js.map +1 -1
  90. package/build/components/Keywords/Keywords.js.map +1 -1
  91. package/build/components/Keywords/index.mjs +1 -2
  92. package/build/components/Label/Label.js.map +1 -1
  93. package/build/components/Label/index.mjs +1 -2
  94. package/build/components/Link/Link.js.map +1 -1
  95. package/build/components/Link/Link.mjs.map +1 -1
  96. package/build/components/Link/index.mjs +1 -2
  97. package/build/components/LinkExternal/LinkExternal.js.map +1 -1
  98. package/build/components/LinkExternal/index.mjs +1 -2
  99. package/build/components/Loading/Loading.js.map +1 -1
  100. package/build/components/Loading/Spinner/Spinner.js.map +1 -1
  101. package/build/components/Loading/Spinner/index.mjs +1 -2
  102. package/build/components/Loading/index.mjs +1 -2
  103. package/build/components/Loading/styles.js.map +1 -1
  104. package/build/components/LoginDialog/LoginDialog.d.ts +1 -0
  105. package/build/components/LoginDialog/LoginDialog.js +11 -2
  106. package/build/components/LoginDialog/LoginDialog.js.map +1 -1
  107. package/build/components/LoginDialog/LoginDialog.mjs +10 -2
  108. package/build/components/LoginDialog/LoginDialog.mjs.map +1 -1
  109. package/build/components/LoginDialog/LoginDialogCloseButton.js.map +1 -1
  110. package/build/components/LoginDialog/LoginDialogForm.js.map +1 -1
  111. package/build/components/LoginDialog/LoginDialogFormError.js.map +1 -1
  112. package/build/components/LoginDialog/index.mjs +1 -2
  113. package/build/components/LoginForm/Login.js +0 -23
  114. package/build/components/LoginForm/Login.js.map +1 -1
  115. package/build/components/LoginForm/Login.mjs +0 -21
  116. package/build/components/LoginForm/Login.mjs.map +1 -1
  117. package/build/components/LoginForm/PasswordField.js.map +1 -1
  118. package/build/components/LoginForm/UsernameField.js.map +1 -1
  119. package/build/components/LoginForm/styles.js.map +1 -1
  120. package/build/components/LoginForm/useLoginForm.js.map +1 -1
  121. package/build/components/Logo/Logo.js.map +1 -1
  122. package/build/components/Logo/Logo.mjs.map +1 -1
  123. package/build/components/Logo/index.mjs +1 -2
  124. package/build/components/MenuItem/MenuItem.js.map +1 -1
  125. package/build/components/MenuItem/MenuItem.mjs.map +1 -1
  126. package/build/components/MenuItem/index.mjs +1 -2
  127. package/build/components/NoItems/NoItems.js.map +1 -1
  128. package/build/components/NoItems/index.mjs +1 -2
  129. package/build/components/NotFound/NotFound.js.map +1 -1
  130. package/build/components/NotFound/index.mjs +1 -2
  131. package/build/components/Package/Package.js.map +1 -1
  132. package/build/components/Package/Package.mjs.map +1 -1
  133. package/build/components/Package/index.mjs +1 -2
  134. package/build/components/Package/styles.js.map +1 -1
  135. package/build/components/Package/styles.mjs.map +1 -1
  136. package/build/components/PackageList/PackageList.js.map +1 -1
  137. package/build/components/PackageList/PackageList.mjs.map +1 -1
  138. package/build/components/PackageList/index.mjs +1 -2
  139. package/build/components/Person/Person.js.map +1 -1
  140. package/build/components/Person/Person.mjs.map +1 -1
  141. package/build/components/Person/PersonTooltip.js.map +1 -1
  142. package/build/components/Person/PersonTooltip.mjs.map +1 -1
  143. package/build/components/Person/index.mjs +1 -2
  144. package/build/components/Person/utils.mjs.map +1 -1
  145. package/build/components/RawViewer/RawViewer.js.map +1 -1
  146. package/build/components/RawViewer/index.mjs +1 -2
  147. package/build/components/Readme/Readme.js.map +1 -1
  148. package/build/components/Readme/index.mjs +1 -2
  149. package/build/components/Readme/utils.js.map +1 -1
  150. package/build/components/RegistryInfoDialog/RegistryInfoDialog.js.map +1 -1
  151. package/build/components/RegistryInfoDialog/index.mjs +1 -2
  152. package/build/components/RegistryInfoDialog/styles.js.map +1 -1
  153. package/build/components/Repository/Repository.js.map +1 -1
  154. package/build/components/Repository/Repository.mjs.map +1 -1
  155. package/build/components/Repository/index.mjs +1 -2
  156. package/build/components/Search/AutoComplete/AutoComplete.js.map +1 -1
  157. package/build/components/Search/AutoComplete/index.mjs +1 -2
  158. package/build/components/Search/AutoComplete/styles.js.map +1 -1
  159. package/build/components/Search/Search.js.map +1 -1
  160. package/build/components/Search/Search.mjs.map +1 -1
  161. package/build/components/Search/SearchItem.js.map +1 -1
  162. package/build/components/Search/index.mjs +1 -2
  163. package/build/components/Search/styles.js.map +1 -1
  164. package/build/components/SettingsMenu/SettingsMenu.js.map +1 -1
  165. package/build/components/SettingsMenu/SettingsMenu.mjs.map +1 -1
  166. package/build/components/SettingsMenu/index.mjs +1 -2
  167. package/build/components/SideBarTitle/SideBarTitle.js.map +1 -1
  168. package/build/components/SideBarTitle/SideBarTitle.mjs.map +1 -1
  169. package/build/components/SideBarTitle/index.mjs +1 -2
  170. package/build/components/UpLinks/UpLinks.js.map +1 -1
  171. package/build/components/UpLinks/UpLinks.mjs.map +1 -1
  172. package/build/components/UpLinks/UplinkLink.js.map +1 -1
  173. package/build/components/UpLinks/UplinkLink.mjs.map +1 -1
  174. package/build/components/UpLinks/index.mjs +1 -2
  175. package/build/components/UpLinks/styles.js.map +1 -1
  176. package/build/components/UpLinks/styles.mjs.map +1 -1
  177. package/build/components/Versions/HistoryList.js.map +1 -1
  178. package/build/components/Versions/HistoryList.mjs.map +1 -1
  179. package/build/components/Versions/TagList.js.map +1 -1
  180. package/build/components/Versions/Versions.js.map +1 -1
  181. package/build/components/Versions/Versions.mjs.map +1 -1
  182. package/build/components/Versions/index.mjs +1 -2
  183. package/build/components/Versions/styles.js.map +1 -1
  184. package/build/components/Versions/styles.mjs.map +1 -1
  185. package/build/hooks/useLocalStorage.js.map +1 -1
  186. package/build/layouts/Security/Dialog.js.map +1 -1
  187. package/build/layouts/Version/Version.js.map +1 -1
  188. package/build/layouts/Version/Version.mjs.map +1 -1
  189. package/build/layouts/Version/index.mjs +1 -2
  190. package/build/pages/Front/Home.js.map +1 -1
  191. package/build/pages/Front/index.mjs +1 -2
  192. package/build/pages/Security/AddUser.js.map +1 -1
  193. package/build/pages/Security/ChangePassword.js.map +1 -1
  194. package/build/pages/Security/Login.js.map +1 -1
  195. package/build/pages/Security/Success.js.map +1 -1
  196. package/build/pages/Stage/StageDetail.js.map +1 -1
  197. package/build/pages/Stage/StageList.js.map +1 -1
  198. package/build/pages/Version/Version.js.map +1 -1
  199. package/build/pages/Version/index.mjs +1 -2
  200. package/build/providers/AppConfigurationProvider/AppConfigurationProvider.js.map +1 -1
  201. package/build/providers/AppConfigurationProvider/index.mjs +1 -2
  202. package/build/providers/AuthProvider/AuthProvider.js +1 -1
  203. package/build/providers/AuthProvider/AuthProvider.js.map +1 -1
  204. package/build/providers/AuthProvider/AuthProvider.mjs +1 -1
  205. package/build/providers/AuthProvider/AuthProvider.mjs.map +1 -1
  206. package/build/providers/AuthProvider/index.mjs +1 -2
  207. package/build/providers/AuthProvider/utils.js.map +1 -1
  208. package/build/providers/DownloadProvider/DownloadProvider.js.map +1 -1
  209. package/build/providers/DownloadProvider/index.mjs +1 -2
  210. package/build/providers/ManifestsProvider/ManifestsProvider.js +1 -1
  211. package/build/providers/ManifestsProvider/ManifestsProvider.js.map +1 -1
  212. package/build/providers/ManifestsProvider/ManifestsProvider.mjs +1 -1
  213. package/build/providers/ManifestsProvider/ManifestsProvider.mjs.map +1 -1
  214. package/build/providers/ManifestsProvider/index.mjs +1 -2
  215. package/build/providers/PersistenceSettingProvider/PersistenceSettingProvider.js.map +1 -1
  216. package/build/providers/PersistenceSettingProvider/index.mjs +1 -2
  217. package/build/providers/SearchProvider/SearchProvider.js +1 -1
  218. package/build/providers/SearchProvider/SearchProvider.js.map +1 -1
  219. package/build/providers/SearchProvider/SearchProvider.mjs +1 -1
  220. package/build/providers/SearchProvider/SearchProvider.mjs.map +1 -1
  221. package/build/providers/SearchProvider/index.mjs +1 -2
  222. package/build/providers/TranslatorProvider/TranslatorProvider.js.map +1 -1
  223. package/build/providers/TranslatorProvider/index.mjs +1 -2
  224. package/build/providers/VersionProvider/VersionProvider.js +1 -1
  225. package/build/providers/VersionProvider/VersionProvider.js.map +1 -1
  226. package/build/providers/VersionProvider/VersionProvider.mjs +1 -1
  227. package/build/providers/VersionProvider/VersionProvider.mjs.map +1 -1
  228. package/build/providers/VersionProvider/index.mjs +1 -2
  229. package/build/sections/Detail/ContainerContent.js.map +1 -1
  230. package/build/sections/Detail/ContainerContent.mjs.map +1 -1
  231. package/build/sections/Detail/Detail.js.map +1 -1
  232. package/build/sections/Detail/Detail.mjs.map +1 -1
  233. package/build/sections/Detail/ReadmeSection.js.map +1 -1
  234. package/build/sections/Detail/Tabs.js.map +1 -1
  235. package/build/sections/Detail/Tabs.mjs.map +1 -1
  236. package/build/sections/Detail/index.mjs +1 -2
  237. package/build/sections/Footer/Footer.js.map +1 -1
  238. package/build/sections/Footer/Footer.mjs.map +1 -1
  239. package/build/sections/Footer/index.mjs +1 -2
  240. package/build/sections/Footer/styles.js.map +1 -1
  241. package/build/sections/Header/Header.js.map +1 -1
  242. package/build/sections/Header/Header.mjs.map +1 -1
  243. package/build/sections/Header/HeaderGreetings.js.map +1 -1
  244. package/build/sections/Header/HeaderGreetings.mjs.map +1 -1
  245. package/build/sections/Header/HeaderLeft.js.map +1 -1
  246. package/build/sections/Header/HeaderLeft.mjs.map +1 -1
  247. package/build/sections/Header/HeaderMenu.js +10 -0
  248. package/build/sections/Header/HeaderMenu.js.map +1 -1
  249. package/build/sections/Header/HeaderMenu.mjs +10 -0
  250. package/build/sections/Header/HeaderMenu.mjs.map +1 -1
  251. package/build/sections/Header/HeaderRight.js.map +1 -1
  252. package/build/sections/Header/HeaderRight.mjs.map +1 -1
  253. package/build/sections/Header/HeaderSettingsDialog.js.map +1 -1
  254. package/build/sections/Header/HeaderToolTip.js.map +1 -1
  255. package/build/sections/Header/HeaderToolTipIcon.js.map +1 -1
  256. package/build/sections/Header/HeaderToolTipIcon.mjs.map +1 -1
  257. package/build/sections/Header/LanguageSwitch.js.map +1 -1
  258. package/build/sections/Header/LanguageSwitch.mjs.map +1 -1
  259. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.js.map +1 -1
  260. package/build/sections/Header/RegistryInfoContent/RegistryInfoContent.mjs.map +1 -1
  261. package/build/sections/Header/RegistryInfoContent/index.mjs +1 -2
  262. package/build/sections/Header/RegistryInfoContent/styles.js.map +1 -1
  263. package/build/sections/Header/index.mjs +1 -2
  264. package/build/sections/Header/styles.js.map +1 -1
  265. package/build/sections/Home/Home.js.map +1 -1
  266. package/build/sections/Home/index.mjs +1 -2
  267. package/build/sections/Security/AddUser.js.map +1 -1
  268. package/build/sections/Security/AddUser.mjs.map +1 -1
  269. package/build/sections/Security/ChangePassword.js +41 -16
  270. package/build/sections/Security/ChangePassword.js.map +1 -1
  271. package/build/sections/Security/ChangePassword.mjs +41 -16
  272. package/build/sections/Security/ChangePassword.mjs.map +1 -1
  273. package/build/sections/Security/Login.js.map +1 -1
  274. package/build/sections/Security/Login.mjs.map +1 -1
  275. package/build/sections/Security/Success.js.map +1 -1
  276. package/build/sections/Security/styles.js.map +1 -1
  277. package/build/sections/Security/utils.js.map +1 -1
  278. package/build/sections/SideBar/Sidebar.js.map +1 -1
  279. package/build/sections/SideBar/Sidebar.mjs.map +1 -1
  280. package/build/sections/SideBar/index.mjs +1 -2
  281. package/build/sections/Stage/StageActions.js.map +1 -1
  282. package/build/sections/Stage/StageActions.mjs.map +1 -1
  283. package/build/sections/Stage/StageDetail.js.map +1 -1
  284. package/build/sections/Stage/StageDetail.mjs.map +1 -1
  285. package/build/sections/Stage/StageList.js.map +1 -1
  286. package/build/sections/Stage/StageList.mjs.map +1 -1
  287. package/build/sections/Stage/useRequireSession.js.map +1 -1
  288. package/build/sections/Stage/useRequireSession.mjs.map +1 -1
  289. package/build/sections/Stage/useStage.js.map +1 -1
  290. package/build/sections/Stage/useStage.mjs.map +1 -1
  291. package/build/store/api.js.map +1 -1
  292. package/build/store/api.mjs.map +1 -1
  293. package/build/store/index.mjs +1 -2
  294. package/build/store/storage.js.map +1 -1
  295. package/build/utils/loadable.js.map +1 -1
  296. package/build/utils/schemas.d.ts +0 -2
  297. package/build/utils/schemas.js +0 -1
  298. package/build/utils/schemas.js.map +1 -1
  299. package/build/utils/schemas.mjs +0 -1
  300. package/build/utils/schemas.mjs.map +1 -1
  301. package/build/utils/token.js.map +1 -1
  302. package/build/utils/url.js.map +1 -1
  303. package/build/utils/url.mjs.map +1 -1
  304. package/build/utils/utils.js.map +1 -1
  305. package/package.json +21 -21
  306. package/build/store/routes.d.ts +0 -12
  307. package/build/store/routes.js +0 -18
  308. package/build/store/routes.js.map +0 -1
  309. package/build/store/routes.mjs +0 -18
  310. package/build/store/routes.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.mjs","names":[],"sources":["../../src/utils/schemas.ts"],"sourcesContent":["import * as yup from 'yup';\n\nexport const USERNAME_MIN_LENGTH = 2;\nexport const PASSWORD_MIN_LENGTH = 2;\n\n// All messages are i18n keys; the form fields translate them on render with\n// t(message, { length }) so they follow the selected language.\nexport const usernameSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(USERNAME_MIN_LENGTH, 'security.error.username-min-length')\n .matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, 'security.error.username-must-be-url-safe');\n\nexport const passwordSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(PASSWORD_MIN_LENGTH, 'form-validation.required-min-length');\n\nexport const loginSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n});\n\nexport type LoginFormValues = yup.InferType<typeof loginSchema>;\n\nexport const addUserSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n email: yup\n .string()\n .email('form-validation.invalid-email')\n .required('form-validation.required-field'),\n});\n\nexport type AddUserFormValues = yup.InferType<typeof addUserSchema>;\n\nexport const changePasswordSchema = yup.object({\n username: usernameSchema,\n oldPassword: passwordSchema,\n newPassword: passwordSchema,\n confirmPassword: yup\n .string()\n .required('form-validation.required-field')\n .oneOf([yup.ref('newPassword')], 'security.error.password-mismatch'),\n});\n\nexport type ChangePasswordFormValues = yup.InferType<typeof changePasswordSchema>;\n"],"mappings":";AAOA,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,oCAAoC,CAAC,CAC9D,QAAQ,4BAA4B,0CAA0C;AAEjF,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,qCAAqC;AAEjE,IAAa,cAAc,IAAI,OAAO;CACpC,UAAU;CACV,UAAU;AACZ,CAAC;AAID,IAAa,gBAAgB,IAAI,OAAO;CACtC,UAAU;CACV,UAAU;CACV,OAAO,IACJ,OAAO,CAAC,CACR,MAAM,+BAA+B,CAAC,CACtC,SAAS,gCAAgC;AAC9C,CAAC;AAID,IAAa,uBAAuB,IAAI,OAAO;CAC7C,UAAU;CACV,aAAa;CACb,aAAa;CACb,iBAAiB,IACd,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,kCAAkC;AACvE,CAAC"}
1
+ {"version":3,"file":"schemas.mjs","names":[],"sources":["../../src/utils/schemas.ts"],"sourcesContent":["import * as yup from 'yup';\n\nexport const USERNAME_MIN_LENGTH = 2;\nexport const PASSWORD_MIN_LENGTH = 2;\n\n// All messages are i18n keys; the form fields translate them on render with\n// t(message, { length }) so they follow the selected language.\nexport const usernameSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(USERNAME_MIN_LENGTH, 'security.error.username-min-length')\n .matches(/^[-a-zA-Z0-9_.!~*'()@]+$/, 'security.error.username-must-be-url-safe');\n\nexport const passwordSchema = yup\n .string()\n .required('form-validation.required-field')\n .min(PASSWORD_MIN_LENGTH, 'form-validation.required-min-length');\n\nexport const loginSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n});\n\nexport type LoginFormValues = yup.InferType<typeof loginSchema>;\n\nexport const addUserSchema = yup.object({\n username: usernameSchema,\n password: passwordSchema,\n email: yup\n .string()\n .email('form-validation.invalid-email')\n .required('form-validation.required-field'),\n});\n\nexport type AddUserFormValues = yup.InferType<typeof addUserSchema>;\n\nexport const changePasswordSchema = yup.object({\n oldPassword: passwordSchema,\n newPassword: passwordSchema,\n confirmPassword: yup\n .string()\n .required('form-validation.required-field')\n .oneOf([yup.ref('newPassword')], 'security.error.password-mismatch'),\n});\n\nexport type ChangePasswordFormValues = yup.InferType<typeof changePasswordSchema>;\n"],"mappings":";AAOA,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,oCAAoC,CAAC,CAC9D,QAAQ,4BAA4B,0CAA0C;AAEjF,IAAa,iBAAiB,IAC3B,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,IAAA,GAAyB,qCAAqC;AAEjE,IAAa,cAAc,IAAI,OAAO;CACpC,UAAU;CACV,UAAU;AACZ,CAAC;AAID,IAAa,gBAAgB,IAAI,OAAO;CACtC,UAAU;CACV,UAAU;CACV,OAAO,IACJ,OAAO,CAAC,CACR,MAAM,+BAA+B,CAAC,CACtC,SAAS,gCAAgC;AAC9C,CAAC;AAID,IAAa,uBAAuB,IAAI,OAAO;CAC7C,aAAa;CACb,aAAa;CACb,iBAAiB,IACd,OAAO,CAAC,CACR,SAAS,gCAAgC,CAAC,CAC1C,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,GAAG,kCAAkC;AACvE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","names":[],"sources":["../../src/utils/token.ts"],"sourcesContent":["import { Base64 } from 'js-base64';\nimport { isNumber } from 'lodash-es';\n\n// ms until the token reports as expired (30s guard included); null when undecodable\nexport function tokenExpireInMs(token: string | null): number | null {\n if (typeof token !== 'string') {\n return null;\n }\n\n const [, payload] = token.split('.');\n\n if (!payload) {\n return null;\n }\n\n let exp: number;\n try {\n exp = JSON.parse(Base64.decode(payload)).exp;\n } catch (error: unknown) {\n // never log the token itself: even a malformed one is credential material\n console.error('Invalid token:', error);\n return null;\n }\n\n if (!exp || !isNumber(exp)) {\n return null;\n }\n // Report as expired before (real expire time - 30s)\n return exp * 1000 - 30000 - Date.now();\n}\n\nexport function isTokenExpire(token: string | null): boolean {\n const remaining = tokenExpireInMs(token);\n return remaining === null || remaining <= 0;\n}\n"],"mappings":";;;AAIA,SAAgB,gBAAgB,OAAqC;CACnE,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,MAAM,GAAG,WAAW,MAAM,MAAM,GAAG;CAEnC,IAAI,CAAC,SACH,OAAO;CAGT,IAAI;CACJ,IAAI;EACF,MAAM,KAAK,MAAM,UAAA,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC;CAC3C,SAAS,OAAgB;EAEvB,QAAQ,MAAM,kBAAkB,KAAK;EACrC,OAAO;CACT;CAEA,IAAI,CAAC,OAAO,EAAA,GAAC,UAAA,SAAA,CAAS,GAAG,GACvB,OAAO;CAGT,OAAO,MAAM,MAAO,MAAQ,KAAK,IAAI;AACvC;AAEA,SAAgB,cAAc,OAA+B;CAC3D,MAAM,YAAY,gBAAgB,KAAK;CACvC,OAAO,cAAc,QAAQ,aAAa;AAC5C"}
1
+ {"version":3,"file":"token.js","names":["Base64","isNumber"],"sources":["../../src/utils/token.ts"],"sourcesContent":["import { Base64 } from 'js-base64';\nimport { isNumber } from 'lodash-es';\n\n// ms until the token reports as expired (30s guard included); null when undecodable\nexport function tokenExpireInMs(token: string | null): number | null {\n if (typeof token !== 'string') {\n return null;\n }\n\n const [, payload] = token.split('.');\n\n if (!payload) {\n return null;\n }\n\n let exp: number;\n try {\n exp = JSON.parse(Base64.decode(payload)).exp;\n } catch (error: unknown) {\n // never log the token itself: even a malformed one is credential material\n console.error('Invalid token:', error);\n return null;\n }\n\n if (!exp || !isNumber(exp)) {\n return null;\n }\n // Report as expired before (real expire time - 30s)\n return exp * 1000 - 30000 - Date.now();\n}\n\nexport function isTokenExpire(token: string | null): boolean {\n const remaining = tokenExpireInMs(token);\n return remaining === null || remaining <= 0;\n}\n"],"mappings":";;;AAIA,SAAgB,gBAAgB,OAAqC;CACnE,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,MAAM,GAAG,WAAW,MAAM,MAAM,GAAG;CAEnC,IAAI,CAAC,SACH,OAAO;CAGT,IAAI;CACJ,IAAI;EACF,MAAM,KAAK,MAAMA,UAAAA,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC;CAC3C,SAAS,OAAgB;EAEvB,QAAQ,MAAM,kBAAkB,KAAK;EACrC,OAAO;CACT;CAEA,IAAI,CAAC,OAAO,EAAA,GAACC,UAAAA,SAAAA,CAAS,GAAG,GACvB,OAAO;CAGT,OAAO,MAAM,MAAO,MAAQ,KAAK,IAAI;AACvC;AAEA,SAAgB,cAAc,OAA+B;CAC3D,MAAM,YAAY,gBAAgB,KAAK;CACvC,OAAO,cAAc,QAAQ,aAAa;AAC5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n // npm does not validate these fields on publish: a non-string truthy value\n // (e.g. `homepage: 123`) would make the validator throw and crash the page\n return isURLValidator(typeof url === 'string' ? url : '', {\n protocols: ['http', 'https', 'git+https', 'git'],\n require_protocol: true,\n require_tld: false,\n });\n}\n\nexport function isEmail(email: string): boolean {\n return isEmailValidator(email || '');\n}\n\nexport function extractFileName(url: string): string {\n return url.substring(url.lastIndexOf('/') + 1);\n}\n\n// Legacy Edge support for file downloads\ninterface NavigatorWithMSSaveBlob extends Navigator {\n msSaveBlob?: (blob: Blob, fileName: string) => boolean;\n}\n\nfunction blobToFile(blob: Blob, fileName: string): File {\n // Create a proper File object by extending the Blob with File properties\n const fileProperties = {\n lastModified: Date.now(),\n name: fileName,\n };\n\n // Use Object.assign to copy properties while maintaining the Blob prototype\n return Object.assign(blob, fileProperties) as File;\n}\n\nexport function downloadFile(fileStream: Blob, fileName: string): void {\n let file: File;\n // File constructor is not supported by Edge\n // https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility\n const nav = navigator as NavigatorWithMSSaveBlob;\n if (nav.msSaveBlob) {\n // Detect if Edge\n file = blobToFile(new Blob([fileStream], { type: 'application/octet-stream' }), fileName);\n } else {\n file = new File([fileStream], fileName, {\n type: 'application/octet-stream',\n lastModified: Date.now(),\n });\n }\n\n const objectURL = URL.createObjectURL(file);\n const fileLink = document.createElement('a');\n fileLink.href = objectURL;\n fileLink.download = fileName;\n\n // Skip actual download in test environment to avoid JSDOM navigation error\n // Check if we're in a test environment (JSDOM)\n const isTestEnvironment =\n (typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.includes('Node.js')) ||\n window.navigator.userAgent.includes('jsdom');\n\n if (!isTestEnvironment) {\n // Without appending to an HTML Element, download dialog does not show up on Firefox\n // https://github.com/verdaccio/ui/issues/119\n document.documentElement.appendChild(fileLink);\n fileLink.click();\n // firefox requires remove the object url\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n document.documentElement.removeChild(fileLink);\n }, 150);\n } else {\n // In test environment, just clean up without triggering navigation\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n }, 150);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAGA,SAAgB,MAAM,KAAsB;CAG1C,QAAA,GAAO,oBAAA,QAAA,CAAe,OAAO,QAAQ,WAAW,MAAM,IAAI;EACxD,WAAW;GAAC;GAAQ;GAAS;GAAa;EAAK;EAC/C,kBAAkB;EAClB,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,QAAQ,OAAwB;CAC9C,QAAA,GAAO,sBAAA,QAAA,CAAiB,SAAS,EAAE;AACrC;AAEA,SAAgB,gBAAgB,KAAqB;CACnD,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/C;AAOA,SAAS,WAAW,MAAY,UAAwB;CAQtD,OAAO,OAAO,OAAO,MAAM;EALzB,cAAc,KAAK,IAAI;EACvB,MAAM;CAImB,CAAc;AAC3C;AAEA,SAAgB,aAAa,YAAkB,UAAwB;CACrE,IAAI;CAIJ,IAAI,UAAI,YAEN,OAAO,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,2BAA2B,CAAC,GAAG,QAAQ;MAExF,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU;EACtC,MAAM;EACN,cAAc,KAAK,IAAI;CACzB,CAAC;CAGH,MAAM,YAAY,IAAI,gBAAgB,IAAI;CAC1C,MAAM,WAAW,SAAS,cAAc,GAAG;CAC3C,SAAS,OAAO;CAChB,SAAS,WAAW;CAWpB,IAAI,EAND,OAAO,WAAW,eACjB,OAAO,aACP,OAAO,UAAU,aACjB,OAAO,UAAU,UAAU,SAAS,SAAS,KAC/C,OAAO,UAAU,UAAU,SAAS,OAAO,IAErB;EAGtB,SAAS,gBAAgB,YAAY,QAAQ;EAC7C,SAAS,MAAM;EAEf,iBAAiB;GACf,IAAI,gBAAgB,SAAS;GAC7B,SAAS,gBAAgB,YAAY,QAAQ;EAC/C,GAAG,GAAG;CACR,OAEE,iBAAiB;EACf,IAAI,gBAAgB,SAAS;CAC/B,GAAG,GAAG;AAEV"}
1
+ {"version":3,"file":"url.js","names":["isURLValidator","isEmailValidator","nav"],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n // npm does not validate these fields on publish: a non-string truthy value\n // (e.g. `homepage: 123`) would make the validator throw and crash the page\n return isURLValidator(typeof url === 'string' ? url : '', {\n protocols: ['http', 'https', 'git+https', 'git'],\n require_protocol: true,\n require_tld: false,\n });\n}\n\nexport function isEmail(email: string): boolean {\n return isEmailValidator(email || '');\n}\n\nexport function extractFileName(url: string): string {\n return url.substring(url.lastIndexOf('/') + 1);\n}\n\n// Legacy Edge support for file downloads\ninterface NavigatorWithMSSaveBlob extends Navigator {\n msSaveBlob?: (blob: Blob, fileName: string) => boolean;\n}\n\nfunction blobToFile(blob: Blob, fileName: string): File {\n // Create a proper File object by extending the Blob with File properties\n const fileProperties = {\n lastModified: Date.now(),\n name: fileName,\n };\n\n // Use Object.assign to copy properties while maintaining the Blob prototype\n return Object.assign(blob, fileProperties) as File;\n}\n\nexport function downloadFile(fileStream: Blob, fileName: string): void {\n let file: File;\n // File constructor is not supported by Edge\n // https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility\n const nav = navigator as NavigatorWithMSSaveBlob;\n if (nav.msSaveBlob) {\n // Detect if Edge\n file = blobToFile(new Blob([fileStream], { type: 'application/octet-stream' }), fileName);\n } else {\n file = new File([fileStream], fileName, {\n type: 'application/octet-stream',\n lastModified: Date.now(),\n });\n }\n\n const objectURL = URL.createObjectURL(file);\n const fileLink = document.createElement('a');\n fileLink.href = objectURL;\n fileLink.download = fileName;\n\n // Skip actual download in test environment to avoid JSDOM navigation error\n // Check if we're in a test environment (JSDOM)\n const isTestEnvironment =\n (typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.includes('Node.js')) ||\n window.navigator.userAgent.includes('jsdom');\n\n if (!isTestEnvironment) {\n // Without appending to an HTML Element, download dialog does not show up on Firefox\n // https://github.com/verdaccio/ui/issues/119\n document.documentElement.appendChild(fileLink);\n fileLink.click();\n // firefox requires remove the object url\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n document.documentElement.removeChild(fileLink);\n }, 150);\n } else {\n // In test environment, just clean up without triggering navigation\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n }, 150);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAGA,SAAgB,MAAM,KAAsB;CAG1C,QAAA,GAAOA,oBAAAA,QAAAA,CAAe,OAAO,QAAQ,WAAW,MAAM,IAAI;EACxD,WAAW;GAAC;GAAQ;GAAS;GAAa;EAAK;EAC/C,kBAAkB;EAClB,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,QAAQ,OAAwB;CAC9C,QAAA,GAAOC,sBAAAA,QAAAA,CAAiB,SAAS,EAAE;AACrC;AAEA,SAAgB,gBAAgB,KAAqB;CACnD,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/C;AAOA,SAAS,WAAW,MAAY,UAAwB;CAQtD,OAAO,OAAO,OAAO,MAAM;EALzB,cAAc,KAAK,IAAI;EACvB,MAAM;CAImB,CAAc;AAC3C;AAEA,SAAgB,aAAa,YAAkB,UAAwB;CACrE,IAAI;CAIJ,IAAIC,UAAI,YAEN,OAAO,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,2BAA2B,CAAC,GAAG,QAAQ;MAExF,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU;EACtC,MAAM;EACN,cAAc,KAAK,IAAI;CACzB,CAAC;CAGH,MAAM,YAAY,IAAI,gBAAgB,IAAI;CAC1C,MAAM,WAAW,SAAS,cAAc,GAAG;CAC3C,SAAS,OAAO;CAChB,SAAS,WAAW;CAWpB,IAAI,EAND,OAAO,WAAW,eACjB,OAAO,aACP,OAAO,UAAU,aACjB,OAAO,UAAU,UAAU,SAAS,SAAS,KAC/C,OAAO,UAAU,UAAU,SAAS,OAAO,IAErB;EAGtB,SAAS,gBAAgB,YAAY,QAAQ;EAC7C,SAAS,MAAM;EAEf,iBAAiB;GACf,IAAI,gBAAgB,SAAS;GAC7B,SAAS,gBAAgB,YAAY,QAAQ;EAC/C,GAAG,GAAG;CACR,OAEE,iBAAiB;EACf,IAAI,gBAAgB,SAAS;CAC/B,GAAG,GAAG;AAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"url.mjs","names":[],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n // npm does not validate these fields on publish: a non-string truthy value\n // (e.g. `homepage: 123`) would make the validator throw and crash the page\n return isURLValidator(typeof url === 'string' ? url : '', {\n protocols: ['http', 'https', 'git+https', 'git'],\n require_protocol: true,\n require_tld: false,\n });\n}\n\nexport function isEmail(email: string): boolean {\n return isEmailValidator(email || '');\n}\n\nexport function extractFileName(url: string): string {\n return url.substring(url.lastIndexOf('/') + 1);\n}\n\n// Legacy Edge support for file downloads\ninterface NavigatorWithMSSaveBlob extends Navigator {\n msSaveBlob?: (blob: Blob, fileName: string) => boolean;\n}\n\nfunction blobToFile(blob: Blob, fileName: string): File {\n // Create a proper File object by extending the Blob with File properties\n const fileProperties = {\n lastModified: Date.now(),\n name: fileName,\n };\n\n // Use Object.assign to copy properties while maintaining the Blob prototype\n return Object.assign(blob, fileProperties) as File;\n}\n\nexport function downloadFile(fileStream: Blob, fileName: string): void {\n let file: File;\n // File constructor is not supported by Edge\n // https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility\n const nav = navigator as NavigatorWithMSSaveBlob;\n if (nav.msSaveBlob) {\n // Detect if Edge\n file = blobToFile(new Blob([fileStream], { type: 'application/octet-stream' }), fileName);\n } else {\n file = new File([fileStream], fileName, {\n type: 'application/octet-stream',\n lastModified: Date.now(),\n });\n }\n\n const objectURL = URL.createObjectURL(file);\n const fileLink = document.createElement('a');\n fileLink.href = objectURL;\n fileLink.download = fileName;\n\n // Skip actual download in test environment to avoid JSDOM navigation error\n // Check if we're in a test environment (JSDOM)\n const isTestEnvironment =\n (typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.includes('Node.js')) ||\n window.navigator.userAgent.includes('jsdom');\n\n if (!isTestEnvironment) {\n // Without appending to an HTML Element, download dialog does not show up on Firefox\n // https://github.com/verdaccio/ui/issues/119\n document.documentElement.appendChild(fileLink);\n fileLink.click();\n // firefox requires remove the object url\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n document.documentElement.removeChild(fileLink);\n }, 150);\n } else {\n // In test environment, just clean up without triggering navigation\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n }, 150);\n }\n}\n"],"mappings":";;;;;;;;;;AAGA,SAAgB,MAAM,KAAsB;CAG1C,OAAO,eAAe,OAAO,QAAQ,WAAW,MAAM,IAAI;EACxD,WAAW;GAAC;GAAQ;GAAS;GAAa;EAAK;EAC/C,kBAAkB;EAClB,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,QAAQ,OAAwB;CAC9C,OAAO,iBAAiB,SAAS,EAAE;AACrC;AAEA,SAAgB,gBAAgB,KAAqB;CACnD,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/C;AAOA,SAAS,WAAW,MAAY,UAAwB;CAQtD,OAAO,OAAO,OAAO,MAAM;EALzB,cAAc,KAAK,IAAI;EACvB,MAAM;CAImB,CAAc;AAC3C;AAEA,SAAgB,aAAa,YAAkB,UAAwB;CACrE,IAAI;CAIJ,IAAI,UAAI,YAEN,OAAO,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,2BAA2B,CAAC,GAAG,QAAQ;MAExF,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU;EACtC,MAAM;EACN,cAAc,KAAK,IAAI;CACzB,CAAC;CAGH,MAAM,YAAY,IAAI,gBAAgB,IAAI;CAC1C,MAAM,WAAW,SAAS,cAAc,GAAG;CAC3C,SAAS,OAAO;CAChB,SAAS,WAAW;CAWpB,IAAI,EAND,OAAO,WAAW,eACjB,OAAO,aACP,OAAO,UAAU,aACjB,OAAO,UAAU,UAAU,SAAS,SAAS,KAC/C,OAAO,UAAU,UAAU,SAAS,OAAO,IAErB;EAGtB,SAAS,gBAAgB,YAAY,QAAQ;EAC7C,SAAS,MAAM;EAEf,iBAAiB;GACf,IAAI,gBAAgB,SAAS;GAC7B,SAAS,gBAAgB,YAAY,QAAQ;EAC/C,GAAG,GAAG;CACR,OAEE,iBAAiB;EACf,IAAI,gBAAgB,SAAS;CAC/B,GAAG,GAAG;AAEV"}
1
+ {"version":3,"file":"url.mjs","names":["nav"],"sources":["../../src/utils/url.ts"],"sourcesContent":["import isEmailValidator from 'validator/lib/isEmail';\nimport isURLValidator from 'validator/lib/isURL';\n\nexport function isURL(url: string): boolean {\n // npm does not validate these fields on publish: a non-string truthy value\n // (e.g. `homepage: 123`) would make the validator throw and crash the page\n return isURLValidator(typeof url === 'string' ? url : '', {\n protocols: ['http', 'https', 'git+https', 'git'],\n require_protocol: true,\n require_tld: false,\n });\n}\n\nexport function isEmail(email: string): boolean {\n return isEmailValidator(email || '');\n}\n\nexport function extractFileName(url: string): string {\n return url.substring(url.lastIndexOf('/') + 1);\n}\n\n// Legacy Edge support for file downloads\ninterface NavigatorWithMSSaveBlob extends Navigator {\n msSaveBlob?: (blob: Blob, fileName: string) => boolean;\n}\n\nfunction blobToFile(blob: Blob, fileName: string): File {\n // Create a proper File object by extending the Blob with File properties\n const fileProperties = {\n lastModified: Date.now(),\n name: fileName,\n };\n\n // Use Object.assign to copy properties while maintaining the Blob prototype\n return Object.assign(blob, fileProperties) as File;\n}\n\nexport function downloadFile(fileStream: Blob, fileName: string): void {\n let file: File;\n // File constructor is not supported by Edge\n // https://developer.mozilla.org/en-US/docs/Web/API/File#Browser_compatibility\n const nav = navigator as NavigatorWithMSSaveBlob;\n if (nav.msSaveBlob) {\n // Detect if Edge\n file = blobToFile(new Blob([fileStream], { type: 'application/octet-stream' }), fileName);\n } else {\n file = new File([fileStream], fileName, {\n type: 'application/octet-stream',\n lastModified: Date.now(),\n });\n }\n\n const objectURL = URL.createObjectURL(file);\n const fileLink = document.createElement('a');\n fileLink.href = objectURL;\n fileLink.download = fileName;\n\n // Skip actual download in test environment to avoid JSDOM navigation error\n // Check if we're in a test environment (JSDOM)\n const isTestEnvironment =\n (typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.includes('Node.js')) ||\n window.navigator.userAgent.includes('jsdom');\n\n if (!isTestEnvironment) {\n // Without appending to an HTML Element, download dialog does not show up on Firefox\n // https://github.com/verdaccio/ui/issues/119\n document.documentElement.appendChild(fileLink);\n fileLink.click();\n // firefox requires remove the object url\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n document.documentElement.removeChild(fileLink);\n }, 150);\n } else {\n // In test environment, just clean up without triggering navigation\n setTimeout(() => {\n URL.revokeObjectURL(objectURL);\n }, 150);\n }\n}\n"],"mappings":";;;;;;;;;;AAGA,SAAgB,MAAM,KAAsB;CAG1C,OAAO,eAAe,OAAO,QAAQ,WAAW,MAAM,IAAI;EACxD,WAAW;GAAC;GAAQ;GAAS;GAAa;EAAK;EAC/C,kBAAkB;EAClB,aAAa;CACf,CAAC;AACH;AAEA,SAAgB,QAAQ,OAAwB;CAC9C,OAAO,iBAAiB,SAAS,EAAE;AACrC;AAEA,SAAgB,gBAAgB,KAAqB;CACnD,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC;AAC/C;AAOA,SAAS,WAAW,MAAY,UAAwB;CAQtD,OAAO,OAAO,OAAO,MAAM;EALzB,cAAc,KAAK,IAAI;EACvB,MAAM;CAImB,CAAc;AAC3C;AAEA,SAAgB,aAAa,YAAkB,UAAwB;CACrE,IAAI;CAIJ,IAAIA,UAAI,YAEN,OAAO,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,2BAA2B,CAAC,GAAG,QAAQ;MAExF,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU;EACtC,MAAM;EACN,cAAc,KAAK,IAAI;CACzB,CAAC;CAGH,MAAM,YAAY,IAAI,gBAAgB,IAAI;CAC1C,MAAM,WAAW,SAAS,cAAc,GAAG;CAC3C,SAAS,OAAO;CAChB,SAAS,WAAW;CAWpB,IAAI,EAND,OAAO,WAAW,eACjB,OAAO,aACP,OAAO,UAAU,aACjB,OAAO,UAAU,UAAU,SAAS,SAAS,KAC/C,OAAO,UAAU,UAAU,SAAS,OAAO,IAErB;EAGtB,SAAS,gBAAgB,YAAY,QAAQ;EAC7C,SAAS,MAAM;EAEf,iBAAiB;GACf,IAAI,gBAAgB,SAAS;GAC7B,SAAS,gBAAgB,YAAY,QAAQ;EAC/C,GAAG,GAAG;CACR,OAEE,iBAAiB;EACf,IAAI,gBAAgB,SAAS;CAC/B,GAAG,GAAG;AAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/utils/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport i18next from 'i18next';\n\nimport type { UpLinks } from '@verdaccio/types';\n\nimport type { Time } from '../types/packageMeta';\nimport { isURL } from './url';\n\nexport const TIMEFORMAT = 'L LTS';\n\ndayjs.extend(relativeTime);\ndayjs.extend(localizedFormat);\n\n/**\n * Formats license field for webui.\n * @see https://docs.npmjs.com/files/package.json#license\n */\nexport function formatLicense(license: string | { type?: string } | unknown): string | undefined {\n if (typeof license === 'string') {\n return license;\n }\n\n if (\n license &&\n typeof license === 'object' &&\n 'type' in license &&\n typeof license.type === 'string'\n ) {\n return license.type;\n }\n\n return undefined;\n}\n\nexport interface Repository {\n readonly type: string;\n readonly url: string;\n}\n\n/**\n * Formats repository field for webui.\n * @see https://docs.npmjs.com/files/package.json#repository\n */\nexport function formatRepository(repository: string | { url?: string } | unknown): string | null {\n if (typeof repository === 'string') {\n return repository;\n }\n\n if (\n repository &&\n typeof repository === 'object' &&\n 'url' in repository &&\n typeof repository.url === 'string'\n ) {\n return repository.url;\n }\n\n return null;\n}\n\n/**\n * Normalizes the `bugs` field to its url.\n * @see https://docs.npmjs.com/cli/configuring-npm/package-json#bugs\n */\nexport function getBugsUrl(bugs: unknown): string | null {\n if (typeof bugs === 'string') {\n return bugs;\n }\n\n if (bugs && typeof bugs === 'object' && 'url' in bugs && typeof bugs.url === 'string') {\n return bugs.url;\n }\n\n return null;\n}\n\n/**\n * Normalizes the `funding` field (string, object or array of both) to a url.\n * @see https://docs.npmjs.com/cli/configuring-npm/package-json#funding\n */\nexport function getFundingUrl(funding: unknown): string | null {\n const entries = Array.isArray(funding) ? funding : [funding];\n // first *valid* url wins: a malformed entry must not hide a later valid one\n for (const entry of entries) {\n if (typeof entry === 'string' && isURL(entry)) {\n return entry;\n }\n if (\n entry &&\n typeof entry === 'object' &&\n 'url' in entry &&\n typeof entry.url === 'string' &&\n isURL(entry.url)\n ) {\n return entry.url;\n }\n }\n\n return null;\n}\n\nexport function formatDate(lastUpdate: string | number): string {\n return dayjs(new Date(lastUpdate)).format(TIMEFORMAT);\n}\n\nexport function formatDateDistance(lastUpdate: Date | string | number): string {\n return dayjs(new Date(lastUpdate)).fromNow();\n}\n\n/**\n * For <LastSync /> component\n * @param {array} uplinks\n */\nexport function getLastUpdatedPackageTime(uplinks: UpLinks = {}): string {\n let lastUpdate = 0;\n Object.keys(uplinks).forEach(function computeUplink(upLinkName): void {\n const status = uplinks[upLinkName];\n if (status.fetched > lastUpdate) {\n lastUpdate = status.fetched;\n }\n });\n\n return lastUpdate ? formatDate(lastUpdate) : '';\n}\n\n/**\n * For <LastSync /> component\n * @param {Object} time\n * @returns {Array} last 3 releases\n */\nexport function getRecentReleases(time: Time = {}): Time[] {\n const recent = Object.keys(time).map((version) => ({\n version,\n time: formatDate(time[version]),\n }));\n\n return recent.slice(recent.length - 3, recent.length).reverse();\n}\n\nexport function getAuthorName(authorName?: string): string {\n if (!authorName) {\n return i18next.t('author-unknown');\n }\n\n if (authorName.toLowerCase() === 'anonymous') {\n return i18next.t('author-anonymous');\n }\n\n return authorName;\n}\n\nexport function getUplink(upLinkName: string, packageName: string): string | null {\n // TODO: make this a config like \"uplinks: npmjs: web: https://www.npmjs.com/package/\"\n switch (upLinkName) {\n case 'npmjs':\n return `https://www.npmjs.com/package/${packageName}`;\n }\n return null;\n}\n\nexport function fileSizeSI(\n a: number,\n b?: typeof Math,\n c?: (p: number) => number,\n d?: number,\n e?: number\n): string {\n b = Math;\n c = b.log;\n d = 1e3;\n e = (c(a) / c(d)) | 0;\n const size = a / b.pow(d, e);\n // no decimals for Bytes\n if (e === 0) {\n return Math.floor(size) + ' Bytes';\n } else {\n return size.toFixed(1) + ' ' + 'kMGTPEZY'[--e] + 'B';\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAa,aAAa;AAE1B,MAAA,QAAM,OAAO,0BAAA,OAAY;AACzB,MAAA,QAAM,OAAO,6BAAA,OAAe;;;;;AAM5B,SAAgB,cAAc,SAAmE;CAC/F,IAAI,OAAO,YAAY,UACrB,OAAO;CAGT,IACE,WACA,OAAO,YAAY,YACnB,UAAU,WACV,OAAO,QAAQ,SAAS,UAExB,OAAO,QAAQ;AAInB;;;;;AAWA,SAAgB,iBAAiB,YAAgE;CAC/F,IAAI,OAAO,eAAe,UACxB,OAAO;CAGT,IACE,cACA,OAAO,eAAe,YACtB,SAAS,cACT,OAAO,WAAW,QAAQ,UAE1B,OAAO,WAAW;CAGpB,OAAO;AACT;;;;;AAMA,SAAgB,WAAW,MAA8B;CACvD,IAAI,OAAO,SAAS,UAClB,OAAO;CAGT,IAAI,QAAQ,OAAO,SAAS,YAAY,SAAS,QAAQ,OAAO,KAAK,QAAQ,UAC3E,OAAO,KAAK;CAGd,OAAO;AACT;;;;;AAMA,SAAgB,cAAc,SAAiC;CAC7D,MAAM,UAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;CAE3D,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,OAAO,UAAU,YAAY,YAAA,MAAM,KAAK,GAC1C,OAAO;EAET,IACE,SACA,OAAO,UAAU,YACjB,SAAS,SACT,OAAO,MAAM,QAAQ,YACrB,YAAA,MAAM,MAAM,GAAG,GAEf,OAAO,MAAM;CAEjB;CAEA,OAAO;AACT;AAEA,SAAgB,WAAW,YAAqC;CAC9D,QAAA,GAAO,MAAA,QAAA,CAAM,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,UAAU;AACtD;AAEA,SAAgB,mBAAmB,YAA4C;CAC7E,QAAA,GAAO,MAAA,QAAA,CAAM,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ;AAC7C;;;;;AAMA,SAAgB,0BAA0B,UAAmB,CAAC,GAAW;CACvE,IAAI,aAAa;CACjB,OAAO,KAAK,OAAO,CAAC,CAAC,QAAQ,SAAS,cAAc,YAAkB;EACpE,MAAM,SAAS,QAAQ;EACvB,IAAI,OAAO,UAAU,YACnB,aAAa,OAAO;CAExB,CAAC;CAED,OAAO,aAAa,WAAW,UAAU,IAAI;AAC/C;;;;;;AAOA,SAAgB,kBAAkB,OAAa,CAAC,GAAW;CACzD,MAAM,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,KAAK,aAAa;EACjD;EACA,MAAM,WAAW,KAAK,QAAQ;CAChC,EAAE;CAEF,OAAO,OAAO,MAAM,OAAO,SAAS,GAAG,OAAO,MAAM,CAAC,CAAC,QAAQ;AAChE;AAEA,SAAgB,cAAc,YAA6B;CACzD,IAAI,CAAC,YACH,OAAO,QAAA,QAAQ,EAAE,gBAAgB;CAGnC,IAAI,WAAW,YAAY,MAAM,aAC/B,OAAO,QAAA,QAAQ,EAAE,kBAAkB;CAGrC,OAAO;AACT;AAEA,SAAgB,UAAU,YAAoB,aAAoC;CAEhF,QAAQ,YAAR;EACE,KAAK,SACH,OAAO,iCAAiC;CAC5C;CACA,OAAO;AACT;AAEA,SAAgB,WACd,GACA,GACA,GACA,GACA,GACQ;CACR,IAAI;CACJ,IAAI,EAAE;CACN,IAAI;CACJ,IAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAK;CACpB,MAAM,OAAO,IAAI,EAAE,IAAI,GAAG,CAAC;CAE3B,IAAI,MAAM,GACR,OAAO,KAAK,MAAM,IAAI,IAAI;MAE1B,OAAO,KAAK,QAAQ,CAAC,IAAI,MAAM,WAAW,EAAE,KAAK;AAErD"}
1
+ {"version":3,"file":"utils.js","names":["relativeTime","localizedFormat","isURL"],"sources":["../../src/utils/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport i18next from 'i18next';\n\nimport type { UpLinks } from '@verdaccio/types';\n\nimport type { Time } from '../types/packageMeta';\nimport { isURL } from './url';\n\nexport const TIMEFORMAT = 'L LTS';\n\ndayjs.extend(relativeTime);\ndayjs.extend(localizedFormat);\n\n/**\n * Formats license field for webui.\n * @see https://docs.npmjs.com/files/package.json#license\n */\nexport function formatLicense(license: string | { type?: string } | unknown): string | undefined {\n if (typeof license === 'string') {\n return license;\n }\n\n if (\n license &&\n typeof license === 'object' &&\n 'type' in license &&\n typeof license.type === 'string'\n ) {\n return license.type;\n }\n\n return undefined;\n}\n\nexport interface Repository {\n readonly type: string;\n readonly url: string;\n}\n\n/**\n * Formats repository field for webui.\n * @see https://docs.npmjs.com/files/package.json#repository\n */\nexport function formatRepository(repository: string | { url?: string } | unknown): string | null {\n if (typeof repository === 'string') {\n return repository;\n }\n\n if (\n repository &&\n typeof repository === 'object' &&\n 'url' in repository &&\n typeof repository.url === 'string'\n ) {\n return repository.url;\n }\n\n return null;\n}\n\n/**\n * Normalizes the `bugs` field to its url.\n * @see https://docs.npmjs.com/cli/configuring-npm/package-json#bugs\n */\nexport function getBugsUrl(bugs: unknown): string | null {\n if (typeof bugs === 'string') {\n return bugs;\n }\n\n if (bugs && typeof bugs === 'object' && 'url' in bugs && typeof bugs.url === 'string') {\n return bugs.url;\n }\n\n return null;\n}\n\n/**\n * Normalizes the `funding` field (string, object or array of both) to a url.\n * @see https://docs.npmjs.com/cli/configuring-npm/package-json#funding\n */\nexport function getFundingUrl(funding: unknown): string | null {\n const entries = Array.isArray(funding) ? funding : [funding];\n // first *valid* url wins: a malformed entry must not hide a later valid one\n for (const entry of entries) {\n if (typeof entry === 'string' && isURL(entry)) {\n return entry;\n }\n if (\n entry &&\n typeof entry === 'object' &&\n 'url' in entry &&\n typeof entry.url === 'string' &&\n isURL(entry.url)\n ) {\n return entry.url;\n }\n }\n\n return null;\n}\n\nexport function formatDate(lastUpdate: string | number): string {\n return dayjs(new Date(lastUpdate)).format(TIMEFORMAT);\n}\n\nexport function formatDateDistance(lastUpdate: Date | string | number): string {\n return dayjs(new Date(lastUpdate)).fromNow();\n}\n\n/**\n * For <LastSync /> component\n * @param {array} uplinks\n */\nexport function getLastUpdatedPackageTime(uplinks: UpLinks = {}): string {\n let lastUpdate = 0;\n Object.keys(uplinks).forEach(function computeUplink(upLinkName): void {\n const status = uplinks[upLinkName];\n if (status.fetched > lastUpdate) {\n lastUpdate = status.fetched;\n }\n });\n\n return lastUpdate ? formatDate(lastUpdate) : '';\n}\n\n/**\n * For <LastSync /> component\n * @param {Object} time\n * @returns {Array} last 3 releases\n */\nexport function getRecentReleases(time: Time = {}): Time[] {\n const recent = Object.keys(time).map((version) => ({\n version,\n time: formatDate(time[version]),\n }));\n\n return recent.slice(recent.length - 3, recent.length).reverse();\n}\n\nexport function getAuthorName(authorName?: string): string {\n if (!authorName) {\n return i18next.t('author-unknown');\n }\n\n if (authorName.toLowerCase() === 'anonymous') {\n return i18next.t('author-anonymous');\n }\n\n return authorName;\n}\n\nexport function getUplink(upLinkName: string, packageName: string): string | null {\n // TODO: make this a config like \"uplinks: npmjs: web: https://www.npmjs.com/package/\"\n switch (upLinkName) {\n case 'npmjs':\n return `https://www.npmjs.com/package/${packageName}`;\n }\n return null;\n}\n\nexport function fileSizeSI(\n a: number,\n b?: typeof Math,\n c?: (p: number) => number,\n d?: number,\n e?: number\n): string {\n b = Math;\n c = b.log;\n d = 1e3;\n e = (c(a) / c(d)) | 0;\n const size = a / b.pow(d, e);\n // no decimals for Bytes\n if (e === 0) {\n return Math.floor(size) + ' Bytes';\n } else {\n return size.toFixed(1) + ' ' + 'kMGTPEZY'[--e] + 'B';\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAa,aAAa;AAE1B,MAAA,QAAM,OAAOA,0BAAAA,OAAY;AACzB,MAAA,QAAM,OAAOC,6BAAAA,OAAe;;;;;AAM5B,SAAgB,cAAc,SAAmE;CAC/F,IAAI,OAAO,YAAY,UACrB,OAAO;CAGT,IACE,WACA,OAAO,YAAY,YACnB,UAAU,WACV,OAAO,QAAQ,SAAS,UAExB,OAAO,QAAQ;AAInB;;;;;AAWA,SAAgB,iBAAiB,YAAgE;CAC/F,IAAI,OAAO,eAAe,UACxB,OAAO;CAGT,IACE,cACA,OAAO,eAAe,YACtB,SAAS,cACT,OAAO,WAAW,QAAQ,UAE1B,OAAO,WAAW;CAGpB,OAAO;AACT;;;;;AAMA,SAAgB,WAAW,MAA8B;CACvD,IAAI,OAAO,SAAS,UAClB,OAAO;CAGT,IAAI,QAAQ,OAAO,SAAS,YAAY,SAAS,QAAQ,OAAO,KAAK,QAAQ,UAC3E,OAAO,KAAK;CAGd,OAAO;AACT;;;;;AAMA,SAAgB,cAAc,SAAiC;CAC7D,MAAM,UAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;CAE3D,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,OAAO,UAAU,YAAYC,YAAAA,MAAM,KAAK,GAC1C,OAAO;EAET,IACE,SACA,OAAO,UAAU,YACjB,SAAS,SACT,OAAO,MAAM,QAAQ,YACrBA,YAAAA,MAAM,MAAM,GAAG,GAEf,OAAO,MAAM;CAEjB;CAEA,OAAO;AACT;AAEA,SAAgB,WAAW,YAAqC;CAC9D,QAAA,GAAO,MAAA,QAAA,CAAM,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,UAAU;AACtD;AAEA,SAAgB,mBAAmB,YAA4C;CAC7E,QAAA,GAAO,MAAA,QAAA,CAAM,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ;AAC7C;;;;;AAMA,SAAgB,0BAA0B,UAAmB,CAAC,GAAW;CACvE,IAAI,aAAa;CACjB,OAAO,KAAK,OAAO,CAAC,CAAC,QAAQ,SAAS,cAAc,YAAkB;EACpE,MAAM,SAAS,QAAQ;EACvB,IAAI,OAAO,UAAU,YACnB,aAAa,OAAO;CAExB,CAAC;CAED,OAAO,aAAa,WAAW,UAAU,IAAI;AAC/C;;;;;;AAOA,SAAgB,kBAAkB,OAAa,CAAC,GAAW;CACzD,MAAM,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,KAAK,aAAa;EACjD;EACA,MAAM,WAAW,KAAK,QAAQ;CAChC,EAAE;CAEF,OAAO,OAAO,MAAM,OAAO,SAAS,GAAG,OAAO,MAAM,CAAC,CAAC,QAAQ;AAChE;AAEA,SAAgB,cAAc,YAA6B;CACzD,IAAI,CAAC,YACH,OAAO,QAAA,QAAQ,EAAE,gBAAgB;CAGnC,IAAI,WAAW,YAAY,MAAM,aAC/B,OAAO,QAAA,QAAQ,EAAE,kBAAkB;CAGrC,OAAO;AACT;AAEA,SAAgB,UAAU,YAAoB,aAAoC;CAEhF,QAAQ,YAAR;EACE,KAAK,SACH,OAAO,iCAAiC;CAC5C;CACA,OAAO;AACT;AAEA,SAAgB,WACd,GACA,GACA,GACA,GACA,GACQ;CACR,IAAI;CACJ,IAAI,EAAE;CACN,IAAI;CACJ,IAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAK;CACpB,MAAM,OAAO,IAAI,EAAE,IAAI,GAAG,CAAC;CAE3B,IAAI,MAAM,GACR,OAAO,KAAK,MAAM,IAAI,IAAI;MAE1B,OAAO,KAAK,QAAQ,CAAC,IAAI,MAAM,WAAW,EAAE,KAAK;AAErD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/ui-components",
3
- "version": "5.0.0-next-9.21",
3
+ "version": "5.0.0-next-9.23",
4
4
  "description": "Verdaccio UI Components",
5
5
  "author": "Juan Picado <juanpicado19@gmail.com>",
6
6
  "license": "MIT",
@@ -37,29 +37,29 @@
37
37
  "@emotion/react": "11.14.0",
38
38
  "@emotion/styled": "11.14.1",
39
39
  "@hookform/resolvers": "5.9.1",
40
- "@microlink/react-json-view": "1.31.28",
40
+ "@microlink/react-json-view": "1.31.40",
41
41
  "@mui/icons-material": "7.3.11",
42
42
  "@mui/material": "7.3.11",
43
43
  "@mui/system": "7.3.11",
44
- "@verdaccio/ui-i18n": "10.0.0-next-9.5",
44
+ "@verdaccio/ui-i18n": "10.0.0-next-9.6",
45
45
  "country-flag-icons": "1.6.20",
46
46
  "dayjs": "1.11.23",
47
47
  "debug": "4.4.3",
48
- "dompurify": "3.4.14",
48
+ "dompurify": "3.4.17",
49
49
  "highlight.js": "11.12.0",
50
50
  "i18next": "25.10.10",
51
- "js-base64": "3.9.3",
51
+ "js-base64": "3.9.4",
52
52
  "localstorage-memory": "1.0.3",
53
53
  "lodash-es": "4.18.1",
54
- "marked": "17.0.6",
54
+ "marked": "18.1.1",
55
55
  "marked-highlight": "2.2.4",
56
56
  "normalize.css": "8.0.1",
57
- "react": "19.2.8",
58
- "react-dom": "19.2.8",
59
- "react-hook-form": "7.86.0",
57
+ "react": "19.3.1",
58
+ "react-dom": "19.3.1",
59
+ "react-hook-form": "7.90.0",
60
60
  "react-i18next": "16.6.6",
61
61
  "react-markdown": "10.1.0",
62
- "react-router": "8.3.0",
62
+ "react-router": "8.4.0",
63
63
  "react-virtualized": "9.22.6",
64
64
  "semver": "7.8.5",
65
65
  "swr": "2.5.1",
@@ -70,24 +70,24 @@
70
70
  "@storybook/addon-docs": "10.2.17",
71
71
  "@storybook/addon-links": "10.2.17",
72
72
  "@storybook/react-vite": "10.2.17",
73
- "@testing-library/dom": "10.4.1",
74
- "@testing-library/jest-dom": "6.9.1",
75
- "@testing-library/react": "16.3.2",
73
+ "@testing-library/dom": "10.4.2",
74
+ "@testing-library/jest-dom": "7.0.1",
75
+ "@testing-library/react": "16.3.3",
76
76
  "@types/lodash-es": "4.17.12",
77
- "@types/node": "24.13.2",
78
- "@verdaccio/types": "14.0.0-next-9.14",
79
- "@vitejs/plugin-react": "6.0.5",
77
+ "@types/node": "24.13.3",
78
+ "@verdaccio/types": "14.0.0-next-9.17",
79
+ "@vitejs/plugin-react": "6.1.2",
80
80
  "cross-env": "10.1.0",
81
81
  "generate-github-markdown-css": "6.6.0",
82
- "jsdom": "29.1.1",
82
+ "jsdom": "30.1.3",
83
83
  "mockdate": "3.0.5",
84
84
  "msw": "2.12.10",
85
85
  "msw-storybook-addon": "2.0.7",
86
86
  "mutationobserver-shim": "0.3.7",
87
87
  "rimraf": "6.1.3",
88
- "storybook": "10.2.17",
89
- "vite": "8.2.2",
90
- "vitest": "4.1.10",
88
+ "storybook": "10.6.2",
89
+ "vite": "8.3.4",
90
+ "vitest": "5.0.5",
91
91
  "whatwg-fetch": "3.6.20"
92
92
  },
93
93
  "msw": {
@@ -96,7 +96,7 @@
96
96
  ]
97
97
  },
98
98
  "scripts": {
99
- "test": "cross-env TZ=UTC vitest run",
99
+ "test": "cross-env TZ=UTC vitest run --fsModuleCachePath node_modules/.vitest-cache",
100
100
  "clean": "rimraf ./build",
101
101
  "type-check": "tsc --noEmit -p tsconfig.build.json",
102
102
  "watch": "vite build --watch",
@@ -1,12 +0,0 @@
1
- /**
2
- * @deprecated use APIRoute in utils/routes.ts
3
- */
4
- export declare enum APIRoute {
5
- LOGIN = "/-/verdaccio/sec/login",
6
- SIGNUP = "/-/verdaccio/sec/signup",
7
- CONFIG = "/-/verdaccio/packages",
8
- PACKAGES = "/-/verdaccio/data/packages",
9
- SEARCH = "/-/verdaccio/data/search/",// :value
10
- SIDEBAR = "/-/verdaccio/data/sidebar/",// :packageName?v=version
11
- README = "/-/verdaccio/data/package/readme/"
12
- }
@@ -1,18 +0,0 @@
1
- //#region src/store/routes.ts
2
- /**
3
- * @deprecated use APIRoute in utils/routes.ts
4
- */
5
- var APIRoute = /* @__PURE__ */ function(APIRoute) {
6
- APIRoute["LOGIN"] = "/-/verdaccio/sec/login";
7
- APIRoute["SIGNUP"] = "/-/verdaccio/sec/signup";
8
- APIRoute["CONFIG"] = "/-/verdaccio/packages";
9
- APIRoute["PACKAGES"] = "/-/verdaccio/data/packages";
10
- APIRoute["SEARCH"] = "/-/verdaccio/data/search/";
11
- APIRoute["SIDEBAR"] = "/-/verdaccio/data/sidebar/";
12
- APIRoute["README"] = "/-/verdaccio/data/package/readme/";
13
- return APIRoute;
14
- }({});
15
- //#endregion
16
- exports.APIRoute = APIRoute;
17
-
18
- //# sourceMappingURL=routes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes.js","names":[],"sources":["../../src/store/routes.ts"],"sourcesContent":["// Example API request:\n// http://localhost:8000/-/verdaccio/data/package/readme/jquery\n/**\n * @deprecated use APIRoute in utils/routes.ts\n */\nexport enum APIRoute {\n LOGIN = '/-/verdaccio/sec/login',\n SIGNUP = '/-/verdaccio/sec/signup',\n CONFIG = '/-/verdaccio/packages',\n PACKAGES = '/-/verdaccio/data/packages',\n SEARCH = '/-/verdaccio/data/search/', // :value\n SIDEBAR = '/-/verdaccio/data/sidebar/', // :packageName?v=version\n README = '/-/verdaccio/data/package/readme/', // :packageName?v=version\n}\n"],"mappings":";;;;AAKA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,YAAA;CACA,SAAA,YAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,aAAA;CACA,SAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
@@ -1,18 +0,0 @@
1
- //#region src/store/routes.ts
2
- /**
3
- * @deprecated use APIRoute in utils/routes.ts
4
- */
5
- var APIRoute = /* @__PURE__ */ function(APIRoute) {
6
- APIRoute["LOGIN"] = "/-/verdaccio/sec/login";
7
- APIRoute["SIGNUP"] = "/-/verdaccio/sec/signup";
8
- APIRoute["CONFIG"] = "/-/verdaccio/packages";
9
- APIRoute["PACKAGES"] = "/-/verdaccio/data/packages";
10
- APIRoute["SEARCH"] = "/-/verdaccio/data/search/";
11
- APIRoute["SIDEBAR"] = "/-/verdaccio/data/sidebar/";
12
- APIRoute["README"] = "/-/verdaccio/data/package/readme/";
13
- return APIRoute;
14
- }({});
15
- //#endregion
16
- export { APIRoute };
17
-
18
- //# sourceMappingURL=routes.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes.mjs","names":[],"sources":["../../src/store/routes.ts"],"sourcesContent":["// Example API request:\n// http://localhost:8000/-/verdaccio/data/package/readme/jquery\n/**\n * @deprecated use APIRoute in utils/routes.ts\n */\nexport enum APIRoute {\n LOGIN = '/-/verdaccio/sec/login',\n SIGNUP = '/-/verdaccio/sec/signup',\n CONFIG = '/-/verdaccio/packages',\n PACKAGES = '/-/verdaccio/data/packages',\n SEARCH = '/-/verdaccio/data/search/', // :value\n SIDEBAR = '/-/verdaccio/data/sidebar/', // :packageName?v=version\n README = '/-/verdaccio/data/package/readme/', // :packageName?v=version\n}\n"],"mappings":";;;;AAKA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,YAAA;CACA,SAAA,YAAA;CACA,SAAA,cAAA;CACA,SAAA,YAAA;CACA,SAAA,aAAA;CACA,SAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}