Added tests to plugin vault & vault-backend

Signed-off-by: ivgo <ivgo@spreadgroup.com>
This commit is contained in:
ivgo
2022-05-11 12:45:52 +02:00
parent 7c310a5bc2
commit 477061a096
14 changed files with 1086 additions and 189 deletions
+1
View File
@@ -35,6 +35,7 @@
},
"dependencies": {
"@backstage/backend-common": "^0.13.2",
"@backstage/backend-test-utils": "^0.1.23",
"@backstage/config": "^1.0.0",
"@types/compression": "^1.7.2",
"@types/express": "*",
@@ -0,0 +1,67 @@
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ConfigReader } from '@backstage/config';
import { getVaultConfig } from './config';
describe('GetVaultConfig', () => {
it('fails by missing keys', () => {
expect(() => getVaultConfig(new ConfigReader({}))).toThrow();
expect(() =>
getVaultConfig(
new ConfigReader({
vault: {},
}),
),
).toThrow();
});
it('loads default params', () => {
const config = new ConfigReader({
vault: {
sourceUrl: 'http://www.example.com',
token: '123',
},
});
const vaultConfig = getVaultConfig(config);
expect(vaultConfig).toStrictEqual({
sourceUrl: 'http://www.example.com',
token: '123',
kvVersion: 2,
secretEngine: 'secrets',
});
});
it('loads custom params', () => {
const config = new ConfigReader({
vault: {
sourceUrl: 'http://www.example.com',
token: '123',
kvVersion: 1,
secretEngine: 'test',
},
});
const vaultConfig = getVaultConfig(config);
expect(vaultConfig).toStrictEqual({
sourceUrl: 'http://www.example.com',
token: '123',
kvVersion: 1,
secretEngine: 'test',
});
});
});
@@ -0,0 +1,60 @@
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Config } from '@backstage/config';
/**
* The configuration needed for the vault-backend plugin
*
* @public
*/
export interface VaultConfig {
/**
* The sourceUrl for your Vault instance.
*/
sourceUrl: string;
/**
* The token used by Backstage to access Vault.
*/
token: string;
/**
* The secret engine name where in vault. Defaults to `secrets`.
*/
secretEngine: string;
/**
* The version of the K/V API. Defaults to `2`.
*/
kvVersion: number;
}
/**
* Extract the Vault config from a config object
*
* @public
*
* @param config - The config object to extract from
*/
export function getVaultConfig(config: Config): VaultConfig {
return {
sourceUrl: config.getString('vault.sourceUrl'),
token: config.getString('vault.token'),
kvVersion: config.getOptionalNumber('vault.kvVersion') ?? 2,
secretEngine: config.getOptionalString('vault.secretEngine') ?? 'secrets',
};
}
+32
View File
@@ -0,0 +1,32 @@
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export * from './config';
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Config } from '@backstage/config';
import { Logger } from 'winston';
import express, { Router } from 'express';
@@ -58,8 +59,6 @@ export class VaultBuilder {
const router = this.buildRouter(this.vaultClient);
await this.renewToken(this.vaultClient);
return {
router: router,
};
@@ -97,6 +96,11 @@ export class VaultBuilder {
const router = Router();
router.use(express.json());
router.get('/health', (_, response) => {
this.env.logger.info('PONG!');
response.send({ status: 'ok' });
});
router.get('/v1/secrets', async (req, res) => {
const path = req.query.path;
if (typeof path !== 'string') {
@@ -0,0 +1,52 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { getVoidLogger } from '@backstage/backend-common';
import { ConfigReader } from '@backstage/config';
import express from 'express';
import request from 'supertest';
import { createRouter } from './router';
describe('createRouter', () => {
let app: express.Express;
beforeAll(async () => {
const router = await createRouter({
logger: getVoidLogger(),
config: new ConfigReader({
vault: {
sourceUrl: 'https://www.example.com',
token: '1234567890',
},
}),
});
app = express().use(router);
});
beforeEach(() => {
jest.resetAllMocks();
});
describe('GET /health', () => {
it('returns ok', async () => {
const response = await request(app).get('/health');
expect(response.status).toEqual(200);
expect(response.body).toEqual({ status: 'ok' });
});
});
});
@@ -0,0 +1,105 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { Secret, VaultClient, VaultSecretList } from './vaultApi';
import { ConfigReader } from '@backstage/config';
describe('VaultApi', () => {
const server = setupServer();
setupRequestMockHandlers(server);
const mockBaseUrl = 'https://api-vault.com';
const config = new ConfigReader({
vault: {
sourceUrl: mockBaseUrl,
token: '1234567890',
},
});
const mockListResult: VaultSecretList = {
data: {
keys: ['secret::one', 'secret::two'],
},
};
const mockListResultEmpty: VaultSecretList = {
data: {
keys: [],
},
};
const mockSecretsResult: Secret[] = [
{
name: 'secret::one',
editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`,
showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`,
},
{
name: 'secret::two',
editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`,
showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`,
},
];
const setupHandlers = () => {
server.use(
rest.get(
`${mockBaseUrl}/v1/secrets/metadata/test/success`,
(_, res, ctx) => {
return res(ctx.json(mockListResult));
},
),
rest.get(
`${mockBaseUrl}/v1/secrets/metadata/test/error`,
(_, res, ctx) => {
return res(ctx.json(mockListResultEmpty));
},
),
rest.post(`${mockBaseUrl}/v1/auth/token/renew-self`, (_, res, ctx) => {
return res(ctx.json({ auth: { client_token: '0987654321' } }));
}),
);
};
it('should return secrets', async () => {
setupHandlers();
const api = new VaultClient({ config });
const secrets = await api.listSecrets('test/success');
expect(secrets).toEqual(mockSecretsResult);
});
it('should return empty secret list', async () => {
setupHandlers();
const api = new VaultClient({ config });
const secrets = await api.listSecrets('test/error');
expect(secrets).toEqual([]);
});
it('should return success token renew', async () => {
setupHandlers();
const api = new VaultClient({ config });
const apiRenew = await api.renewToken();
expect(apiRenew).toBeTruthy();
});
it('should render frontend url', () => {
const api = new VaultClient({ config });
const url = api.getFrontendSecretsUrl();
expect(url).toEqual(`${mockBaseUrl}/ui/vault/secrets/secrets`);
});
});
+17 -21
View File
@@ -16,20 +16,21 @@
import { Config } from '@backstage/config';
import fetch from 'cross-fetch';
import { getVaultConfig, VaultConfig } from '../config';
type VaultSecretList = {
export type VaultSecretList = {
data: {
keys: string[];
};
};
type Secret = {
export type Secret = {
name: string;
showUrl: string;
editUrl: string;
};
type RenewTokenResponse = {
export type RenewTokenResponse = {
auth: {
client_token: string;
};
@@ -42,17 +43,10 @@ export interface VaultApi {
}
export class VaultClient implements VaultApi {
private readonly vaultUrl: string;
private vaultToken: string;
private readonly kvVersion: number;
private readonly secretEngineName: string;
private vaultConfig: VaultConfig;
constructor({ config }: { config: Config }) {
this.vaultUrl = config.getString('vault.sourceUrl');
this.vaultToken = config.getString('vault.token');
this.kvVersion = config.getOptionalNumber('vault.kvVersion') ?? 2;
this.secretEngineName =
config.getOptionalString('vault.secretEngine') ?? 'secrets';
this.vaultConfig = getVaultConfig(config);
}
private async callApi<T>(
@@ -61,12 +55,14 @@ export class VaultClient implements VaultApi {
method: string = 'GET',
): Promise<T | undefined> {
const response = await fetch(
`${this.vaultUrl}/${path}?${new URLSearchParams(query).toString()}`,
`${this.vaultConfig.sourceUrl}/${path}?${new URLSearchParams(
query,
).toString()}`,
{
method,
headers: {
Accept: 'application/json',
'X-Vault-Token': this.vaultToken,
'X-Vault-Token': this.vaultConfig.token,
},
},
);
@@ -82,14 +78,14 @@ export class VaultClient implements VaultApi {
}
getFrontendSecretsUrl(): string {
return `${this.vaultUrl}/ui/vault/secrets/${this.secretEngineName}`;
return `${this.vaultConfig.sourceUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}`;
}
async listSecrets(secretPath: string): Promise<Secret[]> {
const listUrl =
this.kvVersion === 2
? `v1/${this.secretEngineName}/metadata/${secretPath}`
: `v1/${this.secretEngineName}/${secretPath}`;
this.vaultConfig.kvVersion === 2
? `v1/${this.vaultConfig.secretEngine}/metadata/${secretPath}`
: `v1/${this.vaultConfig.secretEngine}/${secretPath}`;
const result = await this.callApi<VaultSecretList>(listUrl, { list: true });
if (!result) {
return [];
@@ -105,8 +101,8 @@ export class VaultClient implements VaultApi {
} else {
secrets.push({
name: secret,
editUrl: `${this.vaultUrl}/ui/vault/secrets/${this.secretEngineName}/edit/${secretPath}/${secret}`,
showUrl: `${this.vaultUrl}/ui/vault/secrets/${this.secretEngineName}/show/${secretPath}/${secret}`,
editUrl: `${this.vaultConfig.sourceUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}/edit/${secretPath}/${secret}`,
showUrl: `${this.vaultConfig.sourceUrl}/ui/vault/secrets/${this.vaultConfig.secretEngine}/show/${secretPath}/${secret}`,
});
}
}),
@@ -125,7 +121,7 @@ export class VaultClient implements VaultApi {
return false;
}
this.vaultToken = result.auth.client_token;
this.vaultConfig.token = result.auth.client_token;
return true;
}
}
+1
View File
@@ -34,6 +34,7 @@
"postpack": "backstage-cli package postpack"
},
"dependencies": {
"@backstage/backend-test-utils": "^0.1.23",
"@backstage/catalog-model": "^1.0.1",
"@backstage/core-components": "^0.9.3",
"@backstage/core-plugin-api": "^1.0.1",
+77
View File
@@ -0,0 +1,77 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { setupRequestMockHandlers } from '@backstage/backend-test-utils';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
import { Secret, VaultClient } from './api';
import { UrlPatternDiscovery } from '@backstage/core-app-api';
describe('api', () => {
const server = setupServer();
setupRequestMockHandlers(server);
const mockBaseUrl = 'https://api-vault.com/api/vault';
const discoveryApi = UrlPatternDiscovery.compile(mockBaseUrl);
const mockSecretsResult: Secret[] = [
{
name: 'secret::one',
editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`,
showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`,
},
{
name: 'secret::two',
editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`,
showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`,
},
];
const setupHandlers = () => {
server.use(
rest.get(`${mockBaseUrl}/v1/secrets`, (req, res, ctx) => {
const path = req.url.searchParams.get('path');
if (path === 'test/success') {
return res(ctx.json(mockSecretsResult));
} else if (path === 'test/error') {
return res(ctx.json([]));
}
return res(ctx.status(400));
}),
);
};
it('should return secrets', async () => {
setupHandlers();
const api = new VaultClient({ discoveryApi });
const secrets = await api.listSecrets('test/success');
expect(secrets).toEqual(mockSecretsResult);
});
it('should return empty secret list', async () => {
setupHandlers();
const api = new VaultClient({ discoveryApi });
expect(await api.listSecrets('test/error')).toEqual([]);
expect(await api.listSecrets('')).toEqual([]);
});
it('should return no secrets', async () => {
setupHandlers();
const api = new VaultClient({ discoveryApi });
const secrets = await api.listSecrets('');
expect(secrets).toEqual([]);
});
});
@@ -0,0 +1,52 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { setupServer } from 'msw/node';
import { setupRequestMockHandlers } from '@backstage/test-utils';
import { ComponentEntity } from '@backstage/catalog-model';
import { render } from '@testing-library/react';
import { EntityVaultCard } from './EntityVaultCard';
import { EntityProvider } from '@backstage/plugin-catalog-react';
describe('EntityVautCard', () => {
const server = setupServer();
setupRequestMockHandlers(server);
const entityAnnotationMissing: ComponentEntity = {
apiVersion: 'backstage.io/v1alpha1',
kind: 'Component',
metadata: {
name: 'test',
description: 'This is the description',
},
spec: {
lifecycle: 'production',
owner: 'owner',
type: 'service',
},
};
it('should render missing entity annotation', async () => {
const rendered = render(
<EntityProvider entity={entityAnnotationMissing}>
<EntityVaultCard />
</EntityProvider>,
);
expect(
rendered.getByText(/Add the annotation to your component YAML/),
).toBeInTheDocument();
});
});
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { useEntity } from '@backstage/plugin-catalog-react';
import { makeStyles, Typography } from '@material-ui/core';
@@ -0,0 +1,127 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { setupServer } from 'msw/node';
import {
setupRequestMockHandlers,
TestApiRegistry,
} from '@backstage/test-utils';
import { ComponentEntity } from '@backstage/catalog-model';
import { renderInTestApp } from '@backstage/test-utils';
import { EntityVaultTable } from './EntityVaultTable';
import { ApiProvider, UrlPatternDiscovery } from '@backstage/core-app-api';
import { Secret, vaultApiRef, VaultClient } from '../../api';
import { rest } from 'msw';
describe('EntityVautTable', () => {
const server = setupServer();
setupRequestMockHandlers(server);
let apis: TestApiRegistry;
const mockBaseUrl = 'https://api-vault.com/api/vault';
const discoveryApi = UrlPatternDiscovery.compile(mockBaseUrl);
const entityOk: ComponentEntity = {
apiVersion: 'backstage.io/v1alpha1',
kind: 'Component',
metadata: {
name: 'test',
description: 'This is the description',
annotations: {
'vault.io/secrets-path': 'test/success',
},
},
spec: {
lifecycle: 'production',
owner: 'owner',
type: 'service',
},
};
const entityNotOk: ComponentEntity = {
apiVersion: 'backstage.io/v1alpha1',
kind: 'Component',
metadata: {
name: 'test',
description: 'This is the description',
annotations: {
'vault.io/secrets-path': 'test/error',
},
},
spec: {
lifecycle: 'production',
owner: 'owner',
type: 'service',
},
};
const mockSecretsResult: Secret[] = [
{
name: 'secret::one',
editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::one`,
showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::one`,
},
{
name: 'secret::two',
editUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/edit/test/success/secret::two`,
showUrl: `${mockBaseUrl}/ui/vault/secrets/secrets/show/test/success/secret::two`,
},
];
const setupHandlers = () => {
server.use(
rest.get(`${mockBaseUrl}/v1/secrets`, (req, res, ctx) => {
const path = req.url.searchParams.get('path');
if (path === 'test/success') {
return res(ctx.json(mockSecretsResult));
} else if (path === 'test/error') {
return res(ctx.json([]));
}
return res(ctx.status(400));
}),
);
};
beforeEach(() => {
apis = TestApiRegistry.from([
vaultApiRef,
new VaultClient({ discoveryApi }),
]);
});
it('should render secrets', async () => {
setupHandlers();
const rendered = await renderInTestApp(
<ApiProvider apis={apis}>
<EntityVaultTable entity={entityOk} />
</ApiProvider>,
);
expect(await rendered.findAllByText(/secret::one/)).toBeDefined();
expect(await rendered.findAllByText(/secret::two/)).toBeDefined();
});
it('should render no secrets found', async () => {
setupHandlers();
const rendered = await renderInTestApp(
<ApiProvider apis={apis}>
<EntityVaultTable entity={entityNotOk} />
</ApiProvider>,
);
expect(rendered.getByText(/No secrets found/)).toBeInTheDocument();
});
});
+488 -166
View File
@@ -1467,21 +1467,103 @@
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
"@backstage/catalog-client@^1.0.2":
version "1.0.2"
resolved "https://registry.npmjs.org/@backstage/catalog-client/-/catalog-client-1.0.2.tgz#8450bb09e6e65114053538d1ab855bc8bee09531"
integrity sha512-3983OrSPZQyTHRi78Ot2708h8iKd3bcvG0PSPmtbmQDkgxUUAXJ1w276THNoGA/Vt84NsNBO0Srfm0b4PmegAQ==
"@backstage/app-defaults@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/app-defaults/-/app-defaults-1.0.1.tgz#adb7a1f974463fb9fde18dd4038d80ca4839ce4e"
integrity sha512-+RKNsADsd2s5XFiFxkfxHf/OxMwY3X7avYFhk+Y9Ho/mPMbMHvlXcW9NAr4h9jC8uy9TNLB5XGTqWwe4HPU0xA==
dependencies:
"@backstage/catalog-model" "^1.0.2"
"@backstage/core-app-api" "^1.0.1"
"@backstage/core-components" "^0.9.3"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/plugin-permission-react" "^0.4.0"
"@backstage/theme" "^0.2.15"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.9.1"
react-router-dom "6.0.0-beta.0"
"@backstage/backend-common@^0.13.2":
version "0.13.2"
resolved "https://registry.npmjs.org/@backstage/backend-common/-/backend-common-0.13.2.tgz#c3619dee671936f306f49eae9c8bbde436cbc40d"
integrity sha512-FblxaHCw29N4ME1uHb+513EXcbn30vA224+6cj8159Wje2Rcv8EdMFtuf2awCNcYgoIdDD/R1wwBPeRmZhtERw==
dependencies:
"@backstage/cli-common" "^0.1.8"
"@backstage/config" "^1.0.0"
"@backstage/config-loader" "^1.1.0"
"@backstage/errors" "^1.0.0"
"@backstage/integration" "^1.1.0"
"@backstage/types" "^1.0.0"
"@google-cloud/storage" "^5.8.0"
"@keyv/redis" "^2.2.3"
"@manypkg/get-packages" "^1.1.3"
"@octokit/rest" "^18.5.3"
"@types/cors" "^2.8.6"
"@types/dockerode" "^3.3.0"
"@types/express" "^4.17.6"
"@types/luxon" "^2.0.4"
"@types/webpack-env" "^1.15.2"
archiver "^5.0.2"
aws-sdk "^2.840.0"
compression "^1.7.4"
concat-stream "^2.0.0"
cors "^2.8.5"
dockerode "^3.3.1"
express "^4.17.1"
express-promise-router "^4.1.0"
fs-extra "10.0.1"
git-url-parse "^11.6.0"
helmet "^5.0.2"
isomorphic-git "^1.8.0"
jose "^1.27.1"
keyv "^4.0.3"
keyv-memcache "^1.2.5"
knex "^1.0.2"
lodash "^4.17.21"
logform "^2.3.2"
luxon "^2.0.2"
minimatch "^5.0.0"
minimist "^1.2.5"
morgan "^1.10.0"
node-abort-controller "^3.0.1"
node-fetch "^2.6.7"
raw-body "^2.4.1"
selfsigned "^2.0.0"
stoppable "^1.1.0"
tar "^6.1.2"
unzipper "^0.10.11"
winston "^3.2.1"
yn "^4.0.0"
"@backstage/backend-test-utils@^0.1.23":
version "0.1.23"
resolved "https://registry.npmjs.org/@backstage/backend-test-utils/-/backend-test-utils-0.1.23.tgz#30f003efa1e5fbdd039a945637eaea089cf06f8f"
integrity sha512-tr5/GGumq0z97aQ1lOna9veqwgmVcFZgjFLuApfdeim+QkI0E8PvBLGaq5H3Vo6xw6Z21UKX0SeGE81QUi6pZw==
dependencies:
"@backstage/backend-common" "^0.13.2"
"@backstage/cli" "^0.17.0"
"@backstage/config" "^1.0.0"
better-sqlite3 "^7.5.0"
knex "^1.0.2"
msw "^0.35.0"
mysql2 "^2.2.5"
pg "^8.3.0"
testcontainers "^8.1.2"
uuid "^8.0.0"
"@backstage/catalog-client@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/catalog-client/-/catalog-client-1.0.1.tgz#f19888635825b3104b0e293409d924fb5e21feb9"
integrity sha512-2JUEqtR3v361JM6JDjTt8k/tlZd27RB/ZQ2Vwp5seJf4QYXfR9s5AM4M35l/A5vosDKhGrxMAq3t2s4gcH9vVg==
dependencies:
"@backstage/catalog-model" "^1.0.1"
"@backstage/errors" "^1.0.0"
cross-fetch "^3.1.5"
"@backstage/catalog-model@^1.0.0", "@backstage/catalog-model@^1.0.2":
version "1.0.2"
resolved "https://registry.npmjs.org/@backstage/catalog-model/-/catalog-model-1.0.2.tgz#50328068632b452fabed67e53fb7f83ead08f9df"
integrity sha512-0GCTW0XqFoHRiZKRXiru5wVMm0hoPiFAEyBiudWlYAFXtVEoVnrzJ+pa9F96zqtFgcGHmgSybgzjmVqiGUMSlw==
"@backstage/catalog-model@^1.0.0", "@backstage/catalog-model@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/catalog-model/-/catalog-model-1.0.1.tgz#16acb8cf52083dd038da7d9fae38811fd88d55e5"
integrity sha512-VxKQ+WzcsxAWtwWyeGw04vTefkmwxi6XweXSNRhNddXAVqsAbDcCYBUc9jylu0bYVXXWYJkEl8kiwyawUloPPQ==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/config" "^1.0.0"
"@backstage/errors" "^1.0.0"
"@backstage/types" "^1.0.0"
ajv "^8.10.0"
@@ -1489,13 +1571,159 @@
lodash "^4.17.21"
uuid "^8.0.0"
"@backstage/core-components@^0.9.0", "@backstage/core-components@^0.9.4":
version "0.9.4"
resolved "https://registry.npmjs.org/@backstage/core-components/-/core-components-0.9.4.tgz#47e9a305f768a951e0cb0ffa9c1e3c141d06b223"
integrity sha512-zg297mSw1BIc/BENrSClmgMx4kp0so0cK+lQ4FVa22+Dg5PDc2/NXWId2qEN2zD2XV/nm9RFBQM02gd6M6q3jQ==
"@backstage/cli-common@^0.1.8":
version "0.1.8"
resolved "https://registry.npmjs.org/@backstage/cli-common/-/cli-common-0.1.8.tgz#a20777b0448cada100b3967592925dc15fa25be5"
integrity sha512-OSFUhEaPMbdGvB130GRlJ+tZvvIRYGZK10sIcOGuXg3cl/K+sVAWh1XuewBLa+YI6wspAsReNiMR/+YbH8q2/A==
"@backstage/cli@^0.17.0":
version "0.17.0"
resolved "https://registry.npmjs.org/@backstage/cli/-/cli-0.17.0.tgz#d9fa2fd14ba8984950398f9e7b018d2970b5ce26"
integrity sha512-DWM5GRnvkehoNvPZWgmbl36DfzcDsUMYCT8Mh0ThiyllnS7VwU1EYBtvUR6IubxVZIVy6RIdwzCXnVczp4kAOQ==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/core-plugin-api" "^1.0.2"
"@backstage/cli-common" "^0.1.8"
"@backstage/config" "^1.0.0"
"@backstage/config-loader" "^1.1.0"
"@backstage/errors" "^1.0.0"
"@backstage/release-manifests" "^0.0.2"
"@backstage/types" "^1.0.0"
"@hot-loader/react-dom-v16" "npm:@hot-loader/react-dom@^16.0.2"
"@hot-loader/react-dom-v17" "npm:@hot-loader/react-dom@^17.0.2"
"@manypkg/get-packages" "^1.1.3"
"@octokit/request" "^5.4.12"
"@rollup/plugin-commonjs" "^21.0.1"
"@rollup/plugin-json" "^4.1.0"
"@rollup/plugin-node-resolve" "^13.0.0"
"@rollup/plugin-yaml" "^3.1.0"
"@spotify/eslint-config-base" "^13.0.0"
"@spotify/eslint-config-react" "^13.0.0"
"@spotify/eslint-config-typescript" "^13.0.0"
"@sucrase/jest-plugin" "^2.1.1"
"@sucrase/webpack-loader" "^2.0.0"
"@svgr/plugin-jsx" "6.2.x"
"@svgr/plugin-svgo" "6.2.x"
"@svgr/rollup" "6.2.x"
"@svgr/webpack" "6.2.x"
"@types/webpack-env" "^1.15.2"
"@typescript-eslint/eslint-plugin" "^5.9.0"
"@typescript-eslint/parser" "^5.9.0"
"@yarnpkg/lockfile" "^1.1.0"
bfj "^7.0.2"
buffer "^6.0.3"
chalk "^4.0.0"
chokidar "^3.3.1"
commander "^6.1.0"
css-loader "^6.5.1"
diff "^5.0.0"
esbuild "^0.14.10"
esbuild-loader "^2.18.0"
eslint "^8.6.0"
eslint-config-prettier "^8.3.0"
eslint-formatter-friendly "^7.0.0"
eslint-plugin-deprecation "^1.3.2"
eslint-plugin-import "^2.25.4"
eslint-plugin-jest "^26.1.2"
eslint-plugin-jsx-a11y "^6.5.1"
eslint-plugin-monorepo "^0.3.2"
eslint-plugin-react "^7.28.0"
eslint-plugin-react-hooks "^4.3.0"
eslint-webpack-plugin "^3.1.1"
express "^4.17.1"
fork-ts-checker-webpack-plugin "^7.0.0-alpha.8"
fs-extra "10.0.1"
glob "^7.1.7"
handlebars "^4.7.3"
html-webpack-plugin "^5.3.1"
inquirer "^8.2.0"
jest "^27.5.1"
jest-css-modules "^2.1.0"
jest-runtime "^27.5.1"
jest-transform-yaml "^1.0.0"
json-schema "^0.4.0"
lodash "^4.17.21"
mini-css-extract-plugin "^2.4.2"
minimatch "5.0.1"
node-libs-browser "^2.2.1"
npm-packlist "^5.0.0"
ora "^5.3.0"
postcss "^8.1.0"
process "^0.11.10"
react-dev-utils "^12.0.0-next.60"
react-hot-loader "^4.13.0"
recursive-readdir "^2.2.2"
replace-in-file "^6.0.0"
rollup "^2.60.2"
rollup-plugin-dts "^4.0.1"
rollup-plugin-esbuild "^4.7.2"
rollup-plugin-postcss "^4.0.0"
rollup-pluginutils "^2.8.2"
run-script-webpack-plugin "^0.0.11"
semver "^7.3.2"
style-loader "^3.3.1"
sucrase "^3.20.2"
tar "^6.1.2"
terser-webpack-plugin "^5.1.3"
util "^0.12.3"
webpack "^5.66.0"
webpack-dev-server "^4.7.3"
webpack-node-externals "^3.0.0"
yaml "^1.10.0"
yml-loader "^2.1.0"
yn "^4.0.0"
zod "^3.11.6"
"@backstage/config-loader@^1.1.0":
version "1.1.0"
resolved "https://registry.npmjs.org/@backstage/config-loader/-/config-loader-1.1.0.tgz#477127d84705ed9a63451563c31ecb4592e58dbc"
integrity sha512-pZJz54pOSfZ5MC8vhDVrq1yM4p/T2O1iQNW5br5iv/e1JjHWpGt00yeZOxsHpsOeAfTl2JRpooUQQxpJQ47uUQ==
dependencies:
"@backstage/cli-common" "^0.1.8"
"@backstage/config" "^1.0.0"
"@backstage/errors" "^1.0.0"
"@backstage/types" "^1.0.0"
"@types/json-schema" "^7.0.6"
ajv "^8.10.0"
chokidar "^3.5.2"
fs-extra "10.0.1"
json-schema "^0.4.0"
json-schema-merge-allof "^0.8.1"
json-schema-traverse "^1.0.0"
node-fetch "^2.6.7"
typescript-json-schema "^0.53.0"
yaml "^1.9.2"
yup "^0.32.9"
"@backstage/config@^1.0.0":
version "1.0.0"
resolved "https://registry.npmjs.org/@backstage/config/-/config-1.0.0.tgz#7af40758ae3f8e1d9ef3a07f063a1fd9cf5c364e"
integrity sha512-0M8UPHjCev3i/Puz/DGV7hor/vujx27bpWip5UTjachzBorI5xB0CBV1GfZ1UZMm5R5py7RJ+lKdmSJVFdw9IA==
dependencies:
"@backstage/types" "^1.0.0"
lodash "^4.17.21"
"@backstage/core-app-api@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/core-app-api/-/core-app-api-1.0.1.tgz#56743fb135588f522e97e7e88a848c9a8f351406"
integrity sha512-DLsEOpmvUA+LRbhlHiYWGq360lm/WcD2uk27HXWmhEcOnvY/xUItR/aFkHF9QRuGLsU3DQkJb4/ts6/vPjuvvQ==
dependencies:
"@backstage/config" "^1.0.0"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/types" "^1.0.0"
"@backstage/version-bridge" "^1.0.1"
"@types/prop-types" "^15.7.3"
prop-types "^15.7.2"
react-router-dom "6.0.0-beta.0"
react-use "^17.2.4"
zen-observable "^0.8.15"
zod "^3.11.6"
"@backstage/core-components@^0.9.0", "@backstage/core-components@^0.9.3":
version "0.9.3"
resolved "https://registry.npmjs.org/@backstage/core-components/-/core-components-0.9.3.tgz#79d8bcea06281da492730fe8eb14aa18877b27c4"
integrity sha512-cZr6pT3Q7whzdKvB/M3P4NH2/J4+GHKLvQsnRNoel+DE6PmenyAPDslSRf62Lu17+n6qZNHPMfySK1rePnf0Kg==
dependencies:
"@backstage/config" "^1.0.0"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/errors" "^1.0.0"
"@backstage/theme" "^0.2.15"
"@material-table/core" "^3.1.0"
@@ -1517,7 +1745,7 @@
pluralize "^8.0.0"
prop-types "^15.7.2"
qs "^6.9.4"
rc-progress "3.3.2"
rc-progress "3.2.4"
react-helmet "6.1.0"
react-hook-form "^7.12.2"
react-markdown "^8.0.0"
@@ -1533,12 +1761,12 @@
zen-observable "^0.8.15"
zod "^3.11.6"
"@backstage/core-plugin-api@^1.0.0", "@backstage/core-plugin-api@^1.0.2":
version "1.0.2"
resolved "https://registry.npmjs.org/@backstage/core-plugin-api/-/core-plugin-api-1.0.2.tgz#6ebf52c20df33ee3c128c98937d0d349a805d3eb"
integrity sha512-82bFp3lTW4o4Bske+zLXSzHueLP/mdUPWx6J/6YUfn88Aq93gb4VrdUJ04fXXDNWPqaBzfpynaIbme9QRZqfHQ==
"@backstage/core-plugin-api@^1.0.0", "@backstage/core-plugin-api@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/core-plugin-api/-/core-plugin-api-1.0.1.tgz#2ad19da6765c40db353c6ae5bf4255dab1f47be2"
integrity sha512-x7xlSDqi7SuVgbq9NSdzciDEThIfytVmtbZasY/TtHH3upLre/5AFb8SiPEFiQJX6QBmPWeKG/I+LW+91cEMig==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/config" "^1.0.0"
"@backstage/types" "^1.0.0"
"@backstage/version-bridge" "^1.0.1"
history "^5.0.0"
@@ -1546,28 +1774,52 @@
react-router-dom "6.0.0-beta.0"
zen-observable "^0.8.15"
"@backstage/integration-react@^1.0.0":
version "1.1.0"
resolved "https://registry.npmjs.org/@backstage/integration-react/-/integration-react-1.1.0.tgz#9d58838e85647540d2de69e40099533260ba2622"
integrity sha512-eNUYHOkz0daMlnsSMxK6ypDptu1pvlxgq1spJUK8zfU9TbhGs4321Vh+59RKyTmWt9quVksdB3lCboV4NVWx4Q==
"@backstage/dev-utils@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/dev-utils/-/dev-utils-1.0.1.tgz#42c8c8cd2521c7908ad4f60769709a56ae173a2c"
integrity sha512-f3AYmGkqgKLUgWlAX9vKLjl7C86UGQlsJvYACCR4sU35TOfaL9L8uJ/Tr9jxkGT6warpaTWzpa/pyg6FGFgIOw==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/core-components" "^0.9.4"
"@backstage/core-plugin-api" "^1.0.2"
"@backstage/integration" "^1.2.0"
"@backstage/app-defaults" "^1.0.1"
"@backstage/catalog-model" "^1.0.1"
"@backstage/core-app-api" "^1.0.1"
"@backstage/core-components" "^0.9.3"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/integration-react" "^1.0.1"
"@backstage/plugin-catalog-react" "^1.0.1"
"@backstage/test-utils" "^1.0.1"
"@backstage/theme" "^0.2.15"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.9.1"
"@testing-library/jest-dom" "^5.10.1"
"@testing-library/react" "^12.1.3"
"@testing-library/user-event" "^14.0.0"
react-hot-loader "^4.13.0"
react-router "6.0.0-beta.0"
react-router-dom "6.0.0-beta.0"
react-use "^17.2.4"
zen-observable "^0.8.15"
"@backstage/integration-react@^1.0.0", "@backstage/integration-react@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/integration-react/-/integration-react-1.0.1.tgz#47f56df1fdc9c30ab43be4471667769989b2192e"
integrity sha512-+ED8g3cJFjSrbeldhgjAaPfjygRM+iDPYKwpQGLRGT1u7gyyDVtCwrg1WFRihbvG0PFbv6Nf0+la/V2Y42whpg==
dependencies:
"@backstage/config" "^1.0.0"
"@backstage/core-components" "^0.9.3"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/integration" "^1.1.0"
"@backstage/theme" "^0.2.15"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.9.1"
"@material-ui/lab" "4.0.0-alpha.57"
react-use "^17.2.4"
"@backstage/integration@^1.2.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@backstage/integration/-/integration-1.2.0.tgz#89a3fc95c079c541ca6a5cafc613ebefc0463687"
integrity sha512-ZUfaMUUEUlmS2JE4M0Z4fXe269Z+hRGooptgILC21hgXW20hjVrhb7Q6ynH78md0ItcEuHVs2mnCztc7LS8erg==
"@backstage/integration@^1.1.0":
version "1.1.0"
resolved "https://registry.npmjs.org/@backstage/integration/-/integration-1.1.0.tgz#4784fe96cca5af0e9bf6ca98ee357338c43f797d"
integrity sha512-2yf1ioFsbivHf/PtQy66WT7pa9Mzazc44OORDO4EFEsJT4noIZHff2NZfHvg/5dFFQPPPY/esyEf83jhsOE7Wg==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/errors" "^1.0.0"
"@backstage/config" "^1.0.0"
"@octokit/auth-app" "^3.4.0"
"@octokit/rest" "^18.5.3"
cross-fetch "^3.1.5"
@@ -1575,28 +1827,28 @@
lodash "^4.17.21"
luxon "^2.0.2"
"@backstage/plugin-catalog-common@^1.0.2":
version "1.0.2"
resolved "https://registry.npmjs.org/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.0.2.tgz#04f45745c0f30a1193d25c2dcf3eef01a97ab6be"
integrity sha512-5YCSZ9b2pMKJxHTJMPMo5qC3KeO4aCJCSV9uez7dHMIxkpEV+YThx3JAjrdj6KMMF0EGK4817fd6tipGUdfwDA==
"@backstage/plugin-catalog-common@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.0.1.tgz#97d70bfb6083e576e2163af19fd096e9f97f7b88"
integrity sha512-zPf8OGSjH+ZftMnjBxTgwLtgapnO1L7fzulLQ2RRaWrUcXGk8N3szQBDcqwxfBFiWSIX1G4vvRi/BGXFMUMlnw==
dependencies:
"@backstage/plugin-permission-common" "^0.6.1"
"@backstage/search-common" "^0.3.4"
"@backstage/plugin-permission-common" "^0.6.0"
"@backstage/search-common" "^0.3.3"
"@backstage/plugin-catalog-react@^1.0.0", "@backstage/plugin-catalog-react@^1.1.0":
version "1.1.0"
resolved "https://registry.npmjs.org/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.1.0.tgz#aa2c479e12fa8cfa5409b563e0a7e7dc665204e5"
integrity sha512-jOVDIcwTwdTPA7wuAMZ/1UHipeo9EMOmSJ0mtGllFP8/ldjxe0tNNjaYb4UazCQgCdUUSuk4ccwZ/EU5GtUfYg==
"@backstage/plugin-catalog-react@^1.0.0", "@backstage/plugin-catalog-react@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.0.1.tgz#647cb19bff2885bb4e1e289bb1b751a7e9a36477"
integrity sha512-oDHYsU6C9/h0X1qJV8YNSQjGpL51ZdgXLuxKFYmsQv3Bw/dbxUNfoaEd1/+rQLbGW/EVZj1ma9HyF3u32wNSiA==
dependencies:
"@backstage/catalog-client" "^1.0.2"
"@backstage/catalog-model" "^1.0.2"
"@backstage/core-components" "^0.9.4"
"@backstage/core-plugin-api" "^1.0.2"
"@backstage/catalog-client" "^1.0.1"
"@backstage/catalog-model" "^1.0.1"
"@backstage/core-components" "^0.9.3"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/errors" "^1.0.0"
"@backstage/integration" "^1.2.0"
"@backstage/plugin-catalog-common" "^1.0.2"
"@backstage/plugin-permission-common" "^0.6.1"
"@backstage/plugin-permission-react" "^0.4.1"
"@backstage/integration" "^1.1.0"
"@backstage/plugin-catalog-common" "^1.0.1"
"@backstage/plugin-permission-common" "^0.6.0"
"@backstage/plugin-permission-react" "^0.4.0"
"@backstage/theme" "^0.2.15"
"@backstage/types" "^1.0.0"
"@backstage/version-bridge" "^1.0.1"
@@ -1612,17 +1864,17 @@
yaml "^1.10.0"
zen-observable "^0.8.15"
"@backstage/plugin-home@^0.4.19", "@backstage/plugin-home@^0.4.21":
version "0.4.21"
resolved "https://registry.npmjs.org/@backstage/plugin-home/-/plugin-home-0.4.21.tgz#798058d9aeead651ff830641cb0222b6bafb5542"
integrity sha512-mdaxdR+76ZNYJiK1NtAGjnfQQKPIsZ2tVfyskWaZov1C6DxTGsguQ5oL2kiDiFj4rF7FgmtwfIxKZqWfivbR5Q==
"@backstage/plugin-home@^0.4.19", "@backstage/plugin-home@^0.4.20":
version "0.4.20"
resolved "https://registry.npmjs.org/@backstage/plugin-home/-/plugin-home-0.4.20.tgz#ba66cad0c7c275a3add56fc09d3c550b4aa23d5d"
integrity sha512-OhOd69fZwbOMifb8+DkqJx72q8q7GB6btLho2JdGNqKv+i4hWmnodwNp6ibs32guPY6alqj7tsjUleOuVFASPA==
dependencies:
"@backstage/catalog-model" "^1.0.2"
"@backstage/config" "^1.0.1"
"@backstage/core-components" "^0.9.4"
"@backstage/core-plugin-api" "^1.0.2"
"@backstage/plugin-catalog-react" "^1.1.0"
"@backstage/plugin-stack-overflow" "^0.1.1"
"@backstage/catalog-model" "^1.0.1"
"@backstage/config" "^1.0.0"
"@backstage/core-components" "^0.9.3"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/plugin-catalog-react" "^1.0.1"
"@backstage/plugin-stack-overflow" "^0.1.0"
"@backstage/theme" "^0.2.15"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.9.1"
@@ -1631,48 +1883,48 @@
react-router "6.0.0-beta.0"
react-use "^17.2.4"
"@backstage/plugin-permission-common@^0.6.1":
version "0.6.1"
resolved "https://registry.npmjs.org/@backstage/plugin-permission-common/-/plugin-permission-common-0.6.1.tgz#fd63ba10b90896e6f8627c569a5f28127821523f"
integrity sha512-abAZEuzhjSuybQ+EjAl6bonDCBRVcNlcAhp/uia+znDyUzLRaOE1rh9y9lyKQco5UCnxXCeR0FzRv592lBmYVw==
"@backstage/plugin-permission-common@^0.6.0":
version "0.6.0"
resolved "https://registry.npmjs.org/@backstage/plugin-permission-common/-/plugin-permission-common-0.6.0.tgz#85464aa10d1f271252775e5eb30ecfd88e2af152"
integrity sha512-wx5TUDFilRqmMJP8TxjR5GuulFFOPHNwoK6eNMuz5ESzLzPhiJDovqaXjqpxsdCVGNb2VJOUlND3SzbwjQ65aA==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/config" "^1.0.0"
"@backstage/errors" "^1.0.0"
cross-fetch "^3.1.5"
uuid "^8.0.0"
zod "^3.11.6"
"@backstage/plugin-permission-react@^0.4.1":
version "0.4.1"
resolved "https://registry.npmjs.org/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.1.tgz#18740913a8df06629a32b9c8679caa451c3989ac"
integrity sha512-yCuKGXP1TNJrphdkvBBLf+Jf7KYtW4Z9uV4M7vtBsK9qR2U3YU9T24iRDJ3hhBIr7dj66h4JCMhyrsDqYjMCTQ==
"@backstage/plugin-permission-react@^0.4.0":
version "0.4.0"
resolved "https://registry.npmjs.org/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.0.tgz#3135b8bbd0e303afafeeae7b9a0d4de7d9e1198c"
integrity sha512-bqyBWHKQKT7Lsk4Z3Y6m2FkczN/0I7cRHiBAqv8go8etYk+tEsud9Mk7lRMX/e4+RKg3i4bLcUHerWdEeNqagw==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/core-plugin-api" "^1.0.2"
"@backstage/plugin-permission-common" "^0.6.1"
"@backstage/config" "^1.0.0"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/plugin-permission-common" "^0.6.0"
cross-fetch "^3.1.5"
react-router "6.0.0-beta.0"
react-use "^17.2.4"
swr "^1.1.2"
"@backstage/plugin-search-common@0.3.4", "@backstage/plugin-search-common@^0.3.4":
version "0.3.4"
resolved "https://registry.npmjs.org/@backstage/plugin-search-common/-/plugin-search-common-0.3.4.tgz#04e59618b1bef4c52045b3103c87a570e260cdb3"
integrity sha512-ft3+H8zQevm1QduQBLmP7awO8XHzh4Jlq0V6BdFrZftgyw0MbMz/YVtRwtHL++6qp91xDtQnwntZ5/3B95Hbug==
"@backstage/plugin-search-common@0.3.3", "@backstage/plugin-search-common@^0.3.3":
version "0.3.3"
resolved "https://registry.npmjs.org/@backstage/plugin-search-common/-/plugin-search-common-0.3.3.tgz#e9251172163731aef61626b3e1ec40504a38cb11"
integrity sha512-CARcpoMFEQJdpe+Rm9m/mPhMOsWM0V+zncIHOLuKlzsMrQRTcwmcFoPqBdtlfdT9wEJTu1bci2ccsDsnZiSrhA==
dependencies:
"@backstage/plugin-permission-common" "^0.6.1"
"@backstage/plugin-permission-common" "^0.6.0"
"@backstage/types" "^1.0.0"
"@backstage/plugin-stack-overflow@^0.1.1":
version "0.1.1"
resolved "https://registry.npmjs.org/@backstage/plugin-stack-overflow/-/plugin-stack-overflow-0.1.1.tgz#238ae82cb5f5732eb343b4f87aa6fc973bb613d2"
integrity sha512-CUSQfrymZw90gWB6SbtRKt/SwgpoAxlClSeEMuDkC1JI9QjyLBNkXwYfesTpuQyBF3J6tyn/02q6r9tKKiObgQ==
"@backstage/plugin-stack-overflow@^0.1.0":
version "0.1.0"
resolved "https://registry.npmjs.org/@backstage/plugin-stack-overflow/-/plugin-stack-overflow-0.1.0.tgz#5f5ee8b30d684b7c71f746fe923c16875a62d621"
integrity sha512-ti0eEwkiu+cmihIISiEA5tqQil6gISyy34flQyxL0wukLNrKAOYCq+lgrN+N/MqJijXoy/FugWhX24+PKsocLQ==
dependencies:
"@backstage/config" "^1.0.1"
"@backstage/core-components" "^0.9.4"
"@backstage/core-plugin-api" "^1.0.2"
"@backstage/plugin-home" "^0.4.21"
"@backstage/plugin-search-common" "^0.3.4"
"@backstage/config" "^1.0.0"
"@backstage/core-components" "^0.9.3"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/plugin-home" "^0.4.20"
"@backstage/plugin-search-common" "^0.3.3"
"@backstage/theme" "^0.2.15"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.9.1"
@@ -1682,12 +1934,41 @@
qs "^6.9.4"
react-use "^17.2.4"
"@backstage/search-common@^0.3.4":
version "0.3.4"
resolved "https://registry.npmjs.org/@backstage/search-common/-/search-common-0.3.4.tgz#94235e6bd930c738b41ccc3f5b78ddfad3a105cc"
integrity sha512-lANcEeA++EaZ6lAPuuN7I9DrP4Ij1d/Mb9wyrY01DKnw0wUVKj8wdGwB2KR/LWdxg7dY8BIHU49bUqSTMKl2+w==
"@backstage/release-manifests@^0.0.2":
version "0.0.2"
resolved "https://registry.npmjs.org/@backstage/release-manifests/-/release-manifests-0.0.2.tgz#42faca60dae0c89cf6bc6fbf1b34e1e8cb2a564b"
integrity sha512-gBzcxIlDM3k0SXhVfyKQDxRvwS2hdXPy1qQU+wcVijImGez0CIIw1iD1+ksCYpWKb8uGZFovLj4fEvm5fA942g==
dependencies:
"@backstage/plugin-search-common" "0.3.4"
cross-fetch "^3.1.5"
"@backstage/search-common@^0.3.3":
version "0.3.3"
resolved "https://registry.npmjs.org/@backstage/search-common/-/search-common-0.3.3.tgz#756af22187283b754aefdc436c651231054be269"
integrity sha512-DtWd1Nrpvm2fkJRkw6bW8WeB6cFOvxsJ//o/fcoMsD5NCnaFtE1kFlCEt6QuUl6chAg6d+cX0rU+DJjSIC1rgQ==
dependencies:
"@backstage/plugin-search-common" "0.3.3"
"@backstage/test-utils@^1.0.1":
version "1.0.1"
resolved "https://registry.npmjs.org/@backstage/test-utils/-/test-utils-1.0.1.tgz#ce8c6e75bcd424b527d4f903ee6f276a8d1855b7"
integrity sha512-KXG0VXqR+Q/GIJz0Ycasr5ZBOtUxAjA1prbY2L4NovaZNyCC/emIaOw/zqhvhhX6XdHV4pP5sQBbAhg4Ceoc6g==
dependencies:
"@backstage/config" "^1.0.0"
"@backstage/core-app-api" "^1.0.1"
"@backstage/core-plugin-api" "^1.0.1"
"@backstage/plugin-permission-common" "^0.6.0"
"@backstage/plugin-permission-react" "^0.4.0"
"@backstage/theme" "^0.2.15"
"@backstage/types" "^1.0.0"
"@material-ui/core" "^4.12.2"
"@material-ui/icons" "^4.11.2"
"@testing-library/jest-dom" "^5.10.1"
"@testing-library/react" "^12.1.3"
"@testing-library/user-event" "^14.0.0"
cross-fetch "^3.1.5"
react-router "6.0.0-beta.0"
react-router-dom "6.0.0-beta.0"
zen-observable "^0.8.15"
"@balena/dockerignore@^1.0.2":
version "1.0.2"
@@ -6906,68 +7187,35 @@
semver "^7.3.5"
tsutils "^3.21.0"
"@typescript-eslint/typescript-estree@5.27.0":
version "5.27.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.0.tgz#7965f5b553c634c5354a47dcce0b40b94611e995"
integrity sha512-QywPMFvgZ+MHSLRofLI7BDL+UczFFHyj0vF5ibeChDAJgdTV8k4xgEwF0geFhVlPc1p8r70eYewzpo6ps+9LJQ==
"@typescript-eslint/typescript-estree@5.23.0":
version "5.23.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.23.0.tgz#dca5f10a0a85226db0796e8ad86addc9aee52065"
integrity sha512-xE9e0lrHhI647SlGMl+m+3E3CKPF1wzvvOEWnuE3CCjjT7UiRnDGJxmAcVKJIlFgK6DY9RB98eLr1OPigPEOGg==
dependencies:
"@typescript-eslint/types" "5.27.0"
"@typescript-eslint/visitor-keys" "5.27.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/typescript-estree@5.9.0":
version "5.9.0"
resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz#0e5c6f03f982931abbfbc3c1b9df5fbf92a3490f"
integrity sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==
dependencies:
"@typescript-eslint/types" "5.9.0"
"@typescript-eslint/visitor-keys" "5.9.0"
"@typescript-eslint/types" "5.23.0"
"@typescript-eslint/visitor-keys" "5.23.0"
debug "^4.3.2"
globby "^11.0.4"
is-glob "^4.0.3"
semver "^7.3.5"
tsutils "^3.21.0"
"@typescript-eslint/utils@5.27.0":
version "5.27.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.27.0.tgz#d0021cbf686467a6a9499bd0589e19665f9f7e71"
integrity sha512-nZvCrkIJppym7cIbP3pOwIkAefXOmfGPnCM0LQfzNaKxJHI6VjI8NC662uoiPlaf5f6ymkTy9C3NQXev2mdXmA==
"@typescript-eslint/utils@5.23.0", "@typescript-eslint/utils@^5.10.0":
version "5.23.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.23.0.tgz#4691c3d1b414da2c53d8943310df36ab1c50648a"
integrity sha512-dbgaKN21drqpkbbedGMNPCtRPZo1IOUr5EI9Jrrh99r5UW5Q0dz46RKXeSBoPV+56R6dFKpbrdhgUNSJsDDRZA==
dependencies:
"@types/json-schema" "^7.0.9"
"@typescript-eslint/scope-manager" "5.27.0"
"@typescript-eslint/types" "5.27.0"
"@typescript-eslint/typescript-estree" "5.27.0"
"@typescript-eslint/scope-manager" "5.23.0"
"@typescript-eslint/types" "5.23.0"
"@typescript-eslint/typescript-estree" "5.23.0"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
"@typescript-eslint/utils@^5.10.0":
version "5.20.0"
resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.20.0.tgz#b8e959ed11eca1b2d5414e12417fd94cae3517a5"
integrity sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==
dependencies:
"@types/json-schema" "^7.0.9"
"@typescript-eslint/scope-manager" "5.20.0"
"@typescript-eslint/types" "5.20.0"
"@typescript-eslint/typescript-estree" "5.20.0"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
"@typescript-eslint/visitor-keys@5.20.0":
version "5.20.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz#70236b5c6b67fbaf8b2f58bf3414b76c1e826c2a"
integrity sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg==
dependencies:
"@typescript-eslint/types" "5.20.0"
eslint-visitor-keys "^3.0.0"
"@typescript-eslint/visitor-keys@5.27.0":
version "5.27.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.0.tgz#97aa9a5d2f3df8215e6d3b77f9d214a24db269bd"
integrity sha512-46cYrteA2MrIAjv9ai44OQDUoCZyHeGIc4lsjCUX2WT6r4C+kidz1bNiR4017wHOPUythYeH+Sc7/cFP97KEAA==
"@typescript-eslint/visitor-keys@5.23.0":
version "5.23.0"
resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.23.0.tgz#057c60a7ca64667a39f991473059377a8067c87b"
integrity sha512-Vd4mFNchU62sJB8pX19ZSPog05B0Y0CE2UxAZPT5k4iqhRYjPnqyY3woMxCd0++t9OTqkgjST+1ydLBi7e2Fvg==
dependencies:
"@typescript-eslint/types" "5.27.0"
eslint-visitor-keys "^3.3.0"
@@ -7003,10 +7251,29 @@
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
"@webassemblyjs/helper-api-error@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
"@webassemblyjs/helper-buffer@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
"@webassemblyjs/helper-numbers@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==
dependencies:
"@webassemblyjs/floating-point-hex-parser" "1.11.1"
"@webassemblyjs/helper-api-error" "1.11.1"
"@xtuc/long" "4.2.2"
"@webassemblyjs/helper-wasm-bytecode@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
"@webassemblyjs/helper-wasm-section@1.11.1":
@@ -7051,6 +7318,28 @@
"@webassemblyjs/wasm-opt" "1.11.1"
"@webassemblyjs/wasm-parser" "1.11.1"
"@webassemblyjs/wast-printer" "1.11.1"
"@webassemblyjs/wasm-gen@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==
dependencies:
"@webassemblyjs/ast" "1.11.1"
"@webassemblyjs/helper-wasm-bytecode" "1.11.1"
"@webassemblyjs/ieee754" "1.11.1"
"@webassemblyjs/leb128" "1.11.1"
"@webassemblyjs/utf8" "1.11.1"
"@webassemblyjs/wasm-opt@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==
dependencies:
"@webassemblyjs/ast" "1.11.1"
"@webassemblyjs/helper-buffer" "1.11.1"
"@webassemblyjs/wasm-gen" "1.11.1"
"@webassemblyjs/wasm-parser" "1.11.1"
"@webassemblyjs/wasm-parser@1.11.1":
version "1.11.1"
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
@@ -7830,9 +8119,9 @@ aws-sdk-mock@^5.2.1:
traverse "^0.6.6"
aws-sdk@^2.1122.0, aws-sdk@^2.840.0, aws-sdk@^2.948.0:
version "2.1148.0"
resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1148.0.tgz#028211e724aee5118223eb5fa65495eaae4b5083"
integrity sha512-FUYAyveKmS5eqIiGQgrGVsLZwwtI+K6S6Gz8oJf56pgypZCo9dV+cXO4aaS+vN0+LSmGh6dSKc6G8h8FYASIJg==
version "2.1132.0"
resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1132.0.tgz#0cb615e97db5a5133914ba0f2bdc8ea10eef4069"
integrity sha512-NPDesfTrNx8UMQ5VuosQNlFFFhswJ8cGVcVltZBXKVl1kW0BCp52XQBySSruIznaRX7vG6Ir2+nox0NdL05qBQ==
dependencies:
buffer "4.9.2"
events "1.1.1"
@@ -7956,9 +8245,33 @@ babel-plugin-polyfill-corejs2@^0.3.0:
babel-plugin-polyfill-corejs3@^0.5.0:
version "0.5.2"
resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72"
integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==
dependencies:
"@babel/helper-define-polyfill-provider" "^0.3.1"
core-js-compat "^3.21.0"
babel-plugin-polyfill-regenerator@^0.3.0:
version "0.3.1"
resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990"
integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==
dependencies:
"@babel/helper-define-polyfill-provider" "^0.3.1"
babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
version "7.0.0-beta.0"
resolved "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
babel-polyfill@^6.26.0:
version "6.26.0"
resolved "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=
dependencies:
babel-runtime "^6.26.0"
core-js "^2.5.0"
regenerator-runtime "^0.10.5"
babel-preset-current-node-syntax@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
@@ -11073,9 +11386,9 @@ dot-prop@^6.0.1:
is-obj "^2.0.0"
dotenv@^16.0.0:
version "16.0.0"
resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411"
integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==
version "16.0.1"
resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d"
integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==
drange@^1.0.2:
version "1.1.1"
@@ -14311,9 +14624,9 @@ ioredis@^5.0.4:
standard-as-callback "^2.1.0"
ip@^1.1.5:
version "1.1.6"
resolved "https://registry.npmjs.org/ip/-/ip-1.1.6.tgz#5a651a37644586e18b6ba3b48ca122bf56495f67"
integrity sha512-/dAvCivFs/VexXAtiAoMIqyhkhStNC9CPD0h1noonimOgB1xrCkexF2c5CjlqQ72GgMPjN6tiV+oreoPv3Ft1g==
version "1.1.8"
resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
ipaddr.js@1.9.1:
version "1.9.1"
@@ -16102,14 +16415,15 @@ keyv@^3.0.0:
json-buffer "3.0.0"
keyv@^4.0.0, keyv@^4.0.3:
version "4.3.0"
resolved "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz#b4352e0e4fe7c94111947d6738a6d3fe7903027c"
integrity sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ==
version "4.2.7"
resolved "https://registry.npmjs.org/keyv/-/keyv-4.2.7.tgz#00b8994d46098e8eb8c933cb29aaaf18be5effea"
integrity sha512-HeOstD8SXvtWoQhMMBCelcUuZsiV7T7MwsADtOXT0KuwYP9nCxrSoMDeLXNDTLN3VFSuRp38JzoGbbTboq3QQw==
dependencies:
compress-brotli "^1.3.8"
json-buffer "3.0.1"
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
dependencies:
@@ -16909,9 +17223,9 @@ magic-string@^0.25.7:
sourcemap-codec "^1.4.8"
magic-string@^0.26.1:
version "0.26.1"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz#ba9b651354fa9512474199acecf9c6dbe93f97fd"
integrity sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==
version "0.26.2"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432"
integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==
dependencies:
sourcemap-codec "^1.4.8"
@@ -20789,12 +21103,20 @@ react-helmet@6.1.0:
react-side-effect "^2.1.0"
react-hook-form@^7.12.2, react-hook-form@^7.13.0:
<<<<<<< HEAD
<<<<<<< HEAD
version "7.31.3"
resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.31.3.tgz#b61bafb9a7435f91695351a7a9f714d8c4df0121"
integrity sha512-NVZdCWViIWXXXlQ3jxVQH0NuNfwPf8A/0KvuCxrM9qxtP1qYosfR2ZudarziFrVOC7eTUbWbm1T4OyYCwv9oSQ==
=======
version "7.31.0"
=======
version "7.31.1"
resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.31.1.tgz#16c357dd366bc226172e6acbb5a1672873bbfb28"
integrity sha512-QjtjZ8r8KtEBWWpcXLyQordCraTFxILtyQpaz5KLLxN2YzcC+FZ9LLtOnNGuOnzZo9gCoB+viK3ZHV9Mb2htmQ==
react-hot-loader@^4.13.0:
>>>>>>> Added tests to plugin vault & vault-backend
version "4.13.0"
resolved "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz#c27e9408581c2a678f5316e69c061b226dc6a202"
integrity sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==
@@ -24323,9 +24645,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
uglify-js@^3.1.4:
version "3.15.4"
resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz#fa95c257e88f85614915b906204b9623d4fa340d"
integrity sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==
version "3.15.5"
resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.5.tgz#2b10f9e0bfb3f5c15a8e8404393b6361eaeb33b3"
integrity sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ==
uid-number@0.0.6:
version "0.0.6"
@@ -24975,9 +25297,9 @@ vm2@^3.9.6:
acorn-walk "^8.2.0"
vscode-languageserver-types@^3.15.1:
version "3.16.0"
resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
version "3.17.0"
resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0.tgz#98f27a8855152897c9dde6127cb778ce70c7c239"
integrity sha512-ECJg27DKWEfkIUuNyjMydPsl5Lu7XX1xmwEpZ61I4oeK1qFNbfp3tSZUVmeMPPgnNjasd1rrb3on9jbSe5g3nQ==
w3c-hr-time@^1.0.2:
version "1.0.2"