Merge remote-tracking branch 'origin/master' into entity-ref-link

This commit is contained in:
bnechyporenko
2022-09-29 08:36:10 +02:00
27 changed files with 363 additions and 233 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Making the description of the GitLab repoUrl owner field more clearer by focusing it refers to the GitLab namespace.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-user-settings': patch
---
Update installation instructions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-tech-insights': patch
---
making available the search for the last FACTS executed
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend': minor
---
Be less restrictive with unknown keys on query endpoint
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-github-issues': patch
'@backstage/plugin-github-pull-requests-board': patch
---
Properly filter on relations instead of the spec, when finding by owner
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-client': patch
---
Renamed argument in `validateEntity` from `location` to `locationRef`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-tech-insights-backend': patch
---
Modify router endpoint to handle singular and collections of request parameters similarly.
+2 -2
View File
@@ -68,7 +68,7 @@ export interface CatalogApi {
): Promise<void>;
validateEntity(
entity: Entity,
location: string,
locationRef: string,
options?: CatalogRequestOptions,
): Promise<ValidateEntityResponse>;
}
@@ -130,7 +130,7 @@ export class CatalogClient implements CatalogApi {
): Promise<void>;
validateEntity(
entity: Entity,
location: string,
locationRef: string,
options?: CatalogRequestOptions,
): Promise<ValidateEntityResponse>;
}
@@ -322,7 +322,7 @@ describe('CatalogClient', () => {
name: '',
},
},
'http://example.com',
'url:http://example.com',
),
).toMatchObject({
valid: false,
@@ -350,7 +350,7 @@ describe('CatalogClient', () => {
name: 'good',
},
},
'http://example.com',
'url:http://example.com',
),
).toMatchObject({
valid: true,
@@ -373,7 +373,7 @@ describe('CatalogClient', () => {
name: 'good',
},
},
'http://example.com',
'url:http://example.com',
),
).rejects.toThrow(/Request failed with 500 Error/);
});
+2 -2
View File
@@ -359,7 +359,7 @@ export class CatalogClient implements CatalogApi {
*/
async validateEntity(
entity: Entity,
location: string,
locationRef: string,
options?: CatalogRequestOptions,
): Promise<ValidateEntityResponse> {
const response = await this.fetchApi.fetch(
@@ -370,7 +370,7 @@ export class CatalogClient implements CatalogApi {
...(options?.token && { Authorization: `Bearer ${options?.token}` }),
},
method: 'POST',
body: JSON.stringify({ entity, location }),
body: JSON.stringify({ entity, location: locationRef }),
},
);
+2 -2
View File
@@ -405,11 +405,11 @@ export interface CatalogApi {
* Validate entity and its location.
*
* @param entity - Entity to validate
* @param location - URL location of the entity
* @param locationRef - Location ref in format `url:http://example.com/file`
*/
validateEntity(
entity: Entity,
location: string,
locationRef: string,
options?: CatalogRequestOptions,
): Promise<ValidateEntityResponse>;
}
@@ -13,13 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Entity } from '@backstage/catalog-model';
import { Entity, stringifyEntityRef } from '@backstage/catalog-model';
import { useApi } from '@backstage/core-plugin-api';
import {
catalogApiRef,
humanizeEntityRef,
useEntity,
} from '@backstage/plugin-catalog-react';
import { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react';
import { useCallback, useEffect, useState } from 'react';
const GITHUB_PROJECT_SLUG_ANNOTATION = 'github.com/project-slug';
@@ -48,7 +45,7 @@ export function useEntityGitHubRepositories() {
const entitiesList = await catalogApi.getEntities({
filter: {
kind: ['Component', 'API'],
'spec.owner': humanizeEntityRef(entity, { defaultKind: 'group' }),
'relations.ownedBy': stringifyEntityRef(entity),
},
});
@@ -13,12 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { stringifyEntityRef } from '@backstage/catalog-model';
import { useApi } from '@backstage/core-plugin-api';
import {
catalogApiRef,
humanizeEntityRef,
useEntity,
} from '@backstage/plugin-catalog-react';
import { catalogApiRef, useEntity } from '@backstage/plugin-catalog-react';
import { useCallback, useEffect, useState } from 'react';
import { getProjectNameFromEntity } from '../utils/functions';
@@ -29,9 +27,7 @@ export function useUserRepositories() {
const getRepositoriesNames = useCallback(async () => {
const entitiesList = await catalogApi.getEntities({
filter: {
'spec.owner': humanizeEntityRef(teamEntity, { defaultKind: 'group' }),
},
filter: { 'relations.ownedBy': stringifyEntityRef(teamEntity) },
});
const entitiesNames: string[] = entitiesList.items.map(componentEntity =>
@@ -66,8 +66,8 @@ export const GitlabRepoPicker = (props: {
</>
)}
<FormHelperText>
The organization, groups, subgroups, user, project (also known as
namespaces in gitlab), that this repo will belong to
GitLab namespace where this repository will belong to. It can be the
name of organization, group, subgroup, user, or the project.
</FormHelperText>
</FormControl>
</>
@@ -148,6 +148,25 @@ describe('createRouter', () => {
});
});
it('is less restrictive with unknown keys on query endpoint', async () => {
const queryString =
'term=test&%5BdocType%5D%5B0%5D=Service&filters%5BdocType%5D%5B0%5D=filter1&unknownKey1%5B2%5D=unknownValue1&unknownKey1%5B3%5D=unknownValue2&unknownKey2=unknownValue1&pageCursor';
const response = await request(app).get(`/query?${queryString}`);
const firstArg: Object = {
docType: ['Service'],
filters: { docType: ['filter1'] },
pageCursor: '',
term: 'test',
unknownKey1: ['unknownValue1', 'unknownValue2'],
unknownKey2: 'unknownValue1',
};
const secondArg = {
token: undefined,
};
expect(response.status).toEqual(200);
expect(mockSearchEngine.query).toHaveBeenCalledWith(firstArg, secondArg);
});
describe('search result filtering', () => {
beforeAll(async () => {
const logger = getVoidLogger();
+1 -1
View File
@@ -133,7 +133,7 @@ export async function createRouter(
req: express.Request,
res: express.Response<SearchResultSet | ErrorResponseBody>,
) => {
const parseResult = requestSchema.safeParse(req.query);
const parseResult = requestSchema.passthrough().safeParse(req.query);
if (!parseResult.success) {
throw new InputError(`Invalid query string: ${parseResult.error}`);
@@ -87,59 +87,94 @@ describe('Tech Insights router tests', () => {
app = express().use(router);
});
it('should be able to retrieve latest schemas', async () => {
await request(app).get('/fact-schemas').expect(200);
expect(latestSchemasMock).toHaveBeenCalled();
describe('/fact-schemas', () => {
it('should be able to retrieve latest schemas', async () => {
await request(app).get('/fact-schemas').expect(200);
expect(latestSchemasMock).toHaveBeenCalled();
});
});
it('should not contain check endpoints when checker not present', async () => {
await request(app).get('/checks').expect(404);
await request(app).post('/checks/a/a/a').expect(404);
describe('/checks', () => {
it('should not contain check endpoints when checker not present', async () => {
await request(app).get('/checks').expect(404);
await request(app).post('/checks/a/a/a').expect(404);
});
});
it('should be able to parse id request params for fact retrieval', async () => {
await request(app)
.get('/facts/latest')
.query({
entity: 'a:a/a',
ids: ['firstId', 'secondId'],
})
.expect(200);
expect(latestFactsByIdsMock).toHaveBeenCalledWith(
['firstId', 'secondId'],
'a:a/a',
);
describe('/facts/latest', () => {
it('should be able to parse id request params for fact retrieval', async () => {
await request(app)
.get('/facts/latest')
.query({
entity: 'a:a/a',
ids: ['firstId', 'secondId'],
})
.expect(200);
expect(latestFactsByIdsMock).toHaveBeenCalledWith(
['firstId', 'secondId'],
'a:a/a',
);
});
it('should handle singular ids in query params correctly', async () => {
await request(app)
.get('/facts/latest')
.query({
entity: 'a:a/a',
ids: ['secondId'],
})
.expect(200);
expect(latestFactsByIdsMock).toHaveBeenCalledWith(['secondId'], 'a:a/a');
});
});
it('should be able to parse datetime request params for fact retrieval', async () => {
await request(app)
.get('/facts/range')
.query({
entity: 'a:a/a',
ids: ['firstId', 'secondId'],
startDatetime: '2021-12-12T12:12:12',
endDatetime: '2022-11-11T11:11:11',
})
.expect(200);
expect(factsBetweenTimestampsByIdsMock).toHaveBeenCalledWith(
['firstId', 'secondId'],
'a:a/a',
DateTime.fromISO('2021-12-12T12:12:12.000+00:00'),
DateTime.fromISO('2022-11-11T11:11:11.000+00:00'),
);
});
describe('/facts/range', () => {
it('should be able to parse datetime request params for fact retrieval', async () => {
await request(app)
.get('/facts/range')
.query({
entity: 'a:a/a',
ids: ['firstId', 'secondId'],
startDatetime: '2021-12-12T12:12:12',
endDatetime: '2022-11-11T11:11:11',
})
.expect(200);
expect(factsBetweenTimestampsByIdsMock).toHaveBeenCalledWith(
['firstId', 'secondId'],
'a:a/a',
DateTime.fromISO('2021-12-12T12:12:12.000+00:00'),
DateTime.fromISO('2022-11-11T11:11:11.000+00:00'),
);
});
it('should respond gracefully on parsing errors', async () => {
await request(app)
.get('/facts/range')
.query({
entity: 'a:a/a',
ids: ['firstId', 'secondId'],
startDatetime: '2021-12-1222T12:12:12',
endDatetime: '2022-1122-11T11:11:11',
})
.expect(422);
expect(latestFactsByIdsMock).toHaveBeenCalledTimes(0);
it('should respond gracefully on parsing errors', async () => {
await request(app)
.get('/facts/range')
.query({
entity: 'a:a/a',
ids: ['firstId', 'secondId'],
startDatetime: '2021-12-1222T12:12:12',
endDatetime: '2022-1122-11T11:11:11',
})
.expect(422);
expect(latestFactsByIdsMock).toHaveBeenCalledTimes(0);
});
it('should handle singular ids in query params correctly', async () => {
await request(app)
.get('/facts/range')
.query({
entity: 'a:a/a',
ids: ['firstId'],
startDatetime: '2021-12-12T12:12:12',
endDatetime: '2022-11-11T11:11:11',
})
.expect(200);
expect(factsBetweenTimestampsByIdsMock).toHaveBeenCalledWith(
['firstId'],
'a:a/a',
DateTime.fromISO('2021-12-12T12:12:12.000+00:00'),
DateTime.fromISO('2022-11-11T11:11:11.000+00:00'),
);
});
});
});
@@ -132,7 +132,13 @@ export async function createRouter<
router.get('/facts/latest', async (req, res) => {
const { entity } = req.query;
const { namespace, kind, name } = parseEntityRef(entity as string);
const ids = req.query.ids as string[];
if (!req.query.ids) {
return res
.status(422)
.send({ error: 'Failed to parse ids from request' });
}
const ids = [req.query.ids].flat() as string[];
return res.send(
await techInsightsStore.getLatestFactsByIds(
ids,
@@ -148,7 +154,12 @@ export async function createRouter<
const { entity } = req.query;
const { namespace, kind, name } = parseEntityRef(entity as string);
const ids = req.query.ids as string[];
if (!req.query.ids) {
return res
.status(422)
.send({ error: 'Failed to parse ids from request' });
}
const ids = [req.query.ids].flat() as string[];
const startDatetime = DateTime.fromISO(req.query.startDatetime as string);
const endDatetime = DateTime.fromISO(req.query.endDatetime as string);
if (!startDatetime.isValid || !endDatetime.isValid) {
+15
View File
@@ -12,6 +12,7 @@ import { CheckResult } from '@backstage/plugin-tech-insights-common';
import { CompoundEntityRef } from '@backstage/catalog-model';
import { DiscoveryApi } from '@backstage/core-plugin-api';
import { IdentityApi } from '@backstage/core-plugin-api';
import { JsonValue } from '@backstage/types';
import { default as React_2 } from 'react';
import { RouteRef } from '@backstage/core-plugin-api';
@@ -51,6 +52,16 @@ export const EntityTechInsightsScorecardContent: (props: {
checksId?: string[] | undefined;
}) => JSX.Element;
// @public
export interface InsightFacts {
// (undocumented)
[factId: string]: {
timestamp: string;
version: string;
facts: Record<string, JsonValue>;
};
}
// @public
export const jsonRulesEngineCheckResultRenderer: CheckResultRenderer;
@@ -61,6 +72,8 @@ export interface TechInsightsApi {
// (undocumented)
getCheckResultRenderers: (types: string[]) => CheckResultRenderer[];
// (undocumented)
getFacts(entity: CompoundEntityRef, facts: string[]): Promise<InsightFacts>;
// (undocumented)
runBulkChecks(
entities: CompoundEntityRef[],
checks?: Check[],
@@ -87,6 +100,8 @@ export class TechInsightsClient implements TechInsightsApi {
// (undocumented)
getCheckResultRenderers(types: string[]): CheckResultRenderer[];
// (undocumented)
getFacts(entity: CompoundEntityRef, facts: string[]): Promise<InsightFacts>;
// (undocumented)
runBulkChecks(
entities: CompoundEntityRef[],
checks?: Check[],
+1
View File
@@ -38,6 +38,7 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.57",
"qs": "^6.9.4",
"react-use": "^17.2.4"
},
"peerDependencies": {
@@ -19,7 +19,7 @@ import {
CheckResult,
BulkCheckResponse,
} from '@backstage/plugin-tech-insights-common';
import { Check } from './types';
import { Check, InsightFacts } from './types';
import { CheckResultRenderer } from '../components/CheckResultRenderer';
import { CompoundEntityRef } from '@backstage/catalog-model';
@@ -48,4 +48,5 @@ export interface TechInsightsApi {
entities: CompoundEntityRef[],
checks?: Check[],
): Promise<BulkCheckResponse>;
getFacts(entity: CompoundEntityRef, facts: string[]): Promise<InsightFacts>;
}
@@ -19,15 +19,19 @@ import {
BulkCheckResponse,
CheckResult,
} from '@backstage/plugin-tech-insights-common';
import { Check } from './types';
import { Check, InsightFacts } from './types';
import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';
import { ResponseError } from '@backstage/errors';
import { CompoundEntityRef } from '@backstage/catalog-model';
import {
CompoundEntityRef,
stringifyEntityRef,
} from '@backstage/catalog-model';
import {
CheckResultRenderer,
jsonRulesEngineCheckResultRenderer,
} from '../components/CheckResultRenderer';
import qs from 'qs';
/** @public */
export class TechInsightsClient implements TechInsightsApi {
@@ -45,76 +49,75 @@ export class TechInsightsClient implements TechInsightsApi {
this.renderers = options.renderers;
}
async getFacts(
entity: CompoundEntityRef,
facts: string[],
): Promise<InsightFacts> {
const query = qs.stringify({
entity: stringifyEntityRef(entity),
ids: facts,
});
return await this.api<InsightFacts>(`/facts/latest?${query}`);
}
getCheckResultRenderers(types: string[]): CheckResultRenderer[] {
const renderers = this.renderers ?? [jsonRulesEngineCheckResultRenderer];
return renderers.filter(d => types.includes(d.type));
}
async getAllChecks(): Promise<Check[]> {
const url = await this.discoveryApi.getBaseUrl('tech-insights');
const { token } = await this.identityApi.getCredentials();
const response = await fetch(`${url}/checks`, {
headers: token
? {
Authorization: `Bearer ${token}`,
}
: undefined,
});
if (!response.ok) {
throw await ResponseError.fromResponse(response);
}
return await response.json();
return this.api('/checks');
}
async runChecks(
entityParams: CompoundEntityRef,
checks?: string[],
): Promise<CheckResult[]> {
const url = await this.discoveryApi.getBaseUrl('tech-insights');
const { token } = await this.identityApi.getCredentials();
const { namespace, kind, name } = entityParams;
const requestBody = { checks };
const response = await fetch(
`${url}/checks/run/${encodeURIComponent(namespace)}/${encodeURIComponent(
return this.api(
`/checks/run/${encodeURIComponent(namespace)}/${encodeURIComponent(
kind,
)}/${encodeURIComponent(name)}`,
{
method: 'POST',
body: JSON.stringify(requestBody),
headers: {
'Content-Type': 'application/json',
...(token && { Authorization: `Bearer ${token}` }),
},
},
);
if (!response.ok) {
throw await ResponseError.fromResponse(response);
}
return await response.json();
}
async runBulkChecks(
entities: CompoundEntityRef[],
checks?: Check[],
): Promise<BulkCheckResponse> {
const url = await this.discoveryApi.getBaseUrl('tech-insights');
const { token } = await this.identityApi.getCredentials();
const checkIds = checks ? checks.map(check => check.id) : [];
const requestBody = {
entities,
checks: checkIds.length > 0 ? checkIds : undefined,
};
const response = await fetch(`${url}/checks/run`, {
return this.api('/checks/run', {
method: 'POST',
body: JSON.stringify(requestBody),
headers: {
'Content-Type': 'application/json',
...(token && { Authorization: `Bearer ${token}` }),
},
});
if (!response.ok) {
throw await ResponseError.fromResponse(response);
}
private async api<T>(path: string, init?: RequestInit): Promise<T> {
const url = await this.discoveryApi.getBaseUrl('tech-insights');
const { token } = await this.identityApi.getCredentials();
const request = new Request(`${url}${path}`, init);
if (!request.headers.has('content-type')) {
request.headers.set('content-type', 'application/json');
}
return await response.json();
if (token && !request.headers.has('authorization')) {
request.headers.set('authorization', `Bearer ${token}`);
}
return fetch(request).then(async response => {
if (!response.ok) {
throw await ResponseError.fromResponse(response);
}
return response.json() as Promise<T>;
});
}
}
+15
View File
@@ -14,6 +14,8 @@
* limitations under the License.
*/
import { JsonValue } from '@backstage/types';
/**
* Represents a single check defined on the TechInsights backend.
*
@@ -26,3 +28,16 @@ export type Check = {
description: string;
factIds: string[];
};
/**
* Represents a Fact defined on the TechInsights backend.
*
* @public
*/
export interface InsightFacts {
[factId: string]: {
timestamp: string;
version: string;
facts: Record<string, JsonValue>;
};
}
+1 -1
View File
@@ -20,7 +20,7 @@ export {
} from './plugin';
export { techInsightsApiRef, TechInsightsClient } from './api';
export type { TechInsightsApi, Check } from './api';
export type { TechInsightsApi, Check, InsightFacts } from './api';
export { BooleanCheck } from './components/BooleanCheck';
export { jsonRulesEngineCheckResultRenderer } from './components/CheckResultRenderer';
export type { CheckResultRenderer } from './components/CheckResultRenderer';
+2 -2
View File
@@ -29,11 +29,11 @@ import { Settings as SidebarSettings } from '@backstage/plugin-user-settings';
Add the page to the App routing:
```ts
import { Router as SettingsRouter } from '@backstage/plugin-user-settings';
import { UserSettingsPage } from '@backstage/plugin-user-settings';
const AppRoutes = () => (
<Routes>
<Route path="/settings" element={<SettingsRouter />} />
<Route path="/settings" element={<UserSettingsPage />} />
</Routes>
);
```
+55 -55
View File
@@ -2977,126 +2977,126 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-android-arm-eabi@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-android-arm-eabi@npm:1.3.2"
"@swc/core-android-arm-eabi@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm-eabi@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.122
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@swc/core-android-arm64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-android-arm64@npm:1.3.2"
"@swc/core-android-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm64@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-darwin-arm64@npm:1.3.2"
"@swc/core-darwin-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-arm64@npm:1.3.3"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-darwin-x64@npm:1.3.2"
"@swc/core-darwin-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-x64@npm:1.3.3"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-freebsd-x64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-freebsd-x64@npm:1.3.2"
"@swc/core-freebsd-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-freebsd-x64@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.2"
"@swc/core-linux-arm-gnueabihf@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.2"
"@swc/core-linux-arm64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.3"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-arm64-musl@npm:1.3.2"
"@swc/core-linux-arm64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-musl@npm:1.3.3"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-x64-gnu@npm:1.3.2"
"@swc/core-linux-x64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-gnu@npm:1.3.3"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-x64-musl@npm:1.3.2"
"@swc/core-linux-x64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-musl@npm:1.3.3"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.2"
"@swc/core-win32-arm64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.2"
"@swc/core-win32-ia32-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-win32-x64-msvc@npm:1.3.2"
"@swc/core-win32-x64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-x64-msvc@npm:1.3.3"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.2.239":
version: 1.3.2
resolution: "@swc/core@npm:1.3.2"
version: 1.3.3
resolution: "@swc/core@npm:1.3.3"
dependencies:
"@swc/core-android-arm-eabi": 1.3.2
"@swc/core-android-arm64": 1.3.2
"@swc/core-darwin-arm64": 1.3.2
"@swc/core-darwin-x64": 1.3.2
"@swc/core-freebsd-x64": 1.3.2
"@swc/core-linux-arm-gnueabihf": 1.3.2
"@swc/core-linux-arm64-gnu": 1.3.2
"@swc/core-linux-arm64-musl": 1.3.2
"@swc/core-linux-x64-gnu": 1.3.2
"@swc/core-linux-x64-musl": 1.3.2
"@swc/core-win32-arm64-msvc": 1.3.2
"@swc/core-win32-ia32-msvc": 1.3.2
"@swc/core-win32-x64-msvc": 1.3.2
"@swc/core-android-arm-eabi": 1.3.3
"@swc/core-android-arm64": 1.3.3
"@swc/core-darwin-arm64": 1.3.3
"@swc/core-darwin-x64": 1.3.3
"@swc/core-freebsd-x64": 1.3.3
"@swc/core-linux-arm-gnueabihf": 1.3.3
"@swc/core-linux-arm64-gnu": 1.3.3
"@swc/core-linux-arm64-musl": 1.3.3
"@swc/core-linux-x64-gnu": 1.3.3
"@swc/core-linux-x64-musl": 1.3.3
"@swc/core-win32-arm64-msvc": 1.3.3
"@swc/core-win32-ia32-msvc": 1.3.3
"@swc/core-win32-x64-msvc": 1.3.3
dependenciesMeta:
"@swc/core-android-arm-eabi":
optional: true
@@ -3126,7 +3126,7 @@ __metadata:
optional: true
bin:
swcx: run_swcx.js
checksum: c2c83d0e6b4c56d65fb3723aa0be5e777823a6efe5b12702d4d44827a6c6dd8fac3c5dec7ff45222c7b22b4084bffc846f8497d697e61a1706817977256a65dc
checksum: bead8463cd7c11e2cd87d3835045e4a245e755409e912a40c575026a0475cc0010fa6ef48936ea5f7e62c84cdc63c21a83d61755813f2ba9b565d397fad7c5f5
languageName: node
linkType: hard
+62 -61
View File
@@ -7229,6 +7229,7 @@ __metadata:
"@types/node": ^16.11.26
cross-fetch: ^3.1.5
msw: ^0.47.0
qs: ^6.9.4
react-use: ^17.2.4
peerDependencies:
"@types/react": ^16.13.1 || ^17.0.0
@@ -12468,126 +12469,126 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-android-arm-eabi@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-android-arm-eabi@npm:1.3.2"
"@swc/core-android-arm-eabi@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm-eabi@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.122
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@swc/core-android-arm64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-android-arm64@npm:1.3.2"
"@swc/core-android-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm64@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-darwin-arm64@npm:1.3.2"
"@swc/core-darwin-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-arm64@npm:1.3.3"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-darwin-x64@npm:1.3.2"
"@swc/core-darwin-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-x64@npm:1.3.3"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-freebsd-x64@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-freebsd-x64@npm:1.3.2"
"@swc/core-freebsd-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-freebsd-x64@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.2"
"@swc/core-linux-arm-gnueabihf@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.2"
"@swc/core-linux-arm64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.3"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-arm64-musl@npm:1.3.2"
"@swc/core-linux-arm64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-musl@npm:1.3.3"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-x64-gnu@npm:1.3.2"
"@swc/core-linux-x64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-gnu@npm:1.3.3"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-linux-x64-musl@npm:1.3.2"
"@swc/core-linux-x64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-musl@npm:1.3.3"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.2"
"@swc/core-win32-arm64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.2"
"@swc/core-win32-ia32-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.3"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.2":
version: 1.3.2
resolution: "@swc/core-win32-x64-msvc@npm:1.3.2"
"@swc/core-win32-x64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-x64-msvc@npm:1.3.3"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.2.239":
version: 1.3.2
resolution: "@swc/core@npm:1.3.2"
version: 1.3.3
resolution: "@swc/core@npm:1.3.3"
dependencies:
"@swc/core-android-arm-eabi": 1.3.2
"@swc/core-android-arm64": 1.3.2
"@swc/core-darwin-arm64": 1.3.2
"@swc/core-darwin-x64": 1.3.2
"@swc/core-freebsd-x64": 1.3.2
"@swc/core-linux-arm-gnueabihf": 1.3.2
"@swc/core-linux-arm64-gnu": 1.3.2
"@swc/core-linux-arm64-musl": 1.3.2
"@swc/core-linux-x64-gnu": 1.3.2
"@swc/core-linux-x64-musl": 1.3.2
"@swc/core-win32-arm64-msvc": 1.3.2
"@swc/core-win32-ia32-msvc": 1.3.2
"@swc/core-win32-x64-msvc": 1.3.2
"@swc/core-android-arm-eabi": 1.3.3
"@swc/core-android-arm64": 1.3.3
"@swc/core-darwin-arm64": 1.3.3
"@swc/core-darwin-x64": 1.3.3
"@swc/core-freebsd-x64": 1.3.3
"@swc/core-linux-arm-gnueabihf": 1.3.3
"@swc/core-linux-arm64-gnu": 1.3.3
"@swc/core-linux-arm64-musl": 1.3.3
"@swc/core-linux-x64-gnu": 1.3.3
"@swc/core-linux-x64-musl": 1.3.3
"@swc/core-win32-arm64-msvc": 1.3.3
"@swc/core-win32-ia32-msvc": 1.3.3
"@swc/core-win32-x64-msvc": 1.3.3
dependenciesMeta:
"@swc/core-android-arm-eabi":
optional: true
@@ -12617,7 +12618,7 @@ __metadata:
optional: true
bin:
swcx: run_swcx.js
checksum: c2c83d0e6b4c56d65fb3723aa0be5e777823a6efe5b12702d4d44827a6c6dd8fac3c5dec7ff45222c7b22b4084bffc846f8497d697e61a1706817977256a65dc
checksum: bead8463cd7c11e2cd87d3835045e4a245e755409e912a40c575026a0475cc0010fa6ef48936ea5f7e62c84cdc63c21a83d61755813f2ba9b565d397fad7c5f5
languageName: node
linkType: hard
@@ -14598,12 +14599,12 @@ __metadata:
linkType: hard
"@types/tar@npm:^6.1.1":
version: 6.1.2
resolution: "@types/tar@npm:6.1.2"
version: 6.1.3
resolution: "@types/tar@npm:6.1.3"
dependencies:
"@types/node": "*"
minipass: ^3.3.5
checksum: 57e625e2db29e3b9c6d8d06774758cf6e4caa2096f4144f7c0fdb2760e1150146d2a86f0eb80b4d2e1ba0ecf07f06303775054c4f4d22bea5d51e8b54cdd0fd8
checksum: 3a221f74adfcef8555b9c4cc951907dfd567630744ffe5211da1b44caf2a4c3b02297b73c9fb02d171e93a7a7c74fb15c1826e3f0438f0e5e8f4c790db59ddcf
languageName: node
linkType: hard
@@ -23969,11 +23970,11 @@ __metadata:
linkType: hard
"graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0":
version: 5.10.1
resolution: "graphql-ws@npm:5.10.1"
version: 5.11.2
resolution: "graphql-ws@npm:5.11.2"
peerDependencies:
graphql: ">=0.11 <=16"
checksum: ad8eb8a6823a32a7bd9bc6ec73a0b244f503e50318ef5db1312f1d09c5f0b0e4505ad75b08f06e4c40c6935cf5170444b19347b7b83222b4e1af01401418cb91
checksum: 2c94b06c1919217dc15a0556474673de7aabcc7179a2982a87ded51856c105e4f4ee6d54a6c135a0a7f55d85a5997a6a15cff514959258885814adec6a61ff00
languageName: node
linkType: hard