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.
- package/lib/components/error-dialog.d.ts.map +1 -1
- package/lib/components/error-dialog.js +3 -5
- package/lib/components/error-dialog.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-content.d.ts +3 -3
- package/lib/components/scan-admin/scan-card/scan-card-content.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-content.js +146 -169
- package/lib/components/scan-admin/scan-card/scan-card-content.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-header.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-header.js +17 -5
- package/lib/components/scan-admin/scan-card/scan-card-header.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card.js +1 -1
- package/lib/components/scan-admin/scan-card/scan-card.js.map +1 -1
- package/lib/components/timestamp.d.ts +1 -0
- package/lib/components/timestamp.d.ts.map +1 -1
- package/lib/components/timestamp.js +3 -2
- package/lib/components/timestamp.js.map +1 -1
- package/lib/default/menu-content.d.ts +1 -4
- package/lib/default/menu-content.d.ts.map +1 -1
- package/lib/default/menu-content.js +8 -16
- package/lib/default/menu-content.js.map +1 -1
- package/lib/extension-registry-service.js +1 -1
- package/lib/extension-registry-service.js.map +1 -1
- package/lib/extension-registry-types.d.ts +2 -0
- package/lib/extension-registry-types.d.ts.map +1 -1
- package/lib/extension-registry-types.js.map +1 -1
- package/lib/hooks/scan-admin/use-query-params-state.d.ts +15 -0
- package/lib/hooks/scan-admin/use-query-params-state.d.ts.map +1 -0
- package/lib/hooks/scan-admin/use-query-params-state.js +44 -0
- package/lib/hooks/scan-admin/use-query-params-state.js.map +1 -0
- package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/admin-dashboard.js +2 -2
- package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
- package/lib/pages/admin-dashboard/extension-admin.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/extension-admin.js +4 -3
- package/lib/pages/admin-dashboard/extension-admin.js.map +1 -1
- package/lib/pages/admin-dashboard/namespace-input.d.ts +1 -0
- package/lib/pages/admin-dashboard/namespace-input.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/namespace-input.js +2 -2
- package/lib/pages/admin-dashboard/namespace-input.js.map +1 -1
- package/lib/pages/extension-detail/extension-detail-overview.js +1 -1
- package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -1
- package/lib/pages/extension-detail/extension-review-dialog.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-review-dialog.js +2 -11
- package/lib/pages/extension-detail/extension-review-dialog.js.map +1 -1
- package/lib/pages/user/avatar.d.ts.map +1 -1
- package/lib/pages/user/avatar.js +9 -9
- package/lib/pages/user/avatar.js.map +1 -1
- package/lib/pages/user/logout.d.ts +3 -2
- package/lib/pages/user/logout.d.ts.map +1 -1
- package/lib/pages/user/logout.js +5 -4
- package/lib/pages/user/logout.js.map +1 -1
- package/lib/pages/user/user-settings-extensions.js +1 -1
- package/lib/pages/user/user-settings-extensions.js.map +1 -1
- package/lib/pages/user/user-settings-tokens.d.ts.map +1 -1
- package/lib/pages/user/user-settings-tokens.js +1 -1
- package/lib/pages/user/user-settings-tokens.js.map +1 -1
- package/lib/server-request.d.ts.map +1 -1
- package/lib/server-request.js +5 -1
- package/lib/server-request.js.map +1 -1
- package/lib/utils.d.ts +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +56 -22
- package/lib/utils.js.map +1 -1
- package/package.json +5 -4
- package/src/components/error-dialog.tsx +3 -5
- package/src/components/scan-admin/scan-card/scan-card-content.tsx +380 -408
- package/src/components/scan-admin/scan-card/scan-card-header.tsx +35 -6
- package/src/components/scan-admin/scan-card/scan-card.tsx +2 -2
- package/src/components/timestamp.tsx +3 -1
- package/src/default/menu-content.tsx +70 -96
- package/src/extension-registry-service.ts +1 -1
- package/src/extension-registry-types.ts +2 -0
- package/src/hooks/scan-admin/use-query-params-state.ts +55 -0
- package/src/pages/admin-dashboard/admin-dashboard.tsx +2 -1
- package/src/pages/admin-dashboard/extension-admin.tsx +4 -2
- package/src/pages/admin-dashboard/namespace-input.tsx +3 -1
- package/src/pages/extension-detail/extension-detail-overview.tsx +1 -1
- package/src/pages/extension-detail/extension-review-dialog.tsx +2 -12
- package/src/pages/user/avatar.tsx +30 -35
- package/src/pages/user/logout.tsx +6 -4
- package/src/pages/user/user-settings-extensions.tsx +1 -1
- package/src/pages/user/user-settings-tokens.tsx +1 -0
- package/src/server-request.ts +5 -1
- package/src/utils.ts +47 -19
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
* ****************************************************************************** */
|
|
10
10
|
|
|
11
|
-
import {
|
|
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
|
|
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
|
|
87
|
+
: <Typography variant='body1'>You haven'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'>
|
package/src/server-request.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
+
}
|