openvsx-webui-test 0.19.0-dev.0 → 0.19.0-dev.2

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 (84) hide show
  1. package/lib/components/error-dialog.d.ts.map +1 -1
  2. package/lib/components/error-dialog.js +3 -5
  3. package/lib/components/error-dialog.js.map +1 -1
  4. package/lib/components/scan-admin/scan-card/scan-card-content.d.ts +3 -3
  5. package/lib/components/scan-admin/scan-card/scan-card-content.d.ts.map +1 -1
  6. package/lib/components/scan-admin/scan-card/scan-card-content.js +146 -169
  7. package/lib/components/scan-admin/scan-card/scan-card-content.js.map +1 -1
  8. package/lib/components/scan-admin/scan-card/scan-card-header.d.ts.map +1 -1
  9. package/lib/components/scan-admin/scan-card/scan-card-header.js +17 -5
  10. package/lib/components/scan-admin/scan-card/scan-card-header.js.map +1 -1
  11. package/lib/components/scan-admin/scan-card/scan-card.js +1 -1
  12. package/lib/components/scan-admin/scan-card/scan-card.js.map +1 -1
  13. package/lib/components/timestamp.d.ts +1 -0
  14. package/lib/components/timestamp.d.ts.map +1 -1
  15. package/lib/components/timestamp.js +3 -2
  16. package/lib/components/timestamp.js.map +1 -1
  17. package/lib/default/menu-content.d.ts +1 -4
  18. package/lib/default/menu-content.d.ts.map +1 -1
  19. package/lib/default/menu-content.js +8 -16
  20. package/lib/default/menu-content.js.map +1 -1
  21. package/lib/extension-registry-service.js +1 -1
  22. package/lib/extension-registry-service.js.map +1 -1
  23. package/lib/extension-registry-types.d.ts +2 -0
  24. package/lib/extension-registry-types.d.ts.map +1 -1
  25. package/lib/extension-registry-types.js.map +1 -1
  26. package/lib/hooks/scan-admin/use-query-params-state.d.ts +15 -0
  27. package/lib/hooks/scan-admin/use-query-params-state.d.ts.map +1 -0
  28. package/lib/hooks/scan-admin/use-query-params-state.js +44 -0
  29. package/lib/hooks/scan-admin/use-query-params-state.js.map +1 -0
  30. package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
  31. package/lib/pages/admin-dashboard/admin-dashboard.js +2 -2
  32. package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
  33. package/lib/pages/admin-dashboard/extension-admin.d.ts.map +1 -1
  34. package/lib/pages/admin-dashboard/extension-admin.js +4 -3
  35. package/lib/pages/admin-dashboard/extension-admin.js.map +1 -1
  36. package/lib/pages/admin-dashboard/namespace-input.d.ts +1 -0
  37. package/lib/pages/admin-dashboard/namespace-input.d.ts.map +1 -1
  38. package/lib/pages/admin-dashboard/namespace-input.js +2 -2
  39. package/lib/pages/admin-dashboard/namespace-input.js.map +1 -1
  40. package/lib/pages/extension-detail/extension-detail-overview.js +1 -1
  41. package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -1
  42. package/lib/pages/extension-detail/extension-review-dialog.d.ts.map +1 -1
  43. package/lib/pages/extension-detail/extension-review-dialog.js +2 -11
  44. package/lib/pages/extension-detail/extension-review-dialog.js.map +1 -1
  45. package/lib/pages/user/avatar.d.ts.map +1 -1
  46. package/lib/pages/user/avatar.js +9 -9
  47. package/lib/pages/user/avatar.js.map +1 -1
  48. package/lib/pages/user/logout.d.ts +3 -2
  49. package/lib/pages/user/logout.d.ts.map +1 -1
  50. package/lib/pages/user/logout.js +5 -4
  51. package/lib/pages/user/logout.js.map +1 -1
  52. package/lib/pages/user/user-settings-extensions.js +1 -1
  53. package/lib/pages/user/user-settings-extensions.js.map +1 -1
  54. package/lib/pages/user/user-settings-tokens.d.ts.map +1 -1
  55. package/lib/pages/user/user-settings-tokens.js +1 -1
  56. package/lib/pages/user/user-settings-tokens.js.map +1 -1
  57. package/lib/server-request.d.ts.map +1 -1
  58. package/lib/server-request.js +5 -1
  59. package/lib/server-request.js.map +1 -1
  60. package/lib/utils.d.ts +1 -1
  61. package/lib/utils.d.ts.map +1 -1
  62. package/lib/utils.js +56 -22
  63. package/lib/utils.js.map +1 -1
  64. package/package.json +5 -4
  65. package/src/components/error-dialog.tsx +3 -5
  66. package/src/components/scan-admin/scan-card/scan-card-content.tsx +380 -408
  67. package/src/components/scan-admin/scan-card/scan-card-header.tsx +35 -6
  68. package/src/components/scan-admin/scan-card/scan-card.tsx +2 -2
  69. package/src/components/timestamp.tsx +3 -1
  70. package/src/default/menu-content.tsx +70 -96
  71. package/src/extension-registry-service.ts +1 -1
  72. package/src/extension-registry-types.ts +2 -0
  73. package/src/hooks/scan-admin/use-query-params-state.ts +55 -0
  74. package/src/pages/admin-dashboard/admin-dashboard.tsx +2 -1
  75. package/src/pages/admin-dashboard/extension-admin.tsx +4 -2
  76. package/src/pages/admin-dashboard/namespace-input.tsx +3 -1
  77. package/src/pages/extension-detail/extension-detail-overview.tsx +1 -1
  78. package/src/pages/extension-detail/extension-review-dialog.tsx +2 -12
  79. package/src/pages/user/avatar.tsx +30 -35
  80. package/src/pages/user/logout.tsx +6 -4
  81. package/src/pages/user/user-settings-extensions.tsx +1 -1
  82. package/src/pages/user/user-settings-tokens.tsx +1 -0
  83. package/src/server-request.ts +5 -1
  84. package/src/utils.ts +47 -19
@@ -8,7 +8,7 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  * ****************************************************************************** */
10
10
 
11
- import { FunctionComponent, PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';
11
+ import { PropsWithChildren, useContext, useEffect, useRef, useState, forwardRef } from 'react';
12
12
  import { Button } from '@mui/material';
13
13
  import { styled } from '@mui/material/styles';
14
14
  import { isError, CsrfTokenJson } from '../../extension-registry-types';
@@ -22,7 +22,7 @@ const LogoutButton = styled(Button)({
22
22
  padding: 0
23
23
  });
24
24
 
25
- export const LogoutForm: FunctionComponent<PropsWithChildren> = ({ children }) => {
25
+ export const LogoutForm = forwardRef<HTMLFormElement, PropsWithChildren>(({ children }, ref) => {
26
26
  const [csrf, setCsrf] = useState<string>();
27
27
  const context = useContext(MainContext);
28
28
 
@@ -44,10 +44,12 @@ export const LogoutForm: FunctionComponent<PropsWithChildren> = ({ children }) =
44
44
  }
45
45
  };
46
46
 
47
- return <form method='post' action={context.service.getLogoutUrl()}>
47
+ return <form ref={ref} method='post' action={context.service.getLogoutUrl()}>
48
48
  {csrf ? <input name='_csrf' type='hidden' value={csrf} /> : null}
49
49
  <LogoutButton type='submit'>
50
50
  {children}
51
51
  </LogoutButton>
52
52
  </form>;
53
- };
53
+ });
54
+
55
+ LogoutForm.displayName = 'LogoutForm';
@@ -84,7 +84,7 @@ export const UserSettingsExtensions: FunctionComponent = () => {
84
84
  {
85
85
  extensions && extensions.length > 0
86
86
  ? <UserExtensionList extensions={extensions} loading={loading} canDelete />
87
- : <Typography variant='body1'>No extensions published under this namespace yet.</Typography>
87
+ : <Typography variant='body1'>You haven&apos;t published any extensions yet.</Typography>
88
88
  }
89
89
  </Box>
90
90
  </>;
@@ -105,6 +105,7 @@ export const UserSettingsTokens: FunctionComponent = () => {
105
105
  <Box alignItems='center' overflow='auto'>
106
106
  <Typography sx={{ fontWeight: 'bold', overflow: 'hidden', textOverflow: 'ellipsis' }}>{token.description}</Typography>
107
107
  <Typography variant='body2'>Created: <Timestamp value={token.createdTimestamp}/></Typography>
108
+ <Typography variant='body2'>Expires: {token.expiresTimestamp ? <Timestamp value={token.expiresTimestamp} isFutureTime={true} /> : 'never'}</Typography>
108
109
  <Typography variant='body2'>Accessed: {token.accessedTimestamp ? <Timestamp value={token.accessedTimestamp}/> : 'never'}</Typography>
109
110
  </Box>
110
111
  <Box display='flex' alignItems='center'>
@@ -73,7 +73,11 @@ export async function sendRequest<Res>(req: ServerAPIRequest, retry: boolean = t
73
73
  throw new Error(`Unsupported type ${req.headers['Accept']}`);
74
74
  }
75
75
  } else if (response.status === 429) {
76
- const retrySeconds = response.headers.get('X-Rate-Limit-Retry-After-Seconds') ?? '0';
76
+ // if the server uses the bucket4j starter config
77
+ const retryAfterSeconds = response.headers.get('X-Rate-Limit-Retry-After-Seconds');
78
+ // if the server uses the dynamic rate limiting config
79
+ const retryAfter = response.headers.get('Retry-After');
80
+ const retrySeconds = retryAfterSeconds ?? retryAfter ?? '0';
77
81
  const jitter = Math.floor(Math.random() * 100);
78
82
  const timeoutMillis = ((Number(retrySeconds) + 1) * 1000) + jitter;
79
83
  return new Promise<ServerAPIRequest>(resolve => setTimeout(resolve, timeoutMillis, req))
package/src/utils.ts CHANGED
@@ -52,34 +52,61 @@ export function toLocalTime(timestamp?: string): string | undefined {
52
52
  return new Intl.DateTimeFormat(undefined, options).format(date);
53
53
  }
54
54
 
55
- const msPerMinute = 60 * 1000;
55
+ const msPerSecond = 1000;
56
+ const msPerMinute = msPerSecond * 60;
56
57
  const msPerHour = msPerMinute * 60;
57
58
  const msPerDay = msPerHour * 24;
58
59
  const msPerMonth = msPerDay * 30.4;
59
60
  const msPerYear = msPerDay * 365;
60
- export function toRelativeTime(timestamp?: string): string | undefined {
61
+ export function toRelativeTime(timestamp?: string, isFutureTime: boolean = false): string | undefined {
61
62
  if (!timestamp) {
62
63
  return undefined;
63
64
  }
64
65
  const date = new Date(timestamp);
65
66
  const elapsed = Date.now() - date.getTime();
66
- if (elapsed < msPerMinute) {
67
- return 'now';
68
- } else if (elapsed < msPerHour) {
69
- const value = Math.round(elapsed / msPerMinute);
70
- return `${value} minute${value !== 1 ? 's' : ''} ago`;
71
- } else if (elapsed < msPerDay) {
72
- const value = Math.round(elapsed / msPerHour);
73
- return `${value} hour${value !== 1 ? 's' : ''} ago`;
74
- } else if (elapsed < msPerMonth) {
75
- const value = Math.round(elapsed / msPerDay);
76
- return `${value} day${value !== 1 ? 's' : ''} ago`;
77
- } else if (elapsed < msPerYear) {
78
- const value = Math.round(elapsed / msPerMonth);
79
- return `${value} month${value !== 1 ? 's' : ''} ago`;
67
+
68
+ if (isFutureTime) {
69
+ const remaining = -elapsed;
70
+ if (remaining < 0) {
71
+ return "now";
72
+ } else if (remaining < msPerMinute) {
73
+ const value = Math.round(remaining / msPerSecond);
74
+ return `in ${value} second${value !== 1 ? 's' : ''}`;
75
+ } else if (remaining < msPerHour) {
76
+ const value = Math.round(remaining / msPerMinute);
77
+ return `in ${value} minute${value !== 1 ? 's' : ''}`;
78
+ } else if (remaining < msPerDay) {
79
+ const value = Math.round(remaining / msPerHour);
80
+ return `in ${value} hour${value !== 1 ? 's' : ''}`;
81
+ } else if (remaining < msPerMonth) {
82
+ const value = Math.round(remaining / msPerDay);
83
+ return `in ${value} day${value !== 1 ? 's' : ''}`;
84
+ } else if (remaining < msPerYear) {
85
+ const value = Math.round(remaining / msPerMonth);
86
+ return `in ${value} month${value !== 1 ? 's' : ''}`;
87
+ } else {
88
+ const value = Math.round(remaining / msPerYear);
89
+ return `in ${value} year${value !== 1 ? 's' : ''}`;
90
+ }
80
91
  } else {
81
- const value = Math.round(elapsed / msPerYear);
82
- return `${value} year${value !== 1 ? 's' : ''} ago`;
92
+ if (elapsed < msPerMinute) {
93
+ return 'now';
94
+ } else if (elapsed < msPerHour) {
95
+ const value = Math.round(elapsed / msPerMinute);
96
+ return `${value} minute${value !== 1 ? 's' : ''} ago`;
97
+ } else if (elapsed < msPerDay) {
98
+ const value = Math.round(elapsed / msPerHour);
99
+ return `${value} hour${value !== 1 ? 's' : ''} ago`;
100
+ } else if (elapsed < msPerMonth) {
101
+ const value = Math.round(elapsed / msPerDay);
102
+ return `${value} day${value !== 1 ? 's' : ''} ago`;
103
+ } else if (elapsed < msPerYear) {
104
+ const value = Math.round(elapsed / msPerMonth);
105
+ return `${value} month${value !== 1 ? 's' : ''} ago`;
106
+ } else {
107
+ const value = Math.round(elapsed / msPerYear);
108
+ return `${value} year${value !== 1 ? 's' : ''} ago`;
109
+ }
83
110
  }
84
111
  }
85
112
 
@@ -213,7 +240,8 @@ export function getEngineDisplayName(engine: string): string {
213
240
  ['opensumi', 'OpenSumi'],
214
241
  ['nadako.vshaxe', 'nadako.vshaxe'],
215
242
  ['hbenl.vscode-test-explorer', 'hbenl.vscode-test-explorer'],
243
+ ['positron', 'Positron']
216
244
  ]);
217
245
 
218
246
  return engineDisplayNames.get(engine) ?? '';
219
- }
247
+ }